Hi,

Please read http://www.wireshark.org/docs/wsdg_html/#ChSrcSend about 
submitting patches for Wireshark. Just to make sure it doesn't get lost.

Thanx,
Jaap

Francesco Fondelli wrote:
> Hi all,
> 
> Attached is a patch for:
> 
> - PW Associated Channel Header dissection as per RFC 4385
> - PW MPLS Control Word dissection as per RFC 4385
> - mpls subdissector table indexed by label value
> - enhanced "what's past last mpls label?" heuristic
> - Ethernet PW (w/o CW) support as per RFC 4448
> 
> The new logic to dissect data after last mpls label is:
> 
> if (!dissector_try_label(mpls_subdissector_table, label, ...)) {
>        if (nibble == 6) {
>                call_dissector(ipv6_handle, ...);
>        } else if (nibble == 4) {
>                call_dissector(ipv4_handle, ...);
>        } else if (nibble == 1) {
>                dissect_pw_ach(next_tvb, ...);
>        } else if (nibble == 0) {
>               if (looks_like_plain_eth(next_tvb)) {
>                      call_dissector(eth_withoutfcs_handle, next_tvb, ...);
>               } else {
>                      dissect_pw_mcw(next_tvb, ...);
>               }
>        } else {
>               call_dissector(eth_withoutfcs_handle, ...);
>        }
> }
> 
> The mpls protocol dissector has now a subdissector table indexed by label.
> If the user specifies a binding (through "Decode as...") label N <--> proto X
> wireshark will pass data past last mpls label to dissector X. If there is
> no label2proto binding the legacy "first nibble based" algorithm (corrected 
> and
> enhanced) is used.
> 
> the original code was:
> 
>      if (ipvers == 6) {
>        call_dissector(ipv6_handle, next_tvb, pinfo, tree);
>      } else if (ipvers == 4) {
>        call_dissector(ipv4_handle, next_tvb, pinfo, tree);
>      } else if (ipvers == 1) {
>        dissect_mpls_control(next_tvb, pinfo, tree);
>      } else {
>        call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
>      }
> 
> dissect_mpls_control() is now called dissect_pw_ach() (ach stands for
> Associated Channel Header) as per RFC 4385 terminology.
> dissect_pw_mcw() (mcw stands for MPLS Generic/Preferred Control Word)
> is called only if the first nibble is 0 (as per RFC 4385) and if the
> first 12 bytes of data look like two mac addresses.
> 
> Ethernet PWs are common nowadays with and without CW (control word:
> 4 bytes between last mpls label and the encapsulated ethernet header)
> in service provider networks.  I have been told few times that
> "wireshark doesn't work" because of the CW presence.  This patch
> "automagically" provides a valid dissection in most common "eth
> PWs with/without CW" cases.
> 
> Moreover, this patch allows wireshark users to manually provide info
> in case the heuristic fails.
> 
> If you accept this changes new dissectors, one for each type of PW
> encapsulated traffic, can be easily implemented (packet-pw-eth.c is
> provided as a starting point).
> 
> - Structure-Agnostic Time Division Multiplexing (TDM) over Packet
>   (SAToP) (RFC 4553)
> 
> - Structure-Aware Time Division Multiplexed (TDM) Circuit Emulation Service
>   over Packet Switched Network
>   (CESoPSN) (RFC 5086)
> 
> are at the top of my to-do list.
> 
> I have used and fuzz-tested this code.  Please check it in.
> 
> Ciao
> FF
> 
> ps
> patch is against svn #25387 but unfortunately is a "diff -ru dir1 dir2"
> because I cannot "svn diff" anymore due to bad bad proxy settings,
> sorry, it should work fine anyway.
> 
> pps
> bug report is #2689
> 
> 

_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@wireshark.org
https://wireshark.org/mailman/listinfo/wireshark-dev

Reply via email to