1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef _IPV6_H
31da177e4SLinus Torvalds #define _IPV6_H
41da177e4SLinus Torvalds
5607ca46eSDavid Howells #include <uapi/linux/ipv6.h>
61da177e4SLinus Torvalds
71da177e4SLinus Torvalds #define ipv6_optlen(p) (((p)->hdrlen+1) << 3)
81431fb31SPaul Durrant #define ipv6_authlen(p) (((p)->hdrlen+2) << 2)
91da177e4SLinus Torvalds /*
101da177e4SLinus Torvalds * This structure contains configuration options per IPv6 link.
111da177e4SLinus Torvalds */
121da177e4SLinus Torvalds struct ipv6_devconf {
131da177e4SLinus Torvalds __s32 forwarding;
141da177e4SLinus Torvalds __s32 hop_limit;
151da177e4SLinus Torvalds __s32 mtu6;
161da177e4SLinus Torvalds __s32 accept_ra;
171da177e4SLinus Torvalds __s32 accept_redirects;
181da177e4SLinus Torvalds __s32 autoconf;
191da177e4SLinus Torvalds __s32 dad_transmits;
201da177e4SLinus Torvalds __s32 rtr_solicits;
211da177e4SLinus Torvalds __s32 rtr_solicit_interval;
22bd11f074SMaciej Żenczykowski __s32 rtr_solicit_max_interval;
231da177e4SLinus Torvalds __s32 rtr_solicit_delay;
241da177e4SLinus Torvalds __s32 force_mld_version;
25fc4eba58SHannes Frederic Sowa __s32 mldv1_unsolicited_report_interval;
26fc4eba58SHannes Frederic Sowa __s32 mldv2_unsolicited_report_interval;
271da177e4SLinus Torvalds __s32 use_tempaddr;
281da177e4SLinus Torvalds __s32 temp_valid_lft;
291da177e4SLinus Torvalds __s32 temp_prefered_lft;
301da177e4SLinus Torvalds __s32 regen_max_retry;
311da177e4SLinus Torvalds __s32 max_desync_factor;
321da177e4SLinus Torvalds __s32 max_addresses;
3365f5c7c1SYOSHIFUJI Hideaki __s32 accept_ra_defrtr;
346b2e04bcSPraveen Chaudhary __u32 ra_defrtr_metric;
358013d1d7SHangbin Liu __s32 accept_ra_min_hop_limit;
365027d54aSPatrick Rohr __s32 accept_ra_min_lft;
37c4fd30ebSYOSHIFUJI Hideaki __s32 accept_ra_pinfo;
3835103d11SAndy Gospodarek __s32 ignore_routes_with_linkdown;
39930d6ff2SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_ROUTER_PREF
40930d6ff2SYOSHIFUJI Hideaki __s32 accept_ra_rtr_pref;
4152e16356SYOSHIFUJI Hideaki __s32 rtr_probe_interval;
4209c884d4SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_ROUTE_INFO
43bbea124bSJoel Scherpelz __s32 accept_ra_rt_info_min_plen;
4409c884d4SYOSHIFUJI Hideaki __s32 accept_ra_rt_info_max_plen;
4509c884d4SYOSHIFUJI Hideaki #endif
46930d6ff2SYOSHIFUJI Hideaki #endif
47fbea49e1SYOSHIFUJI Hideaki __s32 proxy_ndp;
480bcbc926SYOSHIFUJI Hideaki __s32 accept_source_route;
49d9333196SBen Greear __s32 accept_ra_from_local;
5095c385b4SNeil Horman #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
5195c385b4SNeil Horman __s32 optimistic_dad;
527fd2561eSErik Kline __s32 use_optimistic;
5395c385b4SNeil Horman #endif
547bc570c8SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_MROUTE
55145c7a79SEric Dumazet atomic_t mc_forwarding;
567bc570c8SYOSHIFUJI Hideaki #endif
57778d80beSYOSHIFUJI Hideaki __s32 disable_ipv6;
58abbc3043SJohannes Berg __s32 drop_unicast_in_l2_multicast;
591b34be74SYOSHIFUJI Hideaki __s32 accept_dad;
60f7734fdfSOctavian Purdila __s32 force_tllao;
615cb04436SHannes Frederic Sowa __s32 ndisc_notify;
62b800c3b9SHannes Frederic Sowa __s32 suppress_frag_ndisc;
63c2943f14SHarout Hedeshian __s32 accept_ra_mtu;
647a02bf89SJohannes Berg __s32 drop_unsolicited_na;
653e0b8f52SArun Ajith S __s32 accept_untracked_na;
663d1bec99SHannes Frederic Sowa struct ipv6_stable_secret {
673d1bec99SHannes Frederic Sowa bool initialized;
683d1bec99SHannes Frederic Sowa struct in6_addr secret;
693d1bec99SHannes Frederic Sowa } stable_secret;
703985e8a3SErik Kline __s32 use_oif_addrs_only;
71f1705ec1SDavid Ahern __s32 keep_addr_on_down;
721ababebaSDavid Lebrun __s32 seg6_enabled;
73bf355b8dSDavid Lebrun #ifdef CONFIG_IPV6_SEG6_HMAC
74bf355b8dSDavid Lebrun __s32 seg6_require_hmac;
75bf355b8dSDavid Lebrun #endif
76adc176c5SErik Nordmark __u32 enhanced_dad;
77d35a00b8SFelix Jia __u32 addr_gen_mode;
78df789fe7SDavid Forster __s32 disable_policy;
792210d6b2SMaciej Żenczykowski __s32 ndisc_tclass;
808610c7c6SAlexander Aring __s32 rpl_seg_enabled;
819ee11f0fSJustin Iurman __u32 ioam6_id;
829ee11f0fSJustin Iurman __u32 ioam6_id_wide;
839ee11f0fSJustin Iurman __u8 ioam6_enabled;
8418ac597aSJames Prestwood __u8 ndisc_evict_nocarrier;
85607ea7cdSKonstantin Khlebnikov
86607ea7cdSKonstantin Khlebnikov struct ctl_table_header *sysctl_header;
871da177e4SLinus Torvalds };
8856d417b1SBrian Haley
8956d417b1SBrian Haley struct ipv6_params {
9056d417b1SBrian Haley __s32 disable_ipv6;
9156d417b1SBrian Haley __s32 autoconf;
9256d417b1SBrian Haley };
9356d417b1SBrian Haley extern struct ipv6_params ipv6_defaults;
941da177e4SLinus Torvalds #include <linux/tcp.h>
951da177e4SLinus Torvalds #include <linux/udp.h>
961da177e4SLinus Torvalds
9714c85021SArnaldo Carvalho de Melo #include <net/inet_sock.h>
9814c85021SArnaldo Carvalho de Melo
ipv6_hdr(const struct sk_buff * skb)990660e03fSArnaldo Carvalho de Melo static inline struct ipv6hdr *ipv6_hdr(const struct sk_buff *skb)
1000660e03fSArnaldo Carvalho de Melo {
1010660e03fSArnaldo Carvalho de Melo return (struct ipv6hdr *)skb_network_header(skb);
1020660e03fSArnaldo Carvalho de Melo }
1030660e03fSArnaldo Carvalho de Melo
inner_ipv6_hdr(const struct sk_buff * skb)1046a674e9cSJoseph Gasparakis static inline struct ipv6hdr *inner_ipv6_hdr(const struct sk_buff *skb)
1056a674e9cSJoseph Gasparakis {
1066a674e9cSJoseph Gasparakis return (struct ipv6hdr *)skb_inner_network_header(skb);
1076a674e9cSJoseph Gasparakis }
1086a674e9cSJoseph Gasparakis
ipipv6_hdr(const struct sk_buff * skb)10939b89160SArnaldo Carvalho de Melo static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb)
11039b89160SArnaldo Carvalho de Melo {
1119c70220bSArnaldo Carvalho de Melo return (struct ipv6hdr *)skb_transport_header(skb);
11239b89160SArnaldo Carvalho de Melo }
11339b89160SArnaldo Carvalho de Melo
ipv6_transport_len(const struct sk_buff * skb)114ba5ea614SLinus Lüssing static inline unsigned int ipv6_transport_len(const struct sk_buff *skb)
115ba5ea614SLinus Lüssing {
116ba5ea614SLinus Lüssing return ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr) -
117ba5ea614SLinus Lüssing skb_network_header_len(skb);
118ba5ea614SLinus Lüssing }
119ba5ea614SLinus Lüssing
1201da177e4SLinus Torvalds /*
1211da177e4SLinus Torvalds This structure contains results of exthdrs parsing
1221da177e4SLinus Torvalds as offsets from skb->nh.
1231da177e4SLinus Torvalds */
1241da177e4SLinus Torvalds
1251da177e4SLinus Torvalds struct inet6_skb_parm {
1261da177e4SLinus Torvalds int iif;
127dd3332bfSYOSHIFUJI Hideaki / 吉藤英明 __be16 ra;
1281da177e4SLinus Torvalds __u16 dst0;
1291da177e4SLinus Torvalds __u16 srcrt;
1301da177e4SLinus Torvalds __u16 dst1;
131333fad53SYOSHIFUJI Hideaki __u16 lastopt;
132e7c38157SDavid S. Miller __u16 nhoff;
1333e3850e9SPatrick McHardy __u16 flags;
13459fbb3a6SMasahide NAKAMURA #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
1358dd7368dSDavid S. Miller __u16 dsthao;
1368dd7368dSDavid S. Miller #endif
1374cdd3408SPatrick McHardy __u16 frag_max_size;
138e4129440SAndrew Lunn __u16 srhoff;
1393e3850e9SPatrick McHardy
1403e3850e9SPatrick McHardy #define IP6SKB_XFRM_TRANSFORMED 1
1417bc570c8SYOSHIFUJI Hideaki #define IP6SKB_FORWARDED 2
1429c6eb28aSJan Engelhardt #define IP6SKB_REROUTED 4
143dd3332bfSYOSHIFUJI Hideaki / 吉藤英明 #define IP6SKB_ROUTERALERT 8
144f46078cfSHannes Frederic Sowa #define IP6SKB_FRAGMENTED 16
1458b58a398SFlorian Westphal #define IP6SKB_HOPBYHOP 32
14674b20582SDavid Ahern #define IP6SKB_L3SLAVE 64
147cb891fa6SPaolo Abeni #define IP6SKB_JUMBOGRAM 128
148e4129440SAndrew Lunn #define IP6SKB_SEG6 256
14980e425b6SCoco Li #define IP6SKB_FAKEJUMBO 512
150*8423be89SSriram Yagnaraman #define IP6SKB_MULTIPATH 1024
1511da177e4SLinus Torvalds };
1521da177e4SLinus Torvalds
15374b20582SDavid Ahern #if defined(CONFIG_NET_L3_MASTER_DEV)
ipv6_l3mdev_skb(__u16 flags)154a04a480dSDavid Ahern static inline bool ipv6_l3mdev_skb(__u16 flags)
15574b20582SDavid Ahern {
15674b20582SDavid Ahern return flags & IP6SKB_L3SLAVE;
15774b20582SDavid Ahern }
15874b20582SDavid Ahern #else
ipv6_l3mdev_skb(__u16 flags)159a04a480dSDavid Ahern static inline bool ipv6_l3mdev_skb(__u16 flags)
16074b20582SDavid Ahern {
16174b20582SDavid Ahern return false;
16274b20582SDavid Ahern }
16374b20582SDavid Ahern #endif
16474b20582SDavid Ahern
1651da177e4SLinus Torvalds #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
1664b340ae2SBrian Haley #define IP6CBMTU(skb) ((struct ip6_mtuinfo *)((skb)->cb))
1671da177e4SLinus Torvalds
inet6_iif(const struct sk_buff * skb)168505cbfc5SArnaldo Carvalho de Melo static inline int inet6_iif(const struct sk_buff *skb)
169505cbfc5SArnaldo Carvalho de Melo {
170a04a480dSDavid Ahern bool l3_slave = ipv6_l3mdev_skb(IP6CB(skb)->flags);
17174b20582SDavid Ahern
17274b20582SDavid Ahern return l3_slave ? skb->skb_iif : IP6CB(skb)->iif;
173505cbfc5SArnaldo Carvalho de Melo }
174505cbfc5SArnaldo Carvalho de Melo
inet6_is_jumbogram(const struct sk_buff * skb)175cb891fa6SPaolo Abeni static inline bool inet6_is_jumbogram(const struct sk_buff *skb)
176cb891fa6SPaolo Abeni {
177cb891fa6SPaolo Abeni return !!(IP6CB(skb)->flags & IP6SKB_JUMBOGRAM);
178cb891fa6SPaolo Abeni }
179cb891fa6SPaolo Abeni
180a04a480dSDavid Ahern /* can not be used in TCP layer after tcp_v6_fill_cb */
inet6_sdif(const struct sk_buff * skb)1811801b570SDavid Ahern static inline int inet6_sdif(const struct sk_buff *skb)
1821801b570SDavid Ahern {
1831801b570SDavid Ahern #if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
1841801b570SDavid Ahern if (skb && ipv6_l3mdev_skb(IP6CB(skb)->flags))
1851801b570SDavid Ahern return IP6CB(skb)->iif;
1861801b570SDavid Ahern #endif
1871801b570SDavid Ahern return 0;
1881801b570SDavid Ahern }
1891801b570SDavid Ahern
190ca304b61SArnaldo Carvalho de Melo struct tcp6_request_sock {
191ca304b61SArnaldo Carvalho de Melo struct tcp_request_sock tcp6rsk_tcp;
192ca304b61SArnaldo Carvalho de Melo };
1932e6599cbSArnaldo Carvalho de Melo
19420283d84SHerbert Xu struct ipv6_mc_socklist;
19520283d84SHerbert Xu struct ipv6_ac_socklist;
19620283d84SHerbert Xu struct ipv6_fl_socklist;
19720283d84SHerbert Xu
198366e41d9SVlad Yasevich struct inet6_cork {
199366e41d9SVlad Yasevich struct ipv6_txoptions *opt;
200366e41d9SVlad Yasevich u8 hop_limit;
201366e41d9SVlad Yasevich u8 tclass;
202366e41d9SVlad Yasevich };
203366e41d9SVlad Yasevich
204f5f80e32SEric Dumazet /* struct ipv6_pinfo - ipv6 private area */
2051da177e4SLinus Torvalds struct ipv6_pinfo {
2061da177e4SLinus Torvalds struct in6_addr saddr;
207b24a2516SYang Hongyang struct in6_pktinfo sticky_pktinfo;
208d3818c92SEric Dumazet const struct in6_addr *daddr_cache;
2098e1ef0a9SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_SUBTREES
210d3818c92SEric Dumazet const struct in6_addr *saddr_cache;
2118e1ef0a9SYOSHIFUJI Hideaki #endif
2121da177e4SLinus Torvalds
21390bcaf7bSAl Viro __be32 flow_label;
2141da177e4SLinus Torvalds __u32 frag_size;
2151d5d236dSYOSHIFUJI Hideaki
2161d5d236dSYOSHIFUJI Hideaki /*
2171d5d236dSYOSHIFUJI Hideaki * Packed in 16bits.
21859632b22SRandy Dunlap * Omit one shift by putting the signed field at MSB.
2191d5d236dSYOSHIFUJI Hideaki */
2201d5d236dSYOSHIFUJI Hideaki #if defined(__BIG_ENDIAN_BITFIELD)
2211d5d236dSYOSHIFUJI Hideaki __s16 hop_limit:9;
2221d5d236dSYOSHIFUJI Hideaki __u16 __unused_1:7;
2231d5d236dSYOSHIFUJI Hideaki #else
2241d5d236dSYOSHIFUJI Hideaki __u16 __unused_1:7;
2251d5d236dSYOSHIFUJI Hideaki __s16 hop_limit:9;
2261d5d236dSYOSHIFUJI Hideaki #endif
2271d5d236dSYOSHIFUJI Hideaki
2281d5d236dSYOSHIFUJI Hideaki #if defined(__BIG_ENDIAN_BITFIELD)
2291d5d236dSYOSHIFUJI Hideaki /* Packed in 16bits. */
2301d5d236dSYOSHIFUJI Hideaki __s16 mcast_hops:9;
2311d5d236dSYOSHIFUJI Hideaki __u16 __unused_2:6,
2321d5d236dSYOSHIFUJI Hideaki mc_loop:1;
2331d5d236dSYOSHIFUJI Hideaki #else
2341d5d236dSYOSHIFUJI Hideaki __u16 mc_loop:1,
2351d5d236dSYOSHIFUJI Hideaki __unused_2:6;
2361d5d236dSYOSHIFUJI Hideaki __s16 mcast_hops:9;
2371d5d236dSYOSHIFUJI Hideaki #endif
238c4062dfcSErich E. Hoover int ucast_oif;
2391da177e4SLinus Torvalds int mcast_oif;
2401da177e4SLinus Torvalds
2411da177e4SLinus Torvalds /* pktoption flags */
2421da177e4SLinus Torvalds union {
2431da177e4SLinus Torvalds struct {
2444c752098SYOSHIFUJI Hideaki __u16 srcrt:1,
2454c752098SYOSHIFUJI Hideaki osrcrt:1,
2461da177e4SLinus Torvalds rxinfo:1,
247333fad53SYOSHIFUJI Hideaki rxoinfo:1,
2481da177e4SLinus Torvalds rxhlim:1,
249333fad53SYOSHIFUJI Hideaki rxohlim:1,
2501da177e4SLinus Torvalds hopopts:1,
251333fad53SYOSHIFUJI Hideaki ohopopts:1,
2521da177e4SLinus Torvalds dstopts:1,
253333fad53SYOSHIFUJI Hideaki odstopts:1,
25441a1f8eaSYOSHIFUJI Hideaki rxflow:1,
255793b1473SBrian Haley rxtclass:1,
2566c468622SBalazs Scheidler rxpmtu:1,
2570cc0aa61SWillem de Bruijn rxorigdstaddr:1,
2580cc0aa61SWillem de Bruijn recvfragsize:1;
2590cc0aa61SWillem de Bruijn /* 1 bits hole */
2601da177e4SLinus Torvalds } bits;
261333fad53SYOSHIFUJI Hideaki __u16 all;
2621da177e4SLinus Torvalds } rxopt;
2631da177e4SLinus Torvalds
2641da177e4SLinus Torvalds /* sockopt flags */
265793b1473SBrian Haley __u16 recverr:1,
2661da177e4SLinus Torvalds sndflow:1,
267df3687ffSFlorent Fourcot repflow:1,
26893b36cf3SHannes Frederic Sowa pmtudisc:3,
2699fe516baSEric Dumazet padding:1, /* 1 bit hole */
270793b1473SBrian Haley srcprefs:3, /* 001: prefer temporary address
2717cbca67cSYOSHIFUJI Hideaki * 010: prefer public address
2727cbca67cSYOSHIFUJI Hideaki * 100: prefer care-of address
2737cbca67cSYOSHIFUJI Hideaki */
274cb1ce2efSTom Herbert dontfrag:1,
275513674b5SShaohua Li autoflowlabel:1,
27615033f04SAndre Naujoks autoflowlabel_set:1,
2779036b2feSFrancesco Ruggeri mc_all:1,
27801370434SWillem de Bruijn recverr_rfc4884:1,
2799036b2feSFrancesco Ruggeri rtalert_isolate:1;
280e802af9cSStephen Hemminger __u8 min_hopcount;
28141a1f8eaSYOSHIFUJI Hideaki __u8 tclass;
2821397ed35SFlorent Fourcot __be32 rcv_flowinfo;
2831da177e4SLinus Torvalds
2841da177e4SLinus Torvalds __u32 dst_cookie;
2851da177e4SLinus Torvalds
286456b61bcSEric Dumazet struct ipv6_mc_socklist __rcu *ipv6_mc_list;
2871da177e4SLinus Torvalds struct ipv6_ac_socklist *ipv6_ac_list;
28818367681SYOSHIFUJI Hideaki / 吉藤英明 struct ipv6_fl_socklist __rcu *ipv6_fl_list;
2891da177e4SLinus Torvalds
29045f6fad8SEric Dumazet struct ipv6_txoptions __rcu *opt;
2911da177e4SLinus Torvalds struct sk_buff *pktoptions;
2924b340ae2SBrian Haley struct sk_buff *rxpmtu;
293366e41d9SVlad Yasevich struct inet6_cork cork;
2941da177e4SLinus Torvalds };
2951da177e4SLinus Torvalds
2961da177e4SLinus Torvalds /* WARNING: don't change the layout of the members in {raw,udp,tcp}6_sock! */
2971da177e4SLinus Torvalds struct raw6_sock {
2981da177e4SLinus Torvalds /* inet_sock has to be the first member of raw6_sock */
2991da177e4SLinus Torvalds struct inet_sock inet;
3001da177e4SLinus Torvalds __u32 checksum; /* perform checksum */
3011da177e4SLinus Torvalds __u32 offset; /* checksum offset */
3021da177e4SLinus Torvalds struct icmp6_filter filter;
303d1db275dSPatrick McHardy __u32 ip6mr_table;
304f5f80e32SEric Dumazet
3051da177e4SLinus Torvalds struct ipv6_pinfo inet6;
3061da177e4SLinus Torvalds };
3071da177e4SLinus Torvalds
3081da177e4SLinus Torvalds struct udp6_sock {
3091da177e4SLinus Torvalds struct udp_sock udp;
310f5f80e32SEric Dumazet
3111da177e4SLinus Torvalds struct ipv6_pinfo inet6;
3121da177e4SLinus Torvalds };
3131da177e4SLinus Torvalds
3141da177e4SLinus Torvalds struct tcp6_sock {
3151da177e4SLinus Torvalds struct tcp_sock tcp;
316f5f80e32SEric Dumazet
3171da177e4SLinus Torvalds struct ipv6_pinfo inet6;
3181da177e4SLinus Torvalds };
3191da177e4SLinus Torvalds
320b9750ce1SArnaldo Carvalho de Melo extern int inet6_sk_rebuild_header(struct sock *sk);
321b9750ce1SArnaldo Carvalho de Melo
32248ee3569SDavid S. Miller struct tcp6_timewait_sock {
32348ee3569SDavid S. Miller struct tcp_timewait_sock tcp6tw_tcp;
32448ee3569SDavid S. Miller };
32548ee3569SDavid S. Miller
326dfd56b8bSEric Dumazet #if IS_ENABLED(CONFIG_IPV6)
327e4348637SDavid Ahern bool ipv6_mod_enabled(void);
328e4348637SDavid Ahern
inet6_sk(const struct sock * __sk)3291da177e4SLinus Torvalds static inline struct ipv6_pinfo *inet6_sk(const struct sock *__sk)
3301da177e4SLinus Torvalds {
331e7eadb4dSEric Dumazet return sk_fullsock(__sk) ? inet_sk(__sk)->pinet6 : NULL;
3321da177e4SLinus Torvalds }
3331da177e4SLinus Torvalds
33447fcae28SEric Dumazet #define raw6_sk(ptr) container_of_const(ptr, struct raw6_sock, inet.sk)
3351da177e4SLinus Torvalds
33689e9c728SKuniyuki Iwashima #define ipv6_only_sock(sk) (sk->sk_ipv6only)
3374b261c75SHannes Frederic Sowa #define ipv6_sk_rxinfo(sk) ((sk)->sk_family == PF_INET6 && \
3384b261c75SHannes Frederic Sowa inet6_sk(sk)->rxopt.bits.rxinfo)
3398feaf0c0SArnaldo Carvalho de Melo
inet6_rcv_saddr(const struct sock * sk)340efe4208fSEric Dumazet static inline const struct in6_addr *inet6_rcv_saddr(const struct sock *sk)
3418feaf0c0SArnaldo Carvalho de Melo {
342efe4208fSEric Dumazet if (sk->sk_family == AF_INET6)
343efe4208fSEric Dumazet return &sk->sk_v6_rcv_saddr;
344efe4208fSEric Dumazet return NULL;
3458feaf0c0SArnaldo Carvalho de Melo }
3468feaf0c0SArnaldo Carvalho de Melo
inet_v6_ipv6only(const struct sock * sk)347463c84b9SArnaldo Carvalho de Melo static inline int inet_v6_ipv6only(const struct sock *sk)
3488feaf0c0SArnaldo Carvalho de Melo {
3499fe516baSEric Dumazet /* ipv6only field is at same position for timewait and other sockets */
3509fe516baSEric Dumazet return ipv6_only_sock(sk);
3518feaf0c0SArnaldo Carvalho de Melo }
3521da177e4SLinus Torvalds #else
3531da177e4SLinus Torvalds #define ipv6_only_sock(sk) 0
3544b261c75SHannes Frederic Sowa #define ipv6_sk_rxinfo(sk) 0
3551da177e4SLinus Torvalds
ipv6_mod_enabled(void)356e4348637SDavid Ahern static inline bool ipv6_mod_enabled(void)
357e4348637SDavid Ahern {
358e4348637SDavid Ahern return false;
359e4348637SDavid Ahern }
360e4348637SDavid Ahern
inet6_sk(const struct sock * __sk)3611da177e4SLinus Torvalds static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
3621da177e4SLinus Torvalds {
3631da177e4SLinus Torvalds return NULL;
3641da177e4SLinus Torvalds }
3651da177e4SLinus Torvalds
raw6_sk(const struct sock * sk)3661da177e4SLinus Torvalds static inline struct raw6_sock *raw6_sk(const struct sock *sk)
3671da177e4SLinus Torvalds {
3681da177e4SLinus Torvalds return NULL;
3691da177e4SLinus Torvalds }
3701da177e4SLinus Torvalds
3710fa1a53eSArnaldo Carvalho de Melo #define inet6_rcv_saddr(__sk) NULL
372463c84b9SArnaldo Carvalho de Melo #define inet_v6_ipv6only(__sk) 0
373dfd56b8bSEric Dumazet #endif /* IS_ENABLED(CONFIG_IPV6) */
3748feaf0c0SArnaldo Carvalho de Melo #endif /* _IPV6_H */
375