2 * netsniff-ng - the packet sniffing beast
3 * Subject to the GPL, version 2.
11 #include "dissector.h"
12 #include "dissector_sll.h"
13 #include "dissector_eth.h"
14 #include "dissector_netlink.h"
17 static char *pkt_type2str(uint8_t pkttype
)
22 case PACKET_BROADCAST
:
24 case PACKET_MULTICAST
:
26 case PACKET_OTHERHOST
:
39 static void sll_print_full(struct pkt_buff
*pkt
)
41 struct sockaddr_ll
*sll
= pkt
->sll
;
42 char addr_str
[40] = {};
44 tprintf(" [ Linux \"cooked\"");
45 tprintf(" Pkt Type %d (%s)", sll
->sll_pkttype
,
46 pkt_type2str(sll
->sll_pkttype
));
47 tprintf(", If Type %d (%s)", sll
->sll_hatype
,
48 device_type2str(sll
->sll_hatype
));
49 tprintf(", Addr Len %d", sll
->sll_halen
);
50 tprintf(", Src (%s)", device_addr2str(sll
->sll_addr
, sll
->sll_halen
,
51 sll
->sll_hatype
, addr_str
, sizeof(addr_str
)));
52 tprintf(", Proto 0x%x", ntohs(sll
->sll_protocol
));
55 switch (pcap_devtype_to_linktype(sll
->sll_hatype
)) {
57 case ___constant_swab32(LINKTYPE_EN10MB
):
58 pkt_set_dissector(pkt
, ð_lay2
, ntohs(sll
->sll_protocol
));
60 case LINKTYPE_NETLINK
:
61 case ___constant_swab32(LINKTYPE_NETLINK
):
62 pkt
->dissector
= dissector_get_netlink_entry_point();
65 tprintf(" [ Unknown protocol ]\n");
69 static void sll_print_less(struct pkt_buff
*pkt
)
71 struct sockaddr_ll
*sll
= pkt
->sll
;
72 char addr_str
[40] = {};
74 tprintf(" Pkt Type %d (%s)", sll
->sll_pkttype
,
75 pkt_type2str(sll
->sll_pkttype
));
76 tprintf(", If Type %d (%s)", sll
->sll_hatype
,
77 device_type2str(sll
->sll_hatype
));
78 tprintf(", Addr Len %d", sll
->sll_halen
);
79 tprintf(", Src (%s)", device_addr2str(sll
->sll_addr
, sll
->sll_halen
,
80 sll
->sll_hatype
, addr_str
, sizeof(addr_str
)));
81 tprintf(", Proto 0x%x", ntohs(sll
->sll_protocol
));
84 struct protocol sll_ops
= {
86 .print_full
= sll_print_full
,
87 .print_less
= sll_print_less
,
90 struct protocol
*dissector_get_sll_entry_point(void)
95 struct protocol
*dissector_get_sll_exit_point(void)
100 void dissector_init_sll(int fnttype
)
102 dissector_set_print_type(&sll_ops
, fnttype
);
103 dissector_set_print_type(&none_ops
, fnttype
);
107 void dissector_cleanup_sll(void)
109 lookup_cleanup(LT_OUI
);