diff options
Diffstat (limited to 'include/linux/ipv6.h')
| -rw-r--r-- | include/linux/ipv6.h | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 6fcd6a0ade24..3c7dbc6a0a70 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -193,6 +193,11 @@ struct inet6_skb_parm { | |||
| 193 | 193 | ||
| 194 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) | 194 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) |
| 195 | 195 | ||
| 196 | static inline int inet6_iif(const struct sk_buff *skb) | ||
| 197 | { | ||
| 198 | return IP6CB(skb)->iif; | ||
| 199 | } | ||
| 200 | |||
| 196 | struct tcp6_request_sock { | 201 | struct tcp6_request_sock { |
| 197 | struct tcp_request_sock req; | 202 | struct tcp_request_sock req; |
| 198 | struct in6_addr loc_addr; | 203 | struct in6_addr loc_addr; |
| @@ -308,6 +313,36 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to, | |||
| 308 | 313 | ||
| 309 | #define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only) | 314 | #define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only) |
| 310 | #define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk)) | 315 | #define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk)) |
| 316 | |||
| 317 | #include <linux/tcp.h> | ||
| 318 | |||
| 319 | struct tcp6_timewait_sock { | ||
| 320 | struct tcp_timewait_sock tw_v6_sk; | ||
| 321 | struct in6_addr tw_v6_daddr; | ||
| 322 | struct in6_addr tw_v6_rcv_saddr; | ||
| 323 | }; | ||
| 324 | |||
| 325 | static inline struct tcp6_timewait_sock *tcp6_twsk(const struct sock *sk) | ||
| 326 | { | ||
| 327 | return (struct tcp6_timewait_sock *)sk; | ||
| 328 | } | ||
| 329 | |||
| 330 | static inline struct in6_addr *__tcp_v6_rcv_saddr(const struct sock *sk) | ||
| 331 | { | ||
| 332 | return likely(sk->sk_state != TCP_TIME_WAIT) ? | ||
| 333 | &inet6_sk(sk)->rcv_saddr : &tcp6_twsk(sk)->tw_v6_rcv_saddr; | ||
| 334 | } | ||
| 335 | |||
| 336 | static inline struct in6_addr *tcp_v6_rcv_saddr(const struct sock *sk) | ||
| 337 | { | ||
| 338 | return sk->sk_family == AF_INET6 ? __tcp_v6_rcv_saddr(sk) : NULL; | ||
| 339 | } | ||
| 340 | |||
| 341 | static inline int inet_v6_ipv6only(const struct sock *sk) | ||
| 342 | { | ||
| 343 | return likely(sk->sk_state != TCP_TIME_WAIT) ? | ||
| 344 | ipv6_only_sock(sk) : inet_twsk(sk)->tw_ipv6only; | ||
| 345 | } | ||
| 311 | #else | 346 | #else |
| 312 | #define __ipv6_only_sock(sk) 0 | 347 | #define __ipv6_only_sock(sk) 0 |
| 313 | #define ipv6_only_sock(sk) 0 | 348 | #define ipv6_only_sock(sk) 0 |
| @@ -322,8 +357,19 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk) | |||
| 322 | return NULL; | 357 | return NULL; |
| 323 | } | 358 | } |
| 324 | 359 | ||
| 325 | #endif | 360 | #define __tcp_v6_rcv_saddr(__sk) NULL |
| 361 | #define tcp_v6_rcv_saddr(__sk) NULL | ||
| 362 | #define tcp_twsk_ipv6only(__sk) 0 | ||
| 363 | #define inet_v6_ipv6only(__sk) 0 | ||
| 364 | #endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */ | ||
| 326 | 365 | ||
| 327 | #endif | 366 | #define INET6_MATCH(__sk, __saddr, __daddr, __ports, __dif) \ |
| 367 | (((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports)) && \ | ||
| 368 | ((__sk)->sk_family == AF_INET6) && \ | ||
| 369 | ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \ | ||
| 370 | ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \ | ||
| 371 | (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif)))) | ||
| 328 | 372 | ||
| 329 | #endif | 373 | #endif /* __KERNEL__ */ |
| 374 | |||
| 375 | #endif /* _IPV6_H */ | ||
