Blame view

include/linux/if_packet.h 3.44 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef __LINUX_IF_PACKET_H
  #define __LINUX_IF_PACKET_H
0e11c91e1   Al Viro   [AF_PACKET]: anno...
3
  #include <linux/types.h>
d94d9fee9   Eric Dumazet   net: cleanup incl...
4
  struct sockaddr_pkt {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
  	unsigned short spkt_family;
  	unsigned char spkt_device[14];
0e11c91e1   Al Viro   [AF_PACKET]: anno...
7
  	__be16 spkt_protocol;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
9
  struct sockaddr_ll {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
  	unsigned short	sll_family;
0e11c91e1   Al Viro   [AF_PACKET]: anno...
11
  	__be16		sll_protocol;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  	int		sll_ifindex;
  	unsigned short	sll_hatype;
  	unsigned char	sll_pkttype;
  	unsigned char	sll_halen;
  	unsigned char	sll_addr[8];
  };
  
  /* Packet types */
  
  #define PACKET_HOST		0		/* To us		*/
  #define PACKET_BROADCAST	1		/* To all		*/
  #define PACKET_MULTICAST	2		/* To group		*/
  #define PACKET_OTHERHOST	3		/* To someone else 	*/
  #define PACKET_OUTGOING		4		/* Outgoing of any type */
  /* These ones are invisible by user level */
  #define PACKET_LOOPBACK		5		/* MC/BRD frame looped back */
  #define PACKET_FASTROUTE	6		/* Fastrouted frame	*/
  
  /* Packet socket options */
  
  #define PACKET_ADD_MEMBERSHIP		1
  #define PACKET_DROP_MEMBERSHIP		2
  #define PACKET_RECV_OUTPUT		3
  /* Value 4 is still used by obsolete turbo-packet. */
  #define PACKET_RX_RING			5
  #define PACKET_STATISTICS		6
  #define PACKET_COPY_THRESH		7
8dc419447   Herbert Xu   [PACKET]: Add opt...
39
  #define PACKET_AUXDATA			8
80feaacb8   Peter P. Waskiewicz Jr   [AF_PACKET]: Add ...
40
  #define PACKET_ORIGDEV			9
bbd6ef87c   Patrick McHardy   packet: support e...
41
42
  #define PACKET_VERSION			10
  #define PACKET_HDRLEN			11
8913336a7   Patrick McHardy   packet: add PACKE...
43
  #define PACKET_RESERVE			12
69e3c75f4   Johann Baudy   net: TX_RING and ...
44
45
  #define PACKET_TX_RING			13
  #define PACKET_LOSS			14
bfd5f4a3d   Sridhar Samudrala   packet: Add GSO/c...
46
  #define PACKET_VNET_HDR			15
ed85b565b   Richard Cochran   packet: support f...
47
  #define PACKET_TX_TIMESTAMP		16
614f60fa9   Scott McMillan   packet_mmap: expo...
48
  #define PACKET_TIMESTAMP		17
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49

d94d9fee9   Eric Dumazet   net: cleanup incl...
50
  struct tpacket_stats {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
51
52
53
  	unsigned int	tp_packets;
  	unsigned int	tp_drops;
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
54
  struct tpacket_auxdata {
8dc419447   Herbert Xu   [PACKET]: Add opt...
55
56
57
58
59
  	__u32		tp_status;
  	__u32		tp_len;
  	__u32		tp_snaplen;
  	__u16		tp_mac;
  	__u16		tp_net;
393e52e33   Patrick McHardy   packet: deliver V...
60
  	__u16		tp_vlan_tci;
8dc419447   Herbert Xu   [PACKET]: Add opt...
61
  };
69e3c75f4   Johann Baudy   net: TX_RING and ...
62
63
64
65
66
67
68
69
70
71
72
73
  /* Rx ring - header status */
  #define TP_STATUS_KERNEL	0x0
  #define TP_STATUS_USER		0x1
  #define TP_STATUS_COPY		0x2
  #define TP_STATUS_LOSING	0x4
  #define TP_STATUS_CSUMNOTREADY	0x8
  
  /* Tx ring - header status */
  #define TP_STATUS_AVAILABLE	0x0
  #define TP_STATUS_SEND_REQUEST	0x1
  #define TP_STATUS_SENDING	0x2
  #define TP_STATUS_WRONG_FORMAT	0x4
d94d9fee9   Eric Dumazet   net: cleanup incl...
74
  struct tpacket_hdr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
75
  	unsigned long	tp_status;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
79
80
81
82
83
84
85
86
  	unsigned int	tp_len;
  	unsigned int	tp_snaplen;
  	unsigned short	tp_mac;
  	unsigned short	tp_net;
  	unsigned int	tp_sec;
  	unsigned int	tp_usec;
  };
  
  #define TPACKET_ALIGNMENT	16
  #define TPACKET_ALIGN(x)	(((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
  #define TPACKET_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
d94d9fee9   Eric Dumazet   net: cleanup incl...
87
  struct tpacket2_hdr {
bbd6ef87c   Patrick McHardy   packet: support e...
88
89
90
91
92
93
94
  	__u32		tp_status;
  	__u32		tp_len;
  	__u32		tp_snaplen;
  	__u16		tp_mac;
  	__u16		tp_net;
  	__u32		tp_sec;
  	__u32		tp_nsec;
393e52e33   Patrick McHardy   packet: deliver V...
95
  	__u16		tp_vlan_tci;
bbd6ef87c   Patrick McHardy   packet: support e...
96
97
98
  };
  
  #define TPACKET2_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
d94d9fee9   Eric Dumazet   net: cleanup incl...
99
  enum tpacket_versions {
bbd6ef87c   Patrick McHardy   packet: support e...
100
101
102
  	TPACKET_V1,
  	TPACKET_V2,
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
105
106
107
108
109
110
111
112
113
114
  /*
     Frame structure:
  
     - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
     - struct tpacket_hdr
     - pad to TPACKET_ALIGNMENT=16
     - struct sockaddr_ll
     - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
     - Start+tp_mac: [ Optional MAC header ]
     - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
     - Pad to align to TPACKET_ALIGNMENT=16
   */
d94d9fee9   Eric Dumazet   net: cleanup incl...
115
  struct tpacket_req {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
116
117
118
119
120
  	unsigned int	tp_block_size;	/* Minimal size of contiguous block */
  	unsigned int	tp_block_nr;	/* Number of blocks */
  	unsigned int	tp_frame_size;	/* Size of frame */
  	unsigned int	tp_frame_nr;	/* Total number of frames */
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
121
  struct packet_mreq {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
123
124
125
126
127
128
129
130
  	int		mr_ifindex;
  	unsigned short	mr_type;
  	unsigned short	mr_alen;
  	unsigned char	mr_address[8];
  };
  
  #define PACKET_MR_MULTICAST	0
  #define PACKET_MR_PROMISC	1
  #define PACKET_MR_ALLMULTI	2
d95ed9275   Eric W. Biederman   af_packet: Teach ...
131
  #define PACKET_MR_UNICAST	3
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
133
  
  #endif