… | |
… | |
17 | */ |
17 | */ |
18 | |
18 | |
19 | #ifndef VPE_DEVICE_H__ |
19 | #ifndef VPE_DEVICE_H__ |
20 | #define VPE_DEVICE_H__ |
20 | #define VPE_DEVICE_H__ |
21 | |
21 | |
22 | #include "config.h" |
|
|
23 | |
|
|
24 | #include <cstdlib> |
|
|
25 | |
|
|
26 | #include <net/if.h> |
22 | #include <net/if.h> |
27 | |
23 | |
28 | #include "gettext.h" |
24 | #include "gettext.h" |
29 | |
25 | |
30 | #include "global.h" |
26 | #include "global.h" |
31 | |
27 | |
32 | struct net_packet { |
28 | struct net_packet { |
33 | u32 len; // actually u16, but padding... |
29 | u32 len; // actually u16, but padding... |
34 | |
30 | |
35 | u8 &operator[] (u16 offset); |
31 | u8 &operator[] (u16 offset) const; |
|
|
32 | |
|
|
33 | void unshift_hdr (u16 hdrsize) |
|
|
34 | { |
|
|
35 | memmove ((void *)&(*this)[hdrsize], (void *)&(*this)[0], len); |
|
|
36 | len += hdrsize; |
|
|
37 | } |
|
|
38 | |
|
|
39 | void skip_hdr (u16 hdrsize) |
|
|
40 | { |
|
|
41 | len -= hdrsize; |
|
|
42 | memmove ((void *)&(*this)[0], (void *)&(*this)[hdrsize], len); |
|
|
43 | } |
|
|
44 | |
|
|
45 | void set (const net_packet &pkt) |
|
|
46 | { |
|
|
47 | len = pkt.len; |
|
|
48 | memcpy (&((*this)[0]), &(pkt[0]), len); |
|
|
49 | } |
36 | |
50 | |
37 | bool is_arp () |
51 | bool is_arp () |
38 | { |
52 | { |
39 | return (*this)[12] == 0x08 && (*this)[13] == 0x06 // 0806 protocol |
53 | return (*this)[12] == 0x08 && (*this)[13] == 0x06 // 0806 protocol |
40 | && (*this)[14] == 0x00 && (*this)[15] == 0x01 // 0001 hw_format |
54 | && (*this)[14] == 0x00 && (*this)[15] == 0x01 // 0001 hw_format |
… | |
… | |
49 | struct data_packet : net_packet { |
63 | struct data_packet : net_packet { |
50 | u8 data_[MAXSIZE]; |
64 | u8 data_[MAXSIZE]; |
51 | }; |
65 | }; |
52 | |
66 | |
53 | inline |
67 | inline |
54 | u8 &net_packet::operator[] (u16 offset) |
68 | u8 &net_packet::operator[] (u16 offset) const |
55 | { |
69 | { |
56 | return ((data_packet *)this)->data_[offset]; |
70 | return ((data_packet *)this)->data_[offset]; |
57 | } |
71 | } |
58 | |
72 | |
59 | typedef u8 mac[6]; |
73 | typedef u8 mac[6]; |