Subversion Repositories SvarDOS

Rev

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

Rev Author Line No. Line
207 mateuszvis 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