• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/include/linux/
1#ifndef __LINUX_IF_PACKET_H
2#define __LINUX_IF_PACKET_H
3
4#include <linux/types.h>
5
6struct sockaddr_pkt {
7	unsigned short spkt_family;
8	unsigned char spkt_device[14];
9	__be16 spkt_protocol;
10};
11
12struct sockaddr_ll {
13	unsigned short	sll_family;
14	__be16		sll_protocol;
15	int		sll_ifindex;
16	unsigned short	sll_hatype;
17	unsigned char	sll_pkttype;
18	unsigned char	sll_halen;
19	unsigned char	sll_addr[8];
20};
21
22/* Packet types */
23
24#define PACKET_HOST		0		/* To us		*/
25#define PACKET_BROADCAST	1		/* To all		*/
26#define PACKET_MULTICAST	2		/* To group		*/
27#define PACKET_OTHERHOST	3		/* To someone else 	*/
28#define PACKET_OUTGOING		4		/* Outgoing of any type */
29/* These ones are invisible by user level */
30#define PACKET_LOOPBACK		5		/* MC/BRD frame looped back */
31#define PACKET_FASTROUTE	6		/* Fastrouted frame	*/
32
33/* Packet socket options */
34
35#define PACKET_ADD_MEMBERSHIP		1
36#define PACKET_DROP_MEMBERSHIP		2
37#define PACKET_RECV_OUTPUT		3
38/* Value 4 is still used by obsolete turbo-packet. */
39#define PACKET_RX_RING			5
40#define PACKET_STATISTICS		6
41#define PACKET_COPY_THRESH		7
42#define PACKET_AUXDATA			8
43#define PACKET_ORIGDEV			9
44#define PACKET_VERSION			10
45#define PACKET_HDRLEN			11
46#define PACKET_RESERVE			12
47#define PACKET_TX_RING			13
48#define PACKET_LOSS			14
49#define PACKET_VNET_HDR			15
50#define PACKET_TX_TIMESTAMP		16
51#define PACKET_TIMESTAMP		17
52
53struct tpacket_stats {
54	unsigned int	tp_packets;
55	unsigned int	tp_drops;
56};
57
58struct tpacket_auxdata {
59	__u32		tp_status;
60	__u32		tp_len;
61	__u32		tp_snaplen;
62	__u16		tp_mac;
63	__u16		tp_net;
64	__u16		tp_vlan_tci;
65};
66
67/* Rx ring - header status */
68#define TP_STATUS_KERNEL	0x0
69#define TP_STATUS_USER		0x1
70#define TP_STATUS_COPY		0x2
71#define TP_STATUS_LOSING	0x4
72#define TP_STATUS_CSUMNOTREADY	0x8
73
74/* Tx ring - header status */
75#define TP_STATUS_AVAILABLE	0x0
76#define TP_STATUS_SEND_REQUEST	0x1
77#define TP_STATUS_SENDING	0x2
78#define TP_STATUS_WRONG_FORMAT	0x4
79
80struct tpacket_hdr {
81	unsigned long	tp_status;
82	unsigned int	tp_len;
83	unsigned int	tp_snaplen;
84	unsigned short	tp_mac;
85	unsigned short	tp_net;
86	unsigned int	tp_sec;
87	unsigned int	tp_usec;
88};
89
90#define TPACKET_ALIGNMENT	16
91#define TPACKET_ALIGN(x)	(((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
92#define TPACKET_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
93
94struct tpacket2_hdr {
95	__u32		tp_status;
96	__u32		tp_len;
97	__u32		tp_snaplen;
98	__u16		tp_mac;
99	__u16		tp_net;
100	__u32		tp_sec;
101	__u32		tp_nsec;
102	__u16		tp_vlan_tci;
103};
104
105#define TPACKET2_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
106
107enum tpacket_versions {
108	TPACKET_V1,
109	TPACKET_V2,
110};
111
112/*
113   Frame structure:
114
115   - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
116   - struct tpacket_hdr
117   - pad to TPACKET_ALIGNMENT=16
118   - struct sockaddr_ll
119   - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
120   - Start+tp_mac: [ Optional MAC header ]
121   - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
122   - Pad to align to TPACKET_ALIGNMENT=16
123 */
124
125struct tpacket_req {
126	unsigned int	tp_block_size;	/* Minimal size of contiguous block */
127	unsigned int	tp_block_nr;	/* Number of blocks */
128	unsigned int	tp_frame_size;	/* Size of frame */
129	unsigned int	tp_frame_nr;	/* Total number of frames */
130};
131
132struct packet_mreq {
133	int		mr_ifindex;
134	unsigned short	mr_type;
135	unsigned short	mr_alen;
136	unsigned char	mr_address[8];
137};
138
139#define PACKET_MR_MULTICAST	0
140#define PACKET_MR_PROMISC	1
141#define PACKET_MR_ALLMULTI	2
142#define PACKET_MR_UNICAST	3
143
144#endif
145