.. | .. |
---|
3 | 3 | #define _IPV6_H |
---|
4 | 4 | |
---|
5 | 5 | #include <uapi/linux/ipv6.h> |
---|
6 | | -#include <uapi/linux/icmpv6.h> |
---|
7 | 6 | #include <linux/android_kabi.h> |
---|
8 | 7 | |
---|
9 | 8 | #define ipv6_optlen(p) (((p)->hdrlen+1) << 3) |
---|
.. | .. |
---|
53 | 52 | __s32 use_optimistic; |
---|
54 | 53 | #endif |
---|
55 | 54 | #ifdef CONFIG_IPV6_MROUTE |
---|
56 | | - __s32 mc_forwarding; |
---|
| 55 | + atomic_t mc_forwarding; |
---|
57 | 56 | #endif |
---|
58 | 57 | __s32 disable_ipv6; |
---|
59 | 58 | __s32 drop_unicast_in_l2_multicast; |
---|
.. | .. |
---|
77 | 76 | __u32 addr_gen_mode; |
---|
78 | 77 | __s32 disable_policy; |
---|
79 | 78 | __s32 ndisc_tclass; |
---|
| 79 | + __s32 rpl_seg_enabled; |
---|
80 | 80 | |
---|
81 | 81 | struct ctl_table_header *sysctl_header; |
---|
82 | 82 | |
---|
.. | .. |
---|
109 | 109 | static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb) |
---|
110 | 110 | { |
---|
111 | 111 | return (struct ipv6hdr *)skb_transport_header(skb); |
---|
| 112 | +} |
---|
| 113 | + |
---|
| 114 | +static inline unsigned int ipv6_transport_len(const struct sk_buff *skb) |
---|
| 115 | +{ |
---|
| 116 | + return ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr) - |
---|
| 117 | + skb_network_header_len(skb); |
---|
112 | 118 | } |
---|
113 | 119 | |
---|
114 | 120 | /* |
---|
.. | .. |
---|
177 | 183 | return 0; |
---|
178 | 184 | } |
---|
179 | 185 | |
---|
180 | | -/* can not be used in TCP layer after tcp_v6_fill_cb */ |
---|
181 | | -static inline bool inet6_exact_dif_match(struct net *net, struct sk_buff *skb) |
---|
182 | | -{ |
---|
183 | | -#if defined(CONFIG_NET_L3_MASTER_DEV) |
---|
184 | | - if (!net->ipv4.sysctl_tcp_l3mdev_accept && |
---|
185 | | - skb && ipv6_l3mdev_skb(IP6CB(skb)->flags)) |
---|
186 | | - return true; |
---|
187 | | -#endif |
---|
188 | | - return false; |
---|
189 | | -} |
---|
190 | | - |
---|
191 | 186 | struct tcp6_request_sock { |
---|
192 | 187 | struct tcp_request_sock tcp6rsk_tcp; |
---|
193 | 188 | }; |
---|
.. | .. |
---|
223 | 218 | |
---|
224 | 219 | /* |
---|
225 | 220 | * Packed in 16bits. |
---|
226 | | - * Omit one shift by by putting the signed field at MSB. |
---|
| 221 | + * Omit one shift by putting the signed field at MSB. |
---|
227 | 222 | */ |
---|
228 | 223 | #if defined(__BIG_ENDIAN_BITFIELD) |
---|
229 | 224 | __s16 hop_limit:9; |
---|
.. | .. |
---|
281 | 276 | */ |
---|
282 | 277 | dontfrag:1, |
---|
283 | 278 | autoflowlabel:1, |
---|
284 | | - autoflowlabel_set:1; |
---|
| 279 | + autoflowlabel_set:1, |
---|
| 280 | + mc_all:1, |
---|
| 281 | + recverr_rfc4884:1, |
---|
| 282 | + rtalert_isolate:1; |
---|
285 | 283 | __u8 min_hopcount; |
---|
286 | 284 | __u8 tclass; |
---|
287 | 285 | __be32 rcv_flowinfo; |
---|
.. | .. |
---|
340 | 338 | static inline struct raw6_sock *raw6_sk(const struct sock *sk) |
---|
341 | 339 | { |
---|
342 | 340 | return (struct raw6_sock *)sk; |
---|
343 | | -} |
---|
344 | | - |
---|
345 | | -static inline void inet_sk_copy_descendant(struct sock *sk_to, |
---|
346 | | - const struct sock *sk_from) |
---|
347 | | -{ |
---|
348 | | - int ancestor_size = sizeof(struct inet_sock); |
---|
349 | | - |
---|
350 | | - if (sk_from->sk_family == PF_INET6) |
---|
351 | | - ancestor_size += sizeof(struct ipv6_pinfo); |
---|
352 | | - |
---|
353 | | - __inet_sk_copy_descendant(sk_to, sk_from, ancestor_size); |
---|
354 | 341 | } |
---|
355 | 342 | |
---|
356 | 343 | #define __ipv6_only_sock(sk) (sk->sk_ipv6only) |
---|