curvetun: Fix issues detected by the Coverity scanner
[netsniff-ng.git] / dissector_sll.c
blobac8f017f74afacd68e529520bc7fbd8285e152e1
1 /*
2 * netsniff-ng - the packet sniffing beast
3 * Subject to the GPL, version 2.
4 */
6 #include "oui.h"
7 #include "protos.h"
8 #include "pcap_io.h"
9 #include "pkt_buff.h"
10 #include "dissector.h"
11 #include "dissector_sll.h"
12 #include "dissector_eth.h"
14 static char *pkt_type2str(uint8_t pkttype)
16 switch (pkttype) {
17 case PACKET_HOST:
18 return "host";
19 case PACKET_BROADCAST:
20 return "broadcast";
21 case PACKET_MULTICAST:
22 return "multicast";
23 case PACKET_OTHERHOST:
24 return "other host";
25 case PACKET_OUTGOING:
26 return "outgoing";
27 case PACKET_USER:
28 return "user";
29 case PACKET_KERNEL:
30 return "kernel";
33 return "Unknown";
36 static void sll_print_full(struct pkt_buff *pkt)
38 struct sockaddr_ll *sll = pkt->sll;
39 char addr_str[40] = {};
41 tprintf(" [ Linux \"cooked\"");
42 tprintf(" Pkt Type %d (%s)", sll->sll_pkttype,
43 pkt_type2str(sll->sll_pkttype));
44 tprintf(", If Type %d (%s)", sll->sll_hatype,
45 device_type2str(sll->sll_hatype));
46 tprintf(", Addr Len %d", sll->sll_halen);
47 tprintf(", Src (%s)", device_addr2str(sll->sll_addr, sll->sll_halen,
48 sll->sll_hatype, addr_str, sizeof(addr_str)));
49 tprintf(", Proto 0x%x", ntohs(sll->sll_protocol));
50 tprintf(" ]\n");
52 switch (pcap_devtype_to_linktype(sll->sll_hatype)) {
53 case LINKTYPE_EN10MB:
54 case ___constant_swab32(LINKTYPE_EN10MB):
55 pkt_set_dissector(pkt, &eth_lay2, ntohs(sll->sll_protocol));
56 break;
57 case LINKTYPE_NETLINK:
58 case ___constant_swab32(LINKTYPE_NETLINK):
59 pkt->dissector = &nlmsg_ops;
60 break;
61 default:
62 tprintf(" [ Unknown protocol ]\n");
66 static void sll_print_less(struct pkt_buff *pkt)
68 struct sockaddr_ll *sll = pkt->sll;
69 char addr_str[40] = {};
71 tprintf(" Pkt Type %d (%s)", sll->sll_pkttype,
72 pkt_type2str(sll->sll_pkttype));
73 tprintf(", If Type %d (%s)", sll->sll_hatype,
74 device_type2str(sll->sll_hatype));
75 tprintf(", Addr Len %d", sll->sll_halen);
76 tprintf(", Src (%s)", device_addr2str(sll->sll_addr, sll->sll_halen,
77 sll->sll_hatype, addr_str, sizeof(addr_str)));
78 tprintf(", Proto 0x%x", ntohs(sll->sll_protocol));
81 struct protocol sll_ops = {
82 .key = 0,
83 .print_full = sll_print_full,
84 .print_less = sll_print_less,
87 struct protocol *dissector_get_sll_entry_point(void)
89 return &sll_ops;
92 struct protocol *dissector_get_sll_exit_point(void)
94 return &none_ops;
97 void dissector_init_sll(int fnttype)
99 dissector_set_print_type(&sll_ops, fnttype);
100 dissector_set_print_type(&none_ops, fnttype);
101 dissector_init_oui();
104 void dissector_cleanup_sll(void)
106 dissector_cleanup_oui();