xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/if_packet.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #ifndef __LINUX_IF_PACKET_H
2*53ee8cc1Swenshuai.xi #define __LINUX_IF_PACKET_H
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi #include <linux/types.h>
5*53ee8cc1Swenshuai.xi 
6*53ee8cc1Swenshuai.xi struct sockaddr_pkt
7*53ee8cc1Swenshuai.xi {
8*53ee8cc1Swenshuai.xi 	unsigned short spkt_family;
9*53ee8cc1Swenshuai.xi 	unsigned char spkt_device[14];
10*53ee8cc1Swenshuai.xi 	__be16 spkt_protocol;
11*53ee8cc1Swenshuai.xi };
12*53ee8cc1Swenshuai.xi 
13*53ee8cc1Swenshuai.xi struct sockaddr_ll
14*53ee8cc1Swenshuai.xi {
15*53ee8cc1Swenshuai.xi 	unsigned short	sll_family;
16*53ee8cc1Swenshuai.xi 	__be16		sll_protocol;
17*53ee8cc1Swenshuai.xi 	int		sll_ifindex;
18*53ee8cc1Swenshuai.xi 	unsigned short	sll_hatype;
19*53ee8cc1Swenshuai.xi 	unsigned char	sll_pkttype;
20*53ee8cc1Swenshuai.xi 	unsigned char	sll_halen;
21*53ee8cc1Swenshuai.xi 	unsigned char	sll_addr[8];
22*53ee8cc1Swenshuai.xi };
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi /* Packet types */
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi #define PACKET_HOST		0		/* To us		*/
27*53ee8cc1Swenshuai.xi #define PACKET_BROADCAST	1		/* To all		*/
28*53ee8cc1Swenshuai.xi #define PACKET_MULTICAST	2		/* To group		*/
29*53ee8cc1Swenshuai.xi #define PACKET_OTHERHOST	3		/* To someone else 	*/
30*53ee8cc1Swenshuai.xi #define PACKET_OUTGOING		4		/* Outgoing of any type */
31*53ee8cc1Swenshuai.xi /* These ones are invisible by user level */
32*53ee8cc1Swenshuai.xi #define PACKET_LOOPBACK		5		/* MC/BRD frame looped back */
33*53ee8cc1Swenshuai.xi #define PACKET_FASTROUTE	6		/* Fastrouted frame	*/
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi /* Packet socket options */
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi #define PACKET_ADD_MEMBERSHIP		1
38*53ee8cc1Swenshuai.xi #define PACKET_DROP_MEMBERSHIP		2
39*53ee8cc1Swenshuai.xi #define PACKET_RECV_OUTPUT		3
40*53ee8cc1Swenshuai.xi /* Value 4 is still used by obsolete turbo-packet. */
41*53ee8cc1Swenshuai.xi #define PACKET_RX_RING			5
42*53ee8cc1Swenshuai.xi #define PACKET_STATISTICS		6
43*53ee8cc1Swenshuai.xi #define PACKET_COPY_THRESH		7
44*53ee8cc1Swenshuai.xi #define PACKET_AUXDATA			8
45*53ee8cc1Swenshuai.xi #define PACKET_ORIGDEV			9
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi struct tpacket_stats
48*53ee8cc1Swenshuai.xi {
49*53ee8cc1Swenshuai.xi 	unsigned int	tp_packets;
50*53ee8cc1Swenshuai.xi 	unsigned int	tp_drops;
51*53ee8cc1Swenshuai.xi };
52*53ee8cc1Swenshuai.xi 
53*53ee8cc1Swenshuai.xi struct tpacket_auxdata
54*53ee8cc1Swenshuai.xi {
55*53ee8cc1Swenshuai.xi 	__u32		tp_status;
56*53ee8cc1Swenshuai.xi 	__u32		tp_len;
57*53ee8cc1Swenshuai.xi 	__u32		tp_snaplen;
58*53ee8cc1Swenshuai.xi 	__u16		tp_mac;
59*53ee8cc1Swenshuai.xi 	__u16		tp_net;
60*53ee8cc1Swenshuai.xi };
61*53ee8cc1Swenshuai.xi 
62*53ee8cc1Swenshuai.xi struct tpacket_hdr
63*53ee8cc1Swenshuai.xi {
64*53ee8cc1Swenshuai.xi 	unsigned long	tp_status;
65*53ee8cc1Swenshuai.xi #define TP_STATUS_KERNEL	0
66*53ee8cc1Swenshuai.xi #define TP_STATUS_USER		1
67*53ee8cc1Swenshuai.xi #define TP_STATUS_COPY		2
68*53ee8cc1Swenshuai.xi #define TP_STATUS_LOSING	4
69*53ee8cc1Swenshuai.xi #define TP_STATUS_CSUMNOTREADY	8
70*53ee8cc1Swenshuai.xi 	unsigned int	tp_len;
71*53ee8cc1Swenshuai.xi 	unsigned int	tp_snaplen;
72*53ee8cc1Swenshuai.xi 	unsigned short	tp_mac;
73*53ee8cc1Swenshuai.xi 	unsigned short	tp_net;
74*53ee8cc1Swenshuai.xi 	unsigned int	tp_sec;
75*53ee8cc1Swenshuai.xi 	unsigned int	tp_usec;
76*53ee8cc1Swenshuai.xi };
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi #define TPACKET_ALIGNMENT	16
79*53ee8cc1Swenshuai.xi #define TPACKET_ALIGN(x)	(((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
80*53ee8cc1Swenshuai.xi #define TPACKET_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi /*
83*53ee8cc1Swenshuai.xi    Frame structure:
84*53ee8cc1Swenshuai.xi 
85*53ee8cc1Swenshuai.xi    - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
86*53ee8cc1Swenshuai.xi    - struct tpacket_hdr
87*53ee8cc1Swenshuai.xi    - pad to TPACKET_ALIGNMENT=16
88*53ee8cc1Swenshuai.xi    - struct sockaddr_ll
89*53ee8cc1Swenshuai.xi    - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
90*53ee8cc1Swenshuai.xi    - Start+tp_mac: [ Optional MAC header ]
91*53ee8cc1Swenshuai.xi    - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
92*53ee8cc1Swenshuai.xi    - Pad to align to TPACKET_ALIGNMENT=16
93*53ee8cc1Swenshuai.xi  */
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi struct tpacket_req
96*53ee8cc1Swenshuai.xi {
97*53ee8cc1Swenshuai.xi 	unsigned int	tp_block_size;	/* Minimal size of contiguous block */
98*53ee8cc1Swenshuai.xi 	unsigned int	tp_block_nr;	/* Number of blocks */
99*53ee8cc1Swenshuai.xi 	unsigned int	tp_frame_size;	/* Size of frame */
100*53ee8cc1Swenshuai.xi 	unsigned int	tp_frame_nr;	/* Total number of frames */
101*53ee8cc1Swenshuai.xi };
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi struct packet_mreq
104*53ee8cc1Swenshuai.xi {
105*53ee8cc1Swenshuai.xi 	int		mr_ifindex;
106*53ee8cc1Swenshuai.xi 	unsigned short	mr_type;
107*53ee8cc1Swenshuai.xi 	unsigned short	mr_alen;
108*53ee8cc1Swenshuai.xi 	unsigned char	mr_address[8];
109*53ee8cc1Swenshuai.xi };
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi #define PACKET_MR_MULTICAST	0
112*53ee8cc1Swenshuai.xi #define PACKET_MR_PROMISC	1
113*53ee8cc1Swenshuai.xi #define PACKET_MR_ALLMULTI	2
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi #endif
116