Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 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