| 
  
  
     
     
     Hello all, 
       
       
      I have a protocol/dissector called vrf. 
      vrf         = ip/tcp/vrf/vrf payload 
      vrf payload = ip/tcp... 
       
      To manage vrf payload, I do : 
        call_dissector(<ip dissector handle>, next_tvb, pinfo,
      tree); 
       
      Globaly, it is working. 
       
       
      BUT, not with the following scheme (4 packet contains 3 vrf
      message/pdu) :   
      |-- packet1 --||-- packet2 --||--- packet3
        ---||----- packet4 -----| 
      |------- vrf 1 --------||----- vrf 2 -------------||-----
        vrf 3 ---| 
       
      In this case, my dissector is NOT called for packet 3. 
      --> NOT ok 
       
       
      At the end of call_dissector into vrf 1, some fields of pinfo have
      been modified, at least : 
      - net_src 
      - net_dst 
      - src 
      - dst 
      - srcport                                      not matching the
      ones used for dissector_add_uint 
      - destport                                    not matching the
      ones used for dissector_add_uint 
      Start reading vrf 2 and stop (because packet2 has no enough data)
      with : 
          pinfo->desegment_offset = 0;             /* Start at
      beginning next time */ 
          pinfo->desegment_len = DESEGMENT_ONE_MORE_SEGMENT; 
      Then, my dissector is NOT called for packet3 (it is called for
      packet4). 
      --> NOT ok 
       
      I suppose that the pinfo modifications are the reasons for which
      my dissector is not called for packet3 ? 
      When I cancel these modifications before continue, it works. 
       
       
      NB: it works if I use 
        call_dissector(<data dissector handle>,
      next_tvb, pinfo, tree); 
       
       
      What is wrong ? 
      What is the normal way to manage this ? 
       
         
      Thanks, 
      Olivier 
       
     
  
 |