diff options
Diffstat (limited to 'include/linux/ip.h')
-rw-r--r-- | include/linux/ip.h | 131 |
1 files changed, 6 insertions, 125 deletions
diff --git a/include/linux/ip.h b/include/linux/ip.h index 33e8a19a1a0f..4b55cf1df732 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h | |||
@@ -16,6 +16,7 @@ | |||
16 | */ | 16 | */ |
17 | #ifndef _LINUX_IP_H | 17 | #ifndef _LINUX_IP_H |
18 | #define _LINUX_IP_H | 18 | #define _LINUX_IP_H |
19 | #include <linux/types.h> | ||
19 | #include <asm/byteorder.h> | 20 | #include <asm/byteorder.h> |
20 | 21 | ||
21 | #define IPTOS_TOS_MASK 0x1E | 22 | #define IPTOS_TOS_MASK 0x1E |
@@ -78,126 +79,6 @@ | |||
78 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ | 79 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ |
79 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ | 80 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ |
80 | 81 | ||
81 | #ifdef __KERNEL__ | ||
82 | #include <linux/config.h> | ||
83 | #include <linux/types.h> | ||
84 | #include <net/request_sock.h> | ||
85 | #include <net/sock.h> | ||
86 | #include <linux/igmp.h> | ||
87 | #include <net/flow.h> | ||
88 | |||
89 | struct ip_options { | ||
90 | __u32 faddr; /* Saved first hop address */ | ||
91 | unsigned char optlen; | ||
92 | unsigned char srr; | ||
93 | unsigned char rr; | ||
94 | unsigned char ts; | ||
95 | unsigned char is_setbyuser:1, /* Set by setsockopt? */ | ||
96 | is_data:1, /* Options in __data, rather than skb */ | ||
97 | is_strictroute:1, /* Strict source route */ | ||
98 | srr_is_hit:1, /* Packet destination addr was our one */ | ||
99 | is_changed:1, /* IP checksum more not valid */ | ||
100 | rr_needaddr:1, /* Need to record addr of outgoing dev */ | ||
101 | ts_needtime:1, /* Need to record timestamp */ | ||
102 | ts_needaddr:1; /* Need to record addr of outgoing dev */ | ||
103 | unsigned char router_alert; | ||
104 | unsigned char __pad1; | ||
105 | unsigned char __pad2; | ||
106 | unsigned char __data[0]; | ||
107 | }; | ||
108 | |||
109 | #define optlength(opt) (sizeof(struct ip_options) + opt->optlen) | ||
110 | |||
111 | struct inet_request_sock { | ||
112 | struct request_sock req; | ||
113 | u32 loc_addr; | ||
114 | u32 rmt_addr; | ||
115 | u16 rmt_port; | ||
116 | u16 snd_wscale : 4, | ||
117 | rcv_wscale : 4, | ||
118 | tstamp_ok : 1, | ||
119 | sack_ok : 1, | ||
120 | wscale_ok : 1, | ||
121 | ecn_ok : 1, | ||
122 | acked : 1; | ||
123 | struct ip_options *opt; | ||
124 | }; | ||
125 | |||
126 | static inline struct inet_request_sock *inet_rsk(const struct request_sock *sk) | ||
127 | { | ||
128 | return (struct inet_request_sock *)sk; | ||
129 | } | ||
130 | |||
131 | struct ipv6_pinfo; | ||
132 | |||
133 | struct inet_sock { | ||
134 | /* sk and pinet6 has to be the first two members of inet_sock */ | ||
135 | struct sock sk; | ||
136 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
137 | struct ipv6_pinfo *pinet6; | ||
138 | #endif | ||
139 | /* Socket demultiplex comparisons on incoming packets. */ | ||
140 | __u32 daddr; /* Foreign IPv4 addr */ | ||
141 | __u32 rcv_saddr; /* Bound local IPv4 addr */ | ||
142 | __u16 dport; /* Destination port */ | ||
143 | __u16 num; /* Local port */ | ||
144 | __u32 saddr; /* Sending source */ | ||
145 | __s16 uc_ttl; /* Unicast TTL */ | ||
146 | __u16 cmsg_flags; | ||
147 | struct ip_options *opt; | ||
148 | __u16 sport; /* Source port */ | ||
149 | __u16 id; /* ID counter for DF pkts */ | ||
150 | __u8 tos; /* TOS */ | ||
151 | __u8 mc_ttl; /* Multicasting TTL */ | ||
152 | __u8 pmtudisc; | ||
153 | unsigned recverr : 1, | ||
154 | freebind : 1, | ||
155 | hdrincl : 1, | ||
156 | mc_loop : 1; | ||
157 | int mc_index; /* Multicast device index */ | ||
158 | __u32 mc_addr; | ||
159 | struct ip_mc_socklist *mc_list; /* Group array */ | ||
160 | /* | ||
161 | * Following members are used to retain the infomation to build | ||
162 | * an ip header on each ip fragmentation while the socket is corked. | ||
163 | */ | ||
164 | struct { | ||
165 | unsigned int flags; | ||
166 | unsigned int fragsize; | ||
167 | struct ip_options *opt; | ||
168 | struct rtable *rt; | ||
169 | int length; /* Total length of all frames */ | ||
170 | u32 addr; | ||
171 | struct flowi fl; | ||
172 | } cork; | ||
173 | }; | ||
174 | |||
175 | #define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ | ||
176 | #define IPCORK_ALLFRAG 2 /* always fragment (for ipv6 for now) */ | ||
177 | |||
178 | static inline struct inet_sock *inet_sk(const struct sock *sk) | ||
179 | { | ||
180 | return (struct inet_sock *)sk; | ||
181 | } | ||
182 | |||
183 | static inline void __inet_sk_copy_descendant(struct sock *sk_to, | ||
184 | const struct sock *sk_from, | ||
185 | const int ancestor_size) | ||
186 | { | ||
187 | memcpy(inet_sk(sk_to) + 1, inet_sk(sk_from) + 1, | ||
188 | sk_from->sk_prot->obj_size - ancestor_size); | ||
189 | } | ||
190 | #if !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)) | ||
191 | static inline void inet_sk_copy_descendant(struct sock *sk_to, | ||
192 | const struct sock *sk_from) | ||
193 | { | ||
194 | __inet_sk_copy_descendant(sk_to, sk_from, sizeof(struct inet_sock)); | ||
195 | } | ||
196 | #endif | ||
197 | #endif | ||
198 | |||
199 | extern int inet_sk_rebuild_header(struct sock *sk); | ||
200 | |||
201 | struct iphdr { | 82 | struct iphdr { |
202 | #if defined(__LITTLE_ENDIAN_BITFIELD) | 83 | #if defined(__LITTLE_ENDIAN_BITFIELD) |
203 | __u8 ihl:4, | 84 | __u8 ihl:4, |
@@ -209,14 +90,14 @@ struct iphdr { | |||
209 | #error "Please fix <asm/byteorder.h>" | 90 | #error "Please fix <asm/byteorder.h>" |
210 | #endif | 91 | #endif |
211 | __u8 tos; | 92 | __u8 tos; |
212 | __u16 tot_len; | 93 | __be16 tot_len; |
213 | __u16 id; | 94 | __be16 id; |
214 | __u16 frag_off; | 95 | __be16 frag_off; |
215 | __u8 ttl; | 96 | __u8 ttl; |
216 | __u8 protocol; | 97 | __u8 protocol; |
217 | __u16 check; | 98 | __u16 check; |
218 | __u32 saddr; | 99 | __be32 saddr; |
219 | __u32 daddr; | 100 | __be32 daddr; |
220 | /*The options start here. */ | 101 | /*The options start here. */ |
221 | }; | 102 | }; |
222 | 103 | ||