2 * netsniff-ng - the packet sniffing beast
3 * Copyright 2009, 2010, 2011, 2012 Daniel Borkmann.
4 * Subject to the GPL, version 2.
15 #include "dissector.h"
16 #include "dissector_eth.h"
17 #include "dissector_80211.h"
19 int dissector_set_print_type(void *ptr
, int type
)
21 struct protocol
*proto
;
23 for (proto
= ptr
; proto
; proto
= proto
->next
) {
26 proto
->process
= proto
->print_full
;
29 proto
->process
= proto
->print_less
;
32 proto
->process
= NULL
;
40 static void dissector_main(struct pkt_buff
*pkt
, struct protocol
*start
,
43 struct protocol
*proto
;
48 for (pkt
->proto
= start
; pkt
->proto
; ) {
49 if (unlikely(!pkt
->proto
->process
))
57 if (end
&& likely(end
->process
))
61 void dissector_entry_point(uint8_t *packet
, size_t len
, int linktype
, int mode
)
63 struct protocol
*proto_start
, *proto_end
;
66 if (mode
== PRINT_NONE
)
69 pkt
= pkt_alloc(packet
, len
);
73 case ___constant_swab32(LINKTYPE_EN10MB
):
74 proto_start
= dissector_get_ethernet_entry_point();
75 proto_end
= dissector_get_ethernet_exit_point();
77 case LINKTYPE_IEEE802_11
:
78 case ___constant_swab32(LINKTYPE_IEEE802_11
):
79 proto_start
= dissector_get_ieee80211_entry_point();
80 proto_end
= dissector_get_ieee80211_exit_point();
83 proto_start
= &none_ops
;
88 dissector_main(pkt
, proto_start
, proto_end
);
106 void dissector_init_all(int fnttype
)
108 dissector_init_ethernet(fnttype
);
109 dissector_init_ieee80211(fnttype
);
112 void dissector_cleanup_all(void)
114 dissector_cleanup_ethernet();
115 dissector_cleanup_ieee80211();