aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ipv6.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/ipv6.h')
-rw-r--r--include/linux/ipv6.h76
1 files changed, 9 insertions, 67 deletions
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 28ea38439313..5d89d1b808a6 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -21,13 +21,11 @@ struct ipv6_devconf {
21 __s32 force_mld_version; 21 __s32 force_mld_version;
22 __s32 mldv1_unsolicited_report_interval; 22 __s32 mldv1_unsolicited_report_interval;
23 __s32 mldv2_unsolicited_report_interval; 23 __s32 mldv2_unsolicited_report_interval;
24#ifdef CONFIG_IPV6_PRIVACY
25 __s32 use_tempaddr; 24 __s32 use_tempaddr;
26 __s32 temp_valid_lft; 25 __s32 temp_valid_lft;
27 __s32 temp_prefered_lft; 26 __s32 temp_prefered_lft;
28 __s32 regen_max_retry; 27 __s32 regen_max_retry;
29 __s32 max_desync_factor; 28 __s32 max_desync_factor;
30#endif
31 __s32 max_addresses; 29 __s32 max_addresses;
32 __s32 accept_ra_defrtr; 30 __s32 accept_ra_defrtr;
33 __s32 accept_ra_pinfo; 31 __s32 accept_ra_pinfo;
@@ -115,16 +113,8 @@ static inline int inet6_iif(const struct sk_buff *skb)
115 return IP6CB(skb)->iif; 113 return IP6CB(skb)->iif;
116} 114}
117 115
118struct inet6_request_sock {
119 struct in6_addr loc_addr;
120 struct in6_addr rmt_addr;
121 struct sk_buff *pktopts;
122 int iif;
123};
124
125struct tcp6_request_sock { 116struct tcp6_request_sock {
126 struct tcp_request_sock tcp6rsk_tcp; 117 struct tcp_request_sock tcp6rsk_tcp;
127 struct inet6_request_sock tcp6rsk_inet6;
128}; 118};
129 119
130struct ipv6_mc_socklist; 120struct ipv6_mc_socklist;
@@ -141,8 +131,6 @@ struct ipv6_fl_socklist;
141 */ 131 */
142struct ipv6_pinfo { 132struct ipv6_pinfo {
143 struct in6_addr saddr; 133 struct in6_addr saddr;
144 struct in6_addr rcv_saddr;
145 struct in6_addr daddr;
146 struct in6_pktinfo sticky_pktinfo; 134 struct in6_pktinfo sticky_pktinfo;
147 const struct in6_addr *daddr_cache; 135 const struct in6_addr *daddr_cache;
148#ifdef CONFIG_IPV6_SUBTREES 136#ifdef CONFIG_IPV6_SUBTREES
@@ -256,48 +244,22 @@ struct tcp6_sock {
256 244
257extern int inet6_sk_rebuild_header(struct sock *sk); 245extern int inet6_sk_rebuild_header(struct sock *sk);
258 246
259struct inet6_timewait_sock {
260 struct in6_addr tw_v6_daddr;
261 struct in6_addr tw_v6_rcv_saddr;
262};
263
264struct tcp6_timewait_sock { 247struct tcp6_timewait_sock {
265 struct tcp_timewait_sock tcp6tw_tcp; 248 struct tcp_timewait_sock tcp6tw_tcp;
266 struct inet6_timewait_sock tcp6tw_inet6;
267}; 249};
268 250
269static inline struct inet6_timewait_sock *inet6_twsk(const struct sock *sk)
270{
271 return (struct inet6_timewait_sock *)(((u8 *)sk) +
272 inet_twsk(sk)->tw_ipv6_offset);
273}
274
275#if IS_ENABLED(CONFIG_IPV6) 251#if IS_ENABLED(CONFIG_IPV6)
276static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk) 252static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
277{ 253{
278 return inet_sk(__sk)->pinet6; 254 return inet_sk(__sk)->pinet6;
279} 255}
280 256
281static inline struct inet6_request_sock *
282 inet6_rsk(const struct request_sock *rsk)
283{
284 return (struct inet6_request_sock *)(((u8 *)rsk) +
285 inet_rsk(rsk)->inet6_rsk_offset);
286}
287
288static inline u32 inet6_rsk_offset(struct request_sock *rsk)
289{
290 return rsk->rsk_ops->obj_size - sizeof(struct inet6_request_sock);
291}
292
293static inline struct request_sock *inet6_reqsk_alloc(struct request_sock_ops *ops) 257static inline struct request_sock *inet6_reqsk_alloc(struct request_sock_ops *ops)
294{ 258{
295 struct request_sock *req = reqsk_alloc(ops); 259 struct request_sock *req = reqsk_alloc(ops);
296 260
297 if (req != NULL) { 261 if (req)
298 inet_rsk(req)->inet6_rsk_offset = inet6_rsk_offset(req); 262 inet_rsk(req)->pktopts = NULL;
299 inet6_rsk(req)->pktopts = NULL;
300 }
301 263
302 return req; 264 return req;
303} 265}
@@ -321,21 +283,11 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to,
321#define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only) 283#define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only)
322#define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk)) 284#define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk))
323 285
324static inline u16 inet6_tw_offset(const struct proto *prot) 286static inline const struct in6_addr *inet6_rcv_saddr(const struct sock *sk)
325{ 287{
326 return prot->twsk_prot->twsk_obj_size - 288 if (sk->sk_family == AF_INET6)
327 sizeof(struct inet6_timewait_sock); 289 return &sk->sk_v6_rcv_saddr;
328} 290 return NULL;
329
330static inline struct in6_addr *__inet6_rcv_saddr(const struct sock *sk)
331{
332 return likely(sk->sk_state != TCP_TIME_WAIT) ?
333 &inet6_sk(sk)->rcv_saddr : &inet6_twsk(sk)->tw_v6_rcv_saddr;
334}
335
336static inline struct in6_addr *inet6_rcv_saddr(const struct sock *sk)
337{
338 return sk->sk_family == AF_INET6 ? __inet6_rcv_saddr(sk) : NULL;
339} 291}
340 292
341static inline int inet_v6_ipv6only(const struct sock *sk) 293static inline int inet_v6_ipv6only(const struct sock *sk)
@@ -363,28 +315,18 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk)
363 return NULL; 315 return NULL;
364} 316}
365 317
366#define __inet6_rcv_saddr(__sk) NULL
367#define inet6_rcv_saddr(__sk) NULL 318#define inet6_rcv_saddr(__sk) NULL
368#define tcp_twsk_ipv6only(__sk) 0 319#define tcp_twsk_ipv6only(__sk) 0
369#define inet_v6_ipv6only(__sk) 0 320#define inet_v6_ipv6only(__sk) 0
370#endif /* IS_ENABLED(CONFIG_IPV6) */ 321#endif /* IS_ENABLED(CONFIG_IPV6) */
371 322
372#define INET6_MATCH(__sk, __net, __saddr, __daddr, __ports, __dif) \ 323#define INET6_MATCH(__sk, __net, __saddr, __daddr, __ports, __dif) \
373 ((inet_sk(__sk)->inet_portpair == (__ports)) && \ 324 (((__sk)->sk_portpair == (__ports)) && \
374 ((__sk)->sk_family == AF_INET6) && \ 325 ((__sk)->sk_family == AF_INET6) && \
375 ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \ 326 ipv6_addr_equal(&(__sk)->sk_v6_daddr, (__saddr)) && \
376 ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \ 327 ipv6_addr_equal(&(__sk)->sk_v6_rcv_saddr, (__daddr)) && \
377 (!(__sk)->sk_bound_dev_if || \ 328 (!(__sk)->sk_bound_dev_if || \
378 ((__sk)->sk_bound_dev_if == (__dif))) && \ 329 ((__sk)->sk_bound_dev_if == (__dif))) && \
379 net_eq(sock_net(__sk), (__net))) 330 net_eq(sock_net(__sk), (__net)))
380 331
381#define INET6_TW_MATCH(__sk, __net, __saddr, __daddr, __ports, __dif) \
382 ((inet_twsk(__sk)->tw_portpair == (__ports)) && \
383 ((__sk)->sk_family == AF_INET6) && \
384 ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_daddr, (__saddr)) && \
385 ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_rcv_saddr, (__daddr)) && \
386 (!(__sk)->sk_bound_dev_if || \
387 ((__sk)->sk_bound_dev_if == (__dif))) && \
388 net_eq(sock_net(__sk), (__net)))
389
390#endif /* _IPV6_H */ 332#endif /* _IPV6_H */