| .. | .. |
|---|
| 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) |
|---|