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