Home | History | Annotate | Download | only in linux
      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