Wireshark-dev: [Wireshark-dev] ATM Dissector Enhancement

From: "McAtee, Kip" <Kip.McAtee@xxxxxxxxxxx>
Date: Tue, 24 Jun 2008 14:01:39 -1000

Greetings-

 

Here are the changes we propose for the packet-atm dissector:

 

Index: epan/dissectors/packet-atm.c

===================================================================

--- epan/dissectors/packet-atm.c        (revision 25594)

+++ epan/dissectors/packet-atm.c        (working copy)

@@ -69,6 +69,9 @@

 static dissector_handle_t lane_handle;

 static dissector_handle_t ilmi_handle;

 static dissector_handle_t fp_handle;

+static dissector_handle_t ppp_handle;

+static dissector_handle_t eth_handle;

+static dissector_handle_t ip_handle;

 static dissector_handle_t data_handle;

 

 static gboolean dissect_lanesscop = FALSE;

@@ -1106,11 +1109,61 @@

       break;

 

     default:

-      if (tree) {

-        /* Dump it as raw data. */

-        call_dissector(data_handle, next_tvb, pinfo, tree);

-        break;

+      {

+        gboolean decoded = FALSE;

+

+        if (tvb_length(next_tvb) > 20) /* arbitrary size */

+        {

+            guint8 octet[8];

+            tvb_memcpy(next_tvb, octet, 0, sizeof(octet));

+

+            decoded = TRUE;

+            if (octet[0] == 0x00 && octet[1] == 0x21)

+            {

+                call_dissector(ppp_handle, next_tvb, pinfo, tree);

+            }

+            else if (octet[0] == 0x00 && octet[1] == 0x00)

+            {

+                /* assume vc muxed bridged ethernet */

+                proto_tree_add_text(tree, tvb, 0, 2, "Pad: 0x0000");

+                next_tvb = tvb_new_subset(tvb, 2, -1, -1);

+                call_dissector(eth_handle, next_tvb, pinfo, tree);

+            }

+            else if (octet[2] == 0x03    && // NLPID

+                    ((octet[3] == 0xcc   || // IPv4

+                      octet[3] == 0x8e)  || // IPv6

+                     (octet[3] == 0x00   && // Eth

+                      octet[4] == 0x80)))  // Eth

+            {

+                /* assume network interworking with FR 2 byte header */

+                call_dissector(fr_handle, next_tvb, pinfo, tree);

+            }

+            else if (octet[4] == 0x03    && // NLPID

+                    ((octet[5] == 0xcc   || // IPv4

+                      octet[5] == 0x8e)  || // IPv6

+                     (octet[5] == 0x00   && // Eth

+                      octet[6] == 0x80)))   // Eth

+            {

+                /* assume network interworking with FR 4 byte header */

+                call_dissector(fr_handle, next_tvb, pinfo, tree);

+            }

+            else if ((octet[0] == 0x45) ||

+                     ((octet[0] & 0xf0) == 0x60))

+            {

+                call_dissector(ip_handle, next_tvb, pinfo, tree);

+            }

+            else

+            {

+                decoded = FALSE;

+            }

+        }

+

+        if (tree && !decoded) {

+            /* Dump it as raw data. */

+            call_dissector(data_handle, next_tvb, pinfo, tree);

+        }

       }

+      break;

     }

     break;

 

@@ -1729,6 +1782,9 @@

        sscop_handle = find_dissector("sscop");

        lane_handle = find_dissector("lane");

        ilmi_handle = find_dissector("ilmi");

+    ppp_handle = find_dissector("ppp");

+    eth_handle = find_dissector("eth");

+    ip_handle = find_dissector("ip");

        data_handle = find_dissector("data");

        fp_handle = find_dissector("fp");

 




E-mail confidentiality.
--------------------------------
This e-mail contains confidential and / or privileged information belonging to Spirent Communications plc, its affiliates and / or subsidiaries. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution and / or the taking of any action based upon reliance on the contents of this transmission is strictly forbidden. If you have received this message in error please notify the sender by return e-mail and delete it from your system. If you require assistance, please contact our IT department at helpdesk@xxxxxxxxxxx.

Spirent Communications plc,
Northwood Park, Gatwick Road, Crawley, West Sussex, RH10 9XN, United Kingdom.
Tel No. +44 (0) 1293 767676
Fax No. +44 (0) 1293 767677

Registered in England Number 470893
Registered at Northwood Park, Gatwick Road, Crawley, West Sussex, RH10 9XN, United Kingdom.

Or if within the US,

Spirent Communications,
26750 Agoura Road, Calabasas, CA, 91302, USA.
Tel No. 1-818-676- 2300