if_packet.h
001: #ifndef __LINUX_IF_PACKET_H
002: #define __LINUX_IF_PACKET_H
003:
004: #include <linux/types.h>
005:
006: struct sockaddr_pkt {
007: unsigned short spkt_family;
008: unsigned char spkt_device[14];
009: __be16 spkt_protocol;
010: };
011:
012: struct sockaddr_ll {
013: unsigned short sll_family;
014: __be16 sll_protocol;
015: int sll_ifindex;
016: unsigned short sll_hatype;
017: unsigned char sll_pkttype;
018: unsigned char sll_halen;
019: unsigned char sll_addr[8];
020: };
021:
022:
023:
024: #define PACKET_HOST 0
025: #define PACKET_BROADCAST 1
026: #define PACKET_MULTICAST 2
027: #define PACKET_OTHERHOST 3
028: #define PACKET_OUTGOING 4
029:
030: #define PACKET_LOOPBACK 5
031: #define PACKET_FASTROUTE 6
032:
033:
034:
035: #define PACKET_ADD_MEMBERSHIP 1
036: #define PACKET_DROP_MEMBERSHIP 2
037: #define PACKET_RECV_OUTPUT 3
038:
039: #define PACKET_RX_RING 5
040: #define PACKET_STATISTICS 6
041: #define PACKET_COPY_THRESH 7
042: #define PACKET_AUXDATA 8
043: #define PACKET_ORIGDEV 9
044: #define PACKET_VERSION 10
045: #define PACKET_HDRLEN 11
046: #define PACKET_RESERVE 12
047: #define PACKET_TX_RING 13
048: #define PACKET_LOSS 14
049: #define PACKET_VNET_HDR 15
050: #define PACKET_TX_TIMESTAMP 16
051: #define PACKET_TIMESTAMP 17
052: #define PACKET_FANOUT 18
053:
054: #define PACKET_FANOUT_HASH 0
055: #define PACKET_FANOUT_LB 1
056: #define PACKET_FANOUT_CPU 2
057: #define PACKET_FANOUT_FLAG_DEFRAG 0x8000
058:
059: struct tpacket_stats {
060: unsigned int tp_packets;
061: unsigned int tp_drops;
062: };
063:
064: struct tpacket_stats_v3 {
065: unsigned int tp_packets;
066: unsigned int tp_drops;
067: unsigned int tp_freeze_q_cnt;
068: };
069:
070: union tpacket_stats_u {
071: struct tpacket_stats stats1;
072: struct tpacket_stats_v3 stats3;
073: };
074:
075: struct tpacket_auxdata {
076: __u32 tp_status;
077: __u32 tp_len;
078: __u32 tp_snaplen;
079: __u16 tp_mac;
080: __u16 tp_net;
081: __u16 tp_vlan_tci;
082: __u16 tp_padding;
083: };
084:
085:
086: #define TP_STATUS_KERNEL 0x0
087: #define TP_STATUS_USER 0x1
088: #define TP_STATUS_COPY 0x2
089: #define TP_STATUS_LOSING 0x4
090: #define TP_STATUS_CSUMNOTREADY 0x8
091: #define TP_STATUS_VLAN_VALID 0x10
092: #define TP_STATUS_BLK_TMO 0x20
093:
094:
095: #define TP_STATUS_AVAILABLE 0x0
096: #define TP_STATUS_SEND_REQUEST 0x1
097: #define TP_STATUS_SENDING 0x2
098: #define TP_STATUS_WRONG_FORMAT 0x4
099:
100:
101: #define TP_FT_REQ_FILL_RXHASH 0x1
102:
103: struct tpacket_hdr {
104: unsigned long tp_status;
105: unsigned int tp_len;
106: unsigned int tp_snaplen;
107: unsigned short tp_mac;
108: unsigned short tp_net;
109: unsigned int tp_sec;
110: unsigned int tp_usec;
111: };
112:
113: #define TPACKET_ALIGNMENT 16
114: #define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
115: #define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
116:
117: struct tpacket2_hdr {
118: __u32 tp_status;
119: __u32 tp_len;
120: __u32 tp_snaplen;
121: __u16 tp_mac;
122: __u16 tp_net;
123: __u32 tp_sec;
124: __u32 tp_nsec;
125: __u16 tp_vlan_tci;
126: __u16 tp_padding;
127: };
128:
129: struct tpacket_hdr_variant1 {
130: __u32 tp_rxhash;
131: __u32 tp_vlan_tci;
132: };
133:
134: struct tpacket3_hdr {
135: __u32 tp_next_offset;
136: __u32 tp_sec;
137: __u32 tp_nsec;
138: __u32 tp_snaplen;
139: __u32 tp_len;
140: __u32 tp_status;
141: __u16 tp_mac;
142: __u16 tp_net;
143:
144: union {
145: struct tpacket_hdr_variant1 hv1;
146: };
147: };
148:
149: struct tpacket_bd_ts {
150: unsigned int ts_sec;
151: union {
152: unsigned int ts_usec;
153: unsigned int ts_nsec;
154: };
155: };
156:
157: struct tpacket_hdr_v1 {
158: __u32 block_status;
159: __u32 num_pkts;
160: __u32 offset_to_first_pkt;
161:
162:
163:
164:
165: __u32 blk_len;
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176: __aligned_u64 seq_num;
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203: struct tpacket_bd_ts ts_first_pkt, ts_last_pkt;
204: };
205:
206: union tpacket_bd_header_u {
207: struct tpacket_hdr_v1 bh1;
208: };
209:
210: struct tpacket_block_desc {
211: __u32 version;
212: __u32 offset_to_priv;
213: union tpacket_bd_header_u hdr;
214: };
215:
216: #define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
217: #define TPACKET3_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket3_hdr)) + sizeof(struct sockaddr_ll))
218:
219: enum tpacket_versions {
220: TPACKET_V1,
221: TPACKET_V2,
222: TPACKET_V3
223: };
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238: struct tpacket_req {
239: unsigned int tp_block_size;
240: unsigned int tp_block_nr;
241: unsigned int tp_frame_size;
242: unsigned int tp_frame_nr;
243: };
244:
245: struct tpacket_req3 {
246: unsigned int tp_block_size;
247: unsigned int tp_block_nr;
248: unsigned int tp_frame_size;
249: unsigned int tp_frame_nr;
250: unsigned int tp_retire_blk_tov;
251: unsigned int tp_sizeof_priv;
252: unsigned int tp_feature_req_word;
253: };
254:
255: union tpacket_req_u {
256: struct tpacket_req req;
257: struct tpacket_req3 req3;
258: };
259:
260: struct packet_mreq {
261: int mr_ifindex;
262: unsigned short mr_type;
263: unsigned short mr_alen;
264: unsigned char mr_address[8];
265: };
266:
267: #define PACKET_MR_MULTICAST 0
268: #define PACKET_MR_PROMISC 1
269: #define PACKET_MR_ALLMULTI 2
270: #define PACKET_MR_UNICAST 3
271:
272: #endif
273:
© Andrew Scott 2006 -
2024,
All Rights Reserved