Include <time.h> to declare "gmtime()".
[obnox/wireshark/wip.git] / ethertype.c
index 55fe9bebbb80d153bb57821fe081c6662d347240..a315499eec0634726ba52633949fb76793043085 100644 (file)
@@ -2,6 +2,8 @@
  * Routines for calling the right protocol for the ethertype.
  * This is called by both packet-eth.c (Ethernet II) and packet-llc.c (SNAP)
  *
+ * $Id: ethertype.c,v 1.21 1999/12/05 20:05:44 nneul Exp $
+ *
  * Gilbert Ramirez <gram@verdict.uthscsa.edu>
  *
  * Ethereal - Network traffic analyzer
 # include "config.h"
 #endif
 
-#include <gtk/gtk.h>
-
-#include <stdio.h>
-
-#include <pcap.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
 
+#include <glib.h>
 #include "packet.h"
-#include "ethereal.h"
 #include "etypes.h"
 
+const value_string etype_vals[] = {
+    {ETHERTYPE_IP,     "IP"             },
+    {ETHERTYPE_IPv6,   "IPv6"           },
+    {ETHERTYPE_ARP,    "ARP"            },
+    {ETHERTYPE_REVARP, "RARP"           },
+    {ETHERTYPE_ATALK,  "Appletalk"      },
+    {ETHERTYPE_AARP,   "AARP"           },
+    {ETHERTYPE_IPX,    "Netware IPX/SPX"},
+    {ETHERTYPE_VINES,  "Vines"          },
+    {ETHERTYPE_CDP,    "CDP"            }, /* Cisco Discovery Protocol */
+    {ETHERTYPE_TRAIN,   "Netmon Train"  },
+    {ETHERTYPE_LOOP,   "Loopback"       }, /* Ethernet Loopback */
+    {ETHERTYPE_PPPOED, "PPPoE Discovery"}, 
+    {ETHERTYPE_PPPOES, "PPPoE Session"  }, 
+    {ETHERTYPE_VLAN,   "802.1Q Virtual LAN" },
+    {0,                 NULL            } };
+
 void
-ethertype(guint16 etype, int offset,
-               const u_char *pd, frame_data *fd, GtkTree *tree, GtkWidget
-               *fh_tree)
+capture_ethertype(guint16 etype, int offset,
+               const u_char *pd, guint32 cap_len, packet_counts *ld)
 {
-  gchar      etype_str[][10] = {"IP", "ARP", "RARP", "AppleTalk", "AARP"};
+  switch (etype) {
+    case ETHERTYPE_IP:
+      capture_ip(pd, offset, cap_len, ld);
+      break;
+    case ETHERTYPE_IPX:
+      capture_ipx(pd, offset, cap_len, ld);
+      break;
+    case ETHERTYPE_VLAN:
+      capture_vlan(pd, offset, cap_len, ld);
+      break;
+    default:
+      ld->other++;
+      break;
+  }
+}
 
+void
+ethertype(guint16 etype, int offset,
+               const u_char *pd, frame_data *fd, proto_tree *tree, proto_tree
+               *fh_tree, int item_id)
+{
+  if (tree) {
+       proto_tree_add_item(fh_tree, item_id, offset - 2, 2, etype);
+  }
   switch (etype) {
     case ETHERTYPE_IP:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2, "Type: IP (0x%04x)",
-          etype);
-      }
       dissect_ip(pd, offset, fd, tree);
       break;
     case ETHERTYPE_IPv6:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2, "Type: IPv6 (0x%04x)",
-          etype);
-      }
       dissect_ipv6(pd, offset, fd, tree);
       break;
     case ETHERTYPE_ARP:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2,
-          "Type: ARP (0x%04x)", etype);
-      }
       dissect_arp(pd, offset, fd, tree);
       break;
     case ETHERTYPE_REVARP:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2,
-          "Type: RARP (0x%04x)", etype);
-      }
       dissect_arp(pd, offset, fd, tree);
       break;
     case ETHERTYPE_ATALK:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2,
-          "Type: AppleTalk (0x%04x)", etype);
-      }
-      if (fd->win_info[0]) { strcpy(fd->win_info[3], etype_str[3]); }
+      dissect_ddp(pd, offset, fd, tree);
       break;
     case ETHERTYPE_AARP:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2,
-          "Type: AARP (0x%04x)", etype);
-      }
-      if (fd->win_info[0]) { strcpy(fd->win_info[3], etype_str[4]); }
+      dissect_aarp(pd, offset, fd, tree);
       break;
     case ETHERTYPE_IPX:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2,
-          "Type: Netware IPX/SPX (0x%04x)", etype);
-      }
       dissect_ipx(pd, offset, fd, tree);
       break;
+    case ETHERTYPE_VINES:
+      dissect_vines(pd, offset, fd, tree);
+      break;
+    case ETHERTYPE_CDP:
+      dissect_cdp(pd, offset, fd, tree);
+      break;
+    case ETHERTYPE_LOOP:
+      dissect_data(pd, offset, fd, tree);
+      if (check_col(fd, COL_PROTOCOL)) { col_add_fstr(fd, COL_PROTOCOL, "LOOP"); }
+      break;
+    case ETHERTYPE_PPPOED:
+      dissect_pppoed(pd, offset, fd, tree);
+      break;
+    case ETHERTYPE_PPPOES:
+      dissect_pppoes(pd, offset, fd, tree);
+      break;
+    case ETHERTYPE_VLAN:
+      dissect_vlan(pd, offset, fd, tree);
+      break;
+    case ETHERTYPE_SNMP:
+      dissect_snmp(pd, offset, fd, tree);
+      break;
     default:
-      if (tree) {
-        add_item_to_tree(fh_tree, offset - 2, 2,
-          "Type: Unknown (0x%04x)", etype);
-                 dissect_data(pd, offset, fd, tree);
-         }
-      if (fd->win_info[0]) { sprintf(fd->win_info[3], "0x%04x", etype); }
+      dissect_data(pd, offset, fd, tree);
+      if (check_col(fd, COL_PROTOCOL)) { col_add_fstr(fd, COL_PROTOCOL, "0x%04x", etype); }
       break;
   }
- }
+}
+
+
+