Prep for the 0.9.14 release
[metze/wireshark/wip.git] / packet-chdlc.c
index a39e48aee14e1439f945633f92b5a629750161d9..7b27352da4c7408a415815b24ba6d592e5f0a8b1 100644 (file)
@@ -1,7 +1,7 @@
 /* packet-chdlc.c
  * Routines for Cisco HDLC packet disassembly
  *
- * $Id: packet-chdlc.c,v 1.15 2002/08/28 21:00:08 jmayer Exp $
+ * $Id: packet-chdlc.c,v 1.19 2003/01/27 19:28:52 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,6 +29,7 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include "etypes.h"
+#include "chdlctypes.h"
 #include <epan/resolv.h>
 #include "packet-chdlc.h"
 #include "packet-ip.h"
@@ -86,15 +87,19 @@ static const value_string chdlc_address_vals[] = {
 };
 
 const value_string chdlc_vals[] = {
-       {0x2000,              "Cisco Discovery Protocol"},
-       {ETHERTYPE_IP,        "IP"},
-       {CISCO_SLARP,         "SLARP"},
-       {ETHERTYPE_DEC_LB,    "DEC LanBridge"},
-       {ETHERTYPE_ATALK,     "Appletalk"},
-       {ETHERTYPE_AARP,      "AARP"},
-       {ETHERTYPE_IPX,       "Netware IPX/SPX"},
-       {ETHERTYPE_ETHBRIDGE, "Transparent Ethernet bridging" },
-       {0,                   NULL}
+       {0x2000,               "Cisco Discovery Protocol"},
+       {ETHERTYPE_IP,         "IP"},
+       {CISCO_SLARP,          "SLARP"},
+       {ETHERTYPE_DEC_LB,     "DEC LanBridge"},
+       {CHDLCTYPE_BPDU,       "Spanning Tree BPDU"},
+       {ETHERTYPE_ATALK,      "Appletalk"},
+       {ETHERTYPE_AARP,       "AARP"},
+       {ETHERTYPE_IPX,        "Netware IPX/SPX"},
+       {ETHERTYPE_ETHBRIDGE,  "Transparent Ethernet bridging" },
+       {CHDLCTYPE_OSI,        "OSI" },
+       {ETHERTYPE_MPLS,       "MPLS unicast"},
+       {ETHERTYPE_MPLS_MULTI, "MPLS multicast"},
+       {0,                     NULL}
 };
 
 void
@@ -143,15 +148,35 @@ dissect_chdlc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
   guint8     addr;
   guint16    proto;
 
-  if (check_col(pinfo->cinfo, COL_RES_DL_SRC))
-    col_set_str(pinfo->cinfo, COL_RES_DL_SRC, "N/A");
-  if (check_col(pinfo->cinfo, COL_RES_DL_DST))
-    col_set_str(pinfo->cinfo, COL_RES_DL_DST, "N/A");
   if (check_col(pinfo->cinfo, COL_PROTOCOL))
     col_set_str(pinfo->cinfo, COL_PROTOCOL, "CHDLC");
   if (check_col(pinfo->cinfo, COL_INFO))
     col_clear(pinfo->cinfo, COL_INFO);
 
+  switch (pinfo->p2p_dir) {
+
+  case P2P_DIR_SENT:
+    if (check_col(pinfo->cinfo, COL_RES_DL_SRC))
+      col_set_str(pinfo->cinfo, COL_RES_DL_SRC, "DTE");
+    if (check_col(pinfo->cinfo, COL_RES_DL_DST))
+      col_set_str(pinfo->cinfo, COL_RES_DL_DST, "DCE");
+    break;
+
+  case P2P_DIR_RECV:
+    if (check_col(pinfo->cinfo, COL_RES_DL_SRC))
+      col_set_str(pinfo->cinfo, COL_RES_DL_SRC, "DCE");
+    if (check_col(pinfo->cinfo, COL_RES_DL_DST))
+      col_set_str(pinfo->cinfo, COL_RES_DL_DST, "DTE");
+    break;
+
+  default:
+    if (check_col(pinfo->cinfo, COL_RES_DL_SRC))
+      col_set_str(pinfo->cinfo, COL_RES_DL_SRC, "N/A");
+    if (check_col(pinfo->cinfo, COL_RES_DL_DST))
+      col_set_str(pinfo->cinfo, COL_RES_DL_DST, "N/A");
+    break;
+  }
+
   addr = tvb_get_guint8(tvb, 0);
   proto = tvb_get_ntohs(tvb, 2);