2 * netsniff-ng - the packet sniffing beast
3 * Subject to the GPL, version 2.
10 #include "dissector.h"
11 #include "dissector_sll.h"
12 #include "dissector_eth.h"
14 static char *pkt_type2str(uint8_t pkttype
)
19 case PACKET_BROADCAST
:
21 case PACKET_MULTICAST
:
23 case PACKET_OTHERHOST
:
36 static void sll_print_full(struct pkt_buff
*pkt
)
38 struct sockaddr_ll
*sll
;
39 char addr_str
[40] = {};
41 if (!pkt
|| !pkt
->sll
)
45 tprintf(" [ Linux \"cooked\"");
46 tprintf(" Pkt Type %d (%s)", sll
->sll_pkttype
,
47 pkt_type2str(sll
->sll_pkttype
));
48 tprintf(", If Type %d (%s)", sll
->sll_hatype
,
49 device_type2str(sll
->sll_hatype
));
50 tprintf(", Addr Len %d", sll
->sll_halen
);
51 tprintf(", Src (%s)", device_addr2str(sll
->sll_addr
, sll
->sll_halen
,
52 sll
->sll_hatype
, addr_str
, sizeof(addr_str
)));
53 tprintf(", Proto 0x%x", ntohs(sll
->sll_protocol
));
56 switch (pcap_devtype_to_linktype(sll
->sll_hatype
)) {
58 case ___constant_swab32(LINKTYPE_EN10MB
):
59 pkt_set_dissector(pkt
, ð_lay2
, ntohs(sll
->sll_protocol
));
61 case LINKTYPE_NETLINK
:
62 case ___constant_swab32(LINKTYPE_NETLINK
):
63 pkt
->dissector
= &nlmsg_ops
;
66 tprintf(" [ Uknown protocol ]\n");
70 static void sll_print_less(struct pkt_buff
*pkt
)
72 struct sockaddr_ll
*sll
;
73 char addr_str
[40] = {};
75 if (!pkt
|| !pkt
->sll
)
79 tprintf(" Pkt Type %d (%s)", sll
->sll_pkttype
,
80 pkt_type2str(sll
->sll_pkttype
));
81 tprintf(", If Type %d (%s)", sll
->sll_hatype
,
82 device_type2str(sll
->sll_hatype
));
83 tprintf(", Addr Len %d", sll
->sll_halen
);
84 tprintf(", Src (%s)", device_addr2str(sll
->sll_addr
, sll
->sll_halen
,
85 sll
->sll_hatype
, addr_str
, sizeof(addr_str
)));
86 tprintf(", Proto 0x%x", ntohs(sll
->sll_protocol
));
89 struct protocol sll_ops
= {
91 .print_full
= sll_print_full
,
92 .print_less
= sll_print_less
,
95 struct protocol
*dissector_get_sll_entry_point(void)
100 struct protocol
*dissector_get_sll_exit_point(void)
105 void dissector_init_sll(int fnttype
)
107 dissector_set_print_type(&sll_ops
, fnttype
);
108 dissector_set_print_type(&none_ops
, fnttype
);
109 dissector_init_oui();
112 void dissector_cleanup_sll(void)
114 dissector_cleanup_oui();