Blame view
include/net/inet_sock.h
6.21 KB
14c850212 [INET_SOCK]: Move... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* * 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 inet_sock * * Authors: Many, reorganised here by * Arnaldo Carvalho de Melo <acme@mandriva.com> * * 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 _INET_SOCK_H #define _INET_SOCK_H |
14c850212 [INET_SOCK]: Move... |
18 |
|
45e3ff827 net: annotate bit... |
19 |
#include <linux/kmemcheck.h> |
14c850212 [INET_SOCK]: Move... |
20 21 |
#include <linux/string.h> #include <linux/types.h> |
b3da2cf37 [INET]: Use jhash... |
22 |
#include <linux/jhash.h> |
fec5e652e rfs: Receive Flow... |
23 |
#include <linux/netdevice.h> |
14c850212 [INET_SOCK]: Move... |
24 25 26 27 |
#include <net/flow.h> #include <net/sock.h> #include <net/request_sock.h> |
0b4419162 netns: introduce ... |
28 |
#include <net/netns/hash.h> |
14c850212 [INET_SOCK]: Move... |
29 30 31 32 |
/** struct ip_options - IP Options * * @faddr - Saved first hop address |
ac8a48106 ipv4: Save nextho... |
33 |
* @nexthop - Saved nexthop address in LSRR and SSRR |
14c850212 [INET_SOCK]: Move... |
34 35 36 37 38 39 40 41 42 |
* @is_data - Options in __data, rather than skb * @is_strictroute - Strict source route * @srr_is_hit - Packet destination addr was our one * @is_changed - IP checksum more not valid * @rr_needaddr - Need to record addr of outgoing dev * @ts_needtime - Need to record timestamp * @ts_needaddr - Need to record addr of outgoing dev */ struct ip_options { |
3ca3c68e7 [IPV4]: struct ip... |
43 |
__be32 faddr; |
ac8a48106 ipv4: Save nextho... |
44 |
__be32 nexthop; |
14c850212 [INET_SOCK]: Move... |
45 46 47 48 |
unsigned char optlen; unsigned char srr; unsigned char rr; unsigned char ts; |
ef722495c [IPV4]: Remove un... |
49 |
unsigned char is_strictroute:1, |
14c850212 [INET_SOCK]: Move... |
50 51 52 53 54 55 |
srr_is_hit:1, is_changed:1, rr_needaddr:1, ts_needtime:1, ts_needaddr:1; unsigned char router_alert; |
11a03f78f [NetLabel]: core ... |
56 |
unsigned char cipso; |
14c850212 [INET_SOCK]: Move... |
57 58 59 |
unsigned char __pad2; unsigned char __data[0]; }; |
f6d8bd051 inet: add RCU pro... |
60 61 62 63 64 65 66 67 68 |
struct ip_options_rcu { struct rcu_head rcu; struct ip_options opt; }; struct ip_options_data { struct ip_options_rcu opt; char data[40]; }; |
14c850212 [INET_SOCK]: Move... |
69 70 71 72 73 |
struct inet_request_sock { struct request_sock req; #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) u16 inet6_rsk_offset; |
14c850212 [INET_SOCK]: Move... |
74 |
#endif |
a3116ac5c tcp: Port redirec... |
75 |
__be16 loc_port; |
adaf345b5 [IPV4]: annotate ... |
76 77 |
__be32 loc_addr; __be32 rmt_addr; |
e11be94bf [IPV4]: struct in... |
78 |
__be16 rmt_port; |
45e3ff827 net: annotate bit... |
79 80 81 |
kmemcheck_bitfield_begin(flags); u16 snd_wscale : 4, rcv_wscale : 4, |
14c850212 [INET_SOCK]: Move... |
82 83 84 85 |
tstamp_ok : 1, sack_ok : 1, wscale_ok : 1, ecn_ok : 1, |
88ef4a5a7 tcp: Handle TCP S... |
86 87 |
acked : 1, no_srccheck: 1; |
45e3ff827 net: annotate bit... |
88 |
kmemcheck_bitfield_end(flags); |
f6d8bd051 inet: add RCU pro... |
89 |
struct ip_options_rcu *opt; |
14c850212 [INET_SOCK]: Move... |
90 91 92 93 94 95 |
}; static inline struct inet_request_sock *inet_rsk(const struct request_sock *sk) { return (struct inet_request_sock *)sk; } |
1470ddf7f inet: Remove expl... |
96 97 |
struct inet_cork { unsigned int flags; |
bdc712b4c inet: Decrease ov... |
98 |
__be32 addr; |
1470ddf7f inet: Remove expl... |
99 |
struct ip_options *opt; |
bdc712b4c inet: Decrease ov... |
100 |
unsigned int fragsize; |
1470ddf7f inet: Remove expl... |
101 102 |
struct dst_entry *dst; int length; /* Total length of all frames */ |
1470ddf7f inet: Remove expl... |
103 104 105 106 |
struct page *page; u32 off; u8 tx_flags; }; |
bdc712b4c inet: Decrease ov... |
107 108 109 110 |
struct inet_cork_full { struct inet_cork base; struct flowi fl; }; |
14c850212 [INET_SOCK]: Move... |
111 112 113 114 115 116 117 118 |
struct ip_mc_socklist; struct ipv6_pinfo; struct rtable; /** struct inet_sock - representation of INET sockets * * @sk - ancestor class * @pinet6 - pointer to IPv6 control block |
c720c7e83 inet: rename some... |
119 120 121 122 123 |
* @inet_daddr - Foreign IPv4 addr * @inet_rcv_saddr - Bound local IPv4 addr * @inet_dport - Destination port * @inet_num - Local port * @inet_saddr - Sending source |
14c850212 [INET_SOCK]: Move... |
124 |
* @uc_ttl - Unicast TTL |
c720c7e83 inet: rename some... |
125 126 |
* @inet_sport - Source port * @inet_id - ID counter for DF pkts |
14c850212 [INET_SOCK]: Move... |
127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
* @tos - TOS * @mc_ttl - Multicasting TTL * @is_icsk - is this an inet_connection_sock? * @mc_index - Multicast device index * @mc_list - Group array * @cork - info to build ip hdr on each ip frag while socket is corked */ struct inet_sock { /* sk and pinet6 has to be the first two members of inet_sock */ struct sock sk; #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) struct ipv6_pinfo *pinet6; #endif /* Socket demultiplex comparisons on incoming packets. */ |
68835aba4 net: optimize INE... |
141 142 |
#define inet_daddr sk.__sk_common.skc_daddr #define inet_rcv_saddr sk.__sk_common.skc_rcv_saddr |
c720c7e83 inet: rename some... |
143 144 145 |
__be16 inet_dport; __u16 inet_num; __be32 inet_saddr; |
14c850212 [INET_SOCK]: Move... |
146 147 |
__s16 uc_ttl; __u16 cmsg_flags; |
c720c7e83 inet: rename some... |
148 149 |
__be16 inet_sport; __u16 inet_id; |
d218d1113 tcp: Generalized ... |
150 |
|
f6d8bd051 inet: add RCU pro... |
151 |
struct ip_options_rcu __rcu *inet_opt; |
14c850212 [INET_SOCK]: Move... |
152 |
__u8 tos; |
d218d1113 tcp: Generalized ... |
153 |
__u8 min_ttl; |
14c850212 [INET_SOCK]: Move... |
154 155 156 157 158 159 |
__u8 mc_ttl; __u8 pmtudisc; __u8 recverr:1, is_icsk:1, freebind:1, hdrincl:1, |
f5715aea4 ipv4: Implement I... |
160 |
mc_loop:1, |
f771bef98 ipv4: New multica... |
161 |
transparent:1, |
7b2ff18ee net - IP_NODEFRAG... |
162 163 |
mc_all:1, nodefrag:1; |
14c850212 [INET_SOCK]: Move... |
164 |
int mc_index; |
011a92610 [IPV4]: annotated... |
165 |
__be32 mc_addr; |
1d7138de8 igmp: RCU convers... |
166 |
struct ip_mc_socklist __rcu *mc_list; |
bdc712b4c inet: Decrease ov... |
167 |
struct inet_cork_full cork; |
14c850212 [INET_SOCK]: Move... |
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
}; #define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ #define IPCORK_ALLFRAG 2 /* always fragment (for ipv6 for now) */ static inline struct inet_sock *inet_sk(const struct sock *sk) { return (struct inet_sock *)sk; } static inline void __inet_sk_copy_descendant(struct sock *sk_to, const struct sock *sk_from, const int ancestor_size) { memcpy(inet_sk(sk_to) + 1, inet_sk(sk_from) + 1, sk_from->sk_prot->obj_size - ancestor_size); } #if !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)) static inline void inet_sk_copy_descendant(struct sock *sk_to, const struct sock *sk_from) { __inet_sk_copy_descendant(sk_to, sk_from, sizeof(struct inet_sock)); } #endif extern int inet_sk_rebuild_header(struct sock *sk); |
b3da2cf37 [INET]: Use jhash... |
194 195 |
extern u32 inet_ehash_secret; extern void build_ehash_secret(void); |
9f26b3add inet: add struct ... |
196 197 |
static inline unsigned int inet_ehashfn(struct net *net, const __be32 laddr, const __u16 lport, |
fb99c848e [IPV4]: annotate ... |
198 |
const __be32 faddr, const __be16 fport) |
14c850212 [INET_SOCK]: Move... |
199 |
{ |
7adc3830f [TCP]: Improve ip... |
200 201 |
return jhash_3words((__force __u32) laddr, (__force __u32) faddr, |
b3da2cf37 [INET]: Use jhash... |
202 |
((__u32) lport) << 16 | (__force __u32)fport, |
0b4419162 netns: introduce ... |
203 |
inet_ehash_secret + net_hash_mix(net)); |
14c850212 [INET_SOCK]: Move... |
204 205 206 207 208 |
} static inline int inet_sk_ehashfn(const struct sock *sk) { const struct inet_sock *inet = inet_sk(sk); |
c720c7e83 inet: rename some... |
209 210 211 212 |
const __be32 laddr = inet->inet_rcv_saddr; const __u16 lport = inet->inet_num; const __be32 faddr = inet->inet_daddr; const __be16 fport = inet->inet_dport; |
9f26b3add inet: add struct ... |
213 |
struct net *net = sock_net(sk); |
14c850212 [INET_SOCK]: Move... |
214 |
|
9f26b3add inet: add struct ... |
215 |
return inet_ehashfn(net, laddr, lport, faddr, fport); |
14c850212 [INET_SOCK]: Move... |
216 |
} |
ce4a7d0d4 inet{6}_request_s... |
217 218 219 |
static inline struct request_sock *inet_reqsk_alloc(struct request_sock_ops *ops) { struct request_sock *req = reqsk_alloc(ops); |
45e3ff827 net: annotate bit... |
220 |
struct inet_request_sock *ireq = inet_rsk(req); |
ce4a7d0d4 inet{6}_request_s... |
221 |
|
45e3ff827 net: annotate bit... |
222 223 224 225 |
if (req != NULL) { kmemcheck_annotate_bitfield(ireq, flags); ireq->opt = NULL; } |
ce4a7d0d4 inet{6}_request_s... |
226 227 228 |
return req; } |
88ef4a5a7 tcp: Handle TCP S... |
229 230 |
static inline __u8 inet_sk_flowi_flags(const struct sock *sk) { |
a4daad6b0 net: Pre-COW metr... |
231 |
__u8 flags = 0; |
47670b767 ipv4: route non-l... |
232 |
if (inet_sk(sk)->transparent || inet_sk(sk)->hdrincl) |
a4daad6b0 net: Pre-COW metr... |
233 234 235 236 |
flags |= FLOWI_FLAG_ANYSRC; if (sk->sk_protocol == IPPROTO_TCP) flags |= FLOWI_FLAG_PRECOW_METRICS; return flags; |
88ef4a5a7 tcp: Handle TCP S... |
237 |
} |
14c850212 [INET_SOCK]: Move... |
238 |
#endif /* _INET_SOCK_H */ |