File: /usr/include/linux/if_packet.h

1     #ifndef __LINUX_IF_PACKET_H
2     #define __LINUX_IF_PACKET_H
3     
4     struct sockaddr_pkt
5     {
6     	unsigned short spkt_family;
7     	unsigned char spkt_device[14];
8     	unsigned short spkt_protocol;
9     };
10     
11     struct sockaddr_ll
12     {
13     	unsigned short	sll_family;
14     	unsigned short	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     
43     struct tpacket_stats
44     {
45     	unsigned int	tp_packets;
46     	unsigned int	tp_drops;
47     };
48     
49     struct tpacket_hdr
50     {
51     	unsigned long	tp_status;
52     #define TP_STATUS_KERNEL	0
53     #define TP_STATUS_USER		1
54     #define TP_STATUS_COPY		2
55     #define TP_STATUS_LOSING	4
56     #define TP_STATUS_CSUMNOTREADY	8
57     	unsigned int	tp_len;
58     	unsigned int	tp_snaplen;
59     	unsigned short	tp_mac;
60     	unsigned short	tp_net;
61     	unsigned int	tp_sec;
62     	unsigned int	tp_usec;
63     };
64     
65     #define TPACKET_ALIGNMENT	16
66     #define TPACKET_ALIGN(x)	(((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
67     #define TPACKET_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
68     
69     /*
70        Frame structure:
71     
72        - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
73        - struct tpacket_hdr
74        - pad to TPACKET_ALIGNMENT=16
75        - struct sockaddr_ll
76        - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
77        - Start+tp_mac: [ Optional MAC header ]
78        - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
79        - Pad to align to TPACKET_ALIGNMENT=16
80      */
81     
82     struct tpacket_req
83     {
84     	unsigned int	tp_block_size;	/* Minimal size of contiguous block */
85     	unsigned int	tp_block_nr;	/* Number of blocks */
86     	unsigned int	tp_frame_size;	/* Size of frame */
87     	unsigned int	tp_frame_nr;	/* Total number of frames */
88     };
89     
90     struct packet_mreq
91     {
92     	int		mr_ifindex;
93     	unsigned short	mr_type;
94     	unsigned short	mr_alen;
95     	unsigned char	mr_address[8];
96     };
97     
98     #define PACKET_MR_MULTICAST	0
99     #define PACKET_MR_PROMISC	1
100     #define PACKET_MR_ALLMULTI	2
101     
102     #endif
103