… | |
… | |
26 | #include "global.h" |
26 | #include "global.h" |
27 | |
27 | |
28 | struct net_packet { |
28 | struct net_packet { |
29 | u32 len; // actually u16, but padding... |
29 | u32 len; // actually u16, but padding... |
30 | |
30 | |
31 | u8 &operator[] (u16 offset); |
31 | u8 &operator[] (u16 offset) const; |
32 | |
32 | |
33 | void skip_hdr (u16 hdrsize) |
33 | void skip_hdr (u16 hdrsize) |
34 | { |
34 | { |
35 | memmove ((void *)&(*this)[0], (void *)&(*this)[hdrsize], len -= hdrsize); |
35 | memmove ((void *)&(*this)[0], (void *)&(*this)[hdrsize], len -= hdrsize); |
|
|
36 | } |
|
|
37 | |
|
|
38 | void set (const net_packet &pkt) |
|
|
39 | { |
|
|
40 | len = pkt.len; |
|
|
41 | memcpy (&((*this)[0]), &(pkt[0]), len); |
36 | } |
42 | } |
37 | |
43 | |
38 | bool is_arp () |
44 | bool is_arp () |
39 | { |
45 | { |
40 | return (*this)[12] == 0x08 && (*this)[13] == 0x06 // 0806 protocol |
46 | return (*this)[12] == 0x08 && (*this)[13] == 0x06 // 0806 protocol |
… | |
… | |
50 | struct data_packet : net_packet { |
56 | struct data_packet : net_packet { |
51 | u8 data_[MAXSIZE]; |
57 | u8 data_[MAXSIZE]; |
52 | }; |
58 | }; |
53 | |
59 | |
54 | inline |
60 | inline |
55 | u8 &net_packet::operator[] (u16 offset) |
61 | u8 &net_packet::operator[] (u16 offset) const |
56 | { |
62 | { |
57 | return ((data_packet *)this)->data_[offset]; |
63 | return ((data_packet *)this)->data_[offset]; |
58 | } |
64 | } |
59 | |
65 | |
60 | typedef u8 mac[6]; |
66 | typedef u8 mac[6]; |