mausezahn: use getopt_long instead of getopt
[netsniff-ng.git] / dissector_eth.c
blob3a93f408efa5a93a06ce25578f0897baf1439cb2
1 /*
2 * netsniff-ng - the packet sniffing beast
3 * Copyright 2009, 2010 Daniel Borkmann.
4 * Subject to the GPL, version 2.
5 */
7 #include <stdint.h>
9 #include "hash.h"
10 #include "proto.h"
11 #include "protos.h"
12 #include "dissector.h"
13 #include "dissector_eth.h"
14 #include "lookup.h"
15 #include "xmalloc.h"
17 struct hash_table eth_lay2;
18 struct hash_table eth_lay3;
20 static inline void dissector_init_entry(int type)
22 dissector_set_print_type(&ethernet_ops, type);
25 static inline void dissector_init_exit(int type)
27 dissector_set_print_type(&none_ops, type);
30 static void dissector_init_layer_2(int type)
32 init_hash(&eth_lay2);
33 INSERT_HASH_PROTOS(arp_ops, eth_lay2);
34 INSERT_HASH_PROTOS(lldp_ops, eth_lay2);
35 INSERT_HASH_PROTOS(vlan_ops, eth_lay2);
36 INSERT_HASH_PROTOS(ipv4_ops, eth_lay2);
37 INSERT_HASH_PROTOS(ipv6_ops, eth_lay2);
38 INSERT_HASH_PROTOS(QinQ_ops, eth_lay2);
39 INSERT_HASH_PROTOS(mpls_uc_ops, eth_lay2);
40 for_each_hash_int(&eth_lay2, dissector_set_print_type, type);
43 static void dissector_init_layer_3(int type)
45 init_hash(&eth_lay3);
46 INSERT_HASH_PROTOS(icmpv4_ops, eth_lay3);
47 INSERT_HASH_PROTOS(icmpv6_ops, eth_lay3);
48 INSERT_HASH_PROTOS(igmp_ops, eth_lay3);
49 INSERT_HASH_PROTOS(ip_auth_ops, eth_lay3);
50 INSERT_HASH_PROTOS(ip_esp_ops, eth_lay3);
51 INSERT_HASH_PROTOS(ipv6_dest_opts_ops, eth_lay3);
52 INSERT_HASH_PROTOS(ipv6_fragm_ops, eth_lay3);
53 INSERT_HASH_PROTOS(ipv6_hop_by_hop_ops, eth_lay3);
54 INSERT_HASH_PROTOS(ipv6_in_ipv4_ops, eth_lay3);
55 INSERT_HASH_PROTOS(ipv6_mobility_ops, eth_lay3);
56 INSERT_HASH_PROTOS(ipv6_no_next_header_ops, eth_lay3);
57 INSERT_HASH_PROTOS(ipv6_routing_ops, eth_lay3);
58 INSERT_HASH_PROTOS(tcp_ops, eth_lay3);
59 INSERT_HASH_PROTOS(udp_ops, eth_lay3);
60 INSERT_HASH_PROTOS(dccp_ops, eth_lay3);
61 for_each_hash_int(&eth_lay3, dissector_set_print_type, type);
64 void dissector_init_ethernet(int fnttype)
66 dissector_init_entry(fnttype);
67 dissector_init_layer_2(fnttype);
68 dissector_init_layer_3(fnttype);
69 dissector_init_exit(fnttype);
71 lookup_init(LT_PORTS_UDP);
72 lookup_init(LT_PORTS_TCP);
73 lookup_init(LT_ETHERTYPES);
74 lookup_init(LT_OUI);
77 void dissector_cleanup_ethernet(void)
79 free_hash(&eth_lay2);
80 free_hash(&eth_lay3);
82 lookup_cleanup(LT_OUI);
83 lookup_cleanup(LT_ETHERTYPES);
84 lookup_cleanup(LT_PORTS_TCP);
85 lookup_cleanup(LT_PORTS_UDP);