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