Blame view

include/linux/ip.h 3.75 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  /*
   * INET		An implementation of the TCP/IP protocol suite for the LINUX
   *		operating system.  INET is implemented using the  BSD Socket
   *		interface as the means of communication with the user level.
   *
   *		Definitions for the IP protocol.
   *
   * Version:	@(#)ip.h	1.0.2	04/28/93
   *
   * Authors:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
   *
   *		This program is free software; you can redistribute it and/or
   *		modify it under the terms of the GNU General Public License
   *		as published by the Free Software Foundation; either version
   *		2 of the License, or (at your option) any later version.
   */
  #ifndef _LINUX_IP_H
  #define _LINUX_IP_H
14c850212   Arnaldo Carvalho de Melo   [INET_SOCK]: Move...
19
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  #include <asm/byteorder.h>
  
  #define IPTOS_TOS_MASK		0x1E
  #define IPTOS_TOS(tos)		((tos)&IPTOS_TOS_MASK)
  #define	IPTOS_LOWDELAY		0x10
  #define	IPTOS_THROUGHPUT	0x08
  #define	IPTOS_RELIABILITY	0x04
  #define	IPTOS_MINCOST		0x02
  
  #define IPTOS_PREC_MASK		0xE0
  #define IPTOS_PREC(tos)		((tos)&IPTOS_PREC_MASK)
  #define IPTOS_PREC_NETCONTROL           0xe0
  #define IPTOS_PREC_INTERNETCONTROL      0xc0
  #define IPTOS_PREC_CRITIC_ECP           0xa0
  #define IPTOS_PREC_FLASHOVERRIDE        0x80
  #define IPTOS_PREC_FLASH                0x60
  #define IPTOS_PREC_IMMEDIATE            0x40
  #define IPTOS_PREC_PRIORITY             0x20
  #define IPTOS_PREC_ROUTINE              0x00
  
  
  /* IP options */
  #define IPOPT_COPY		0x80
  #define IPOPT_CLASS_MASK	0x60
  #define IPOPT_NUMBER_MASK	0x1f
  
  #define	IPOPT_COPIED(o)		((o)&IPOPT_COPY)
  #define	IPOPT_CLASS(o)		((o)&IPOPT_CLASS_MASK)
  #define	IPOPT_NUMBER(o)		((o)&IPOPT_NUMBER_MASK)
  
  #define	IPOPT_CONTROL		0x00
  #define	IPOPT_RESERVED1		0x20
  #define	IPOPT_MEASUREMENT	0x40
  #define	IPOPT_RESERVED2		0x60
  
  #define IPOPT_END	(0 |IPOPT_CONTROL)
  #define IPOPT_NOOP	(1 |IPOPT_CONTROL)
  #define IPOPT_SEC	(2 |IPOPT_CONTROL|IPOPT_COPY)
  #define IPOPT_LSRR	(3 |IPOPT_CONTROL|IPOPT_COPY)
  #define IPOPT_TIMESTAMP	(4 |IPOPT_MEASUREMENT)
11a03f78f   Paul Moore   [NetLabel]: core ...
60
  #define IPOPT_CIPSO	(6 |IPOPT_CONTROL|IPOPT_COPY)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  #define IPOPT_RR	(7 |IPOPT_CONTROL)
  #define IPOPT_SID	(8 |IPOPT_CONTROL|IPOPT_COPY)
  #define IPOPT_SSRR	(9 |IPOPT_CONTROL|IPOPT_COPY)
  #define IPOPT_RA	(20|IPOPT_CONTROL|IPOPT_COPY)
  
  #define IPVERSION	4
  #define MAXTTL		255
  #define IPDEFTTL	64
  
  #define IPOPT_OPTVAL 0
  #define IPOPT_OLEN   1
  #define IPOPT_OFFSET 2
  #define IPOPT_MINOFF 4
  #define MAX_IPOPTLEN 40
  #define IPOPT_NOP IPOPT_NOOP
  #define IPOPT_EOL IPOPT_END
  #define IPOPT_TS  IPOPT_TIMESTAMP
  
  #define	IPOPT_TS_TSONLY		0		/* timestamps only */
  #define	IPOPT_TS_TSANDADDR	1		/* timestamps and addresses */
  #define	IPOPT_TS_PRESPEC	3		/* specified modules only */
0a69452cb   Diego Beltrami   [XFRM]: BEET mode
82
  #define IPV4_BEET_PHMAXLEN 8
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83
84
85
86
87
88
89
90
91
92
93
  struct iphdr {
  #if defined(__LITTLE_ENDIAN_BITFIELD)
  	__u8	ihl:4,
  		version:4;
  #elif defined (__BIG_ENDIAN_BITFIELD)
  	__u8	version:4,
    		ihl:4;
  #else
  #error	"Please fix <asm/byteorder.h>"
  #endif
  	__u8	tos;
76ab608d8   Alexey Dobriyan   [NET]: Endian-ann...
94
95
96
  	__be16	tot_len;
  	__be16	id;
  	__be16	frag_off;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
98
  	__u8	ttl;
  	__u8	protocol;
9981a0e36   Al Viro   [NET]: Annotate c...
99
  	__sum16	check;
76ab608d8   Alexey Dobriyan   [NET]: Endian-ann...
100
101
  	__be32	saddr;
  	__be32	daddr;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
102
103
  	/*The options start here. */
  };
eddc9ec53   Arnaldo Carvalho de Melo   [SK_BUFF]: Introd...
104
105
106
107
108
109
110
  #ifdef __KERNEL__
  #include <linux/skbuff.h>
  
  static inline struct iphdr *ip_hdr(const struct sk_buff *skb)
  {
  	return (struct iphdr *)skb_network_header(skb);
  }
b0061ce49   Arnaldo Carvalho de Melo   [SK_BUFF]: Introd...
111
112
113
  
  static inline struct iphdr *ipip_hdr(const struct sk_buff *skb)
  {
9c70220b7   Arnaldo Carvalho de Melo   [SK_BUFF]: Introd...
114
  	return (struct iphdr *)skb_transport_header(skb);
b0061ce49   Arnaldo Carvalho de Melo   [SK_BUFF]: Introd...
115
  }
eddc9ec53   Arnaldo Carvalho de Melo   [SK_BUFF]: Introd...
116
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
117
118
119
  struct ip_auth_hdr {
  	__u8  nexthdr;
  	__u8  hdrlen;		/* This one is measured in 32 bit units! */
046d03314   Al Viro   [IPV4]: headers e...
120
121
122
  	__be16 reserved;
  	__be32 spi;
  	__be32 seq_no;		/* Sequence number */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
123
124
125
126
  	__u8  auth_data[0];	/* Variable len but >=4. Mind the 64 bit alignment! */
  };
  
  struct ip_esp_hdr {
046d03314   Al Viro   [IPV4]: headers e...
127
128
  	__be32 spi;
  	__be32 seq_no;		/* Sequence number */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
129
130
131
132
133
134
  	__u8  enc_data[0];	/* Variable len but >=8. Mind the 64 bit alignment! */
  };
  
  struct ip_comp_hdr {
  	__u8 nexthdr;
  	__u8 flags;
046d03314   Al Viro   [IPV4]: headers e...
135
  	__be16 cpi;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
136
  };
0a69452cb   Diego Beltrami   [XFRM]: BEET mode
137
138
139
140
141
142
  struct ip_beet_phdr {
  	__u8 nexthdr;
  	__u8 hdrlen;
  	__u8 padlen;
  	__u8 reserved;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
143
  #endif	/* _LINUX_IP_H */