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>
6096361b1SEric Dumazet #include <linux/cache.h>
71da177e4SLinus Torvalds
81da177e4SLinus Torvalds #define ipv6_optlen(p) (((p)->hdrlen+1) << 3)
91431fb31SPaul Durrant #define ipv6_authlen(p) (((p)->hdrlen+2) << 2)
101da177e4SLinus Torvalds /*
111da177e4SLinus Torvalds * This structure contains configuration options per IPv6 link.
121da177e4SLinus Torvalds */
131da177e4SLinus Torvalds struct ipv6_devconf {
14096361b1SEric Dumazet /* RX & TX fastpath fields. */
15096361b1SEric Dumazet __cacheline_group_begin(ipv6_devconf_read_txrx);
16096361b1SEric Dumazet __s32 disable_ipv6;
171da177e4SLinus Torvalds __s32 hop_limit;
181da177e4SLinus Torvalds __s32 mtu6;
19096361b1SEric Dumazet __s32 forwarding;
20096361b1SEric Dumazet __s32 disable_policy;
21096361b1SEric Dumazet __s32 proxy_ndp;
22096361b1SEric Dumazet __cacheline_group_end(ipv6_devconf_read_txrx);
23096361b1SEric Dumazet
241da177e4SLinus Torvalds __s32 accept_ra;
251da177e4SLinus Torvalds __s32 accept_redirects;
261da177e4SLinus Torvalds __s32 autoconf;
271da177e4SLinus Torvalds __s32 dad_transmits;
281da177e4SLinus Torvalds __s32 rtr_solicits;
291da177e4SLinus Torvalds __s32 rtr_solicit_interval;
30bd11f074SMaciej Żenczykowski __s32 rtr_solicit_max_interval;
311da177e4SLinus Torvalds __s32 rtr_solicit_delay;
321da177e4SLinus Torvalds __s32 force_mld_version;
33fc4eba58SHannes Frederic Sowa __s32 mldv1_unsolicited_report_interval;
34fc4eba58SHannes Frederic Sowa __s32 mldv2_unsolicited_report_interval;
351da177e4SLinus Torvalds __s32 use_tempaddr;
361da177e4SLinus Torvalds __s32 temp_valid_lft;
371da177e4SLinus Torvalds __s32 temp_prefered_lft;
38a5fcea2dSAlex Henrie __s32 regen_min_advance;
391da177e4SLinus Torvalds __s32 regen_max_retry;
401da177e4SLinus Torvalds __s32 max_desync_factor;
411da177e4SLinus Torvalds __s32 max_addresses;
4265f5c7c1SYOSHIFUJI Hideaki __s32 accept_ra_defrtr;
436b2e04bcSPraveen Chaudhary __u32 ra_defrtr_metric;
448013d1d7SHangbin Liu __s32 accept_ra_min_hop_limit;
455027d54aSPatrick Rohr __s32 accept_ra_min_lft;
46c4fd30ebSYOSHIFUJI Hideaki __s32 accept_ra_pinfo;
4735103d11SAndy Gospodarek __s32 ignore_routes_with_linkdown;
48930d6ff2SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_ROUTER_PREF
49930d6ff2SYOSHIFUJI Hideaki __s32 accept_ra_rtr_pref;
5052e16356SYOSHIFUJI Hideaki __s32 rtr_probe_interval;
5109c884d4SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_ROUTE_INFO
52bbea124bSJoel Scherpelz __s32 accept_ra_rt_info_min_plen;
5309c884d4SYOSHIFUJI Hideaki __s32 accept_ra_rt_info_max_plen;
5409c884d4SYOSHIFUJI Hideaki #endif
55930d6ff2SYOSHIFUJI Hideaki #endif
560bcbc926SYOSHIFUJI Hideaki __s32 accept_source_route;
57d9333196SBen Greear __s32 accept_ra_from_local;
5895c385b4SNeil Horman #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
5995c385b4SNeil Horman __s32 optimistic_dad;
607fd2561eSErik Kline __s32 use_optimistic;
6195c385b4SNeil Horman #endif
627bc570c8SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_MROUTE
63145c7a79SEric Dumazet atomic_t mc_forwarding;
647bc570c8SYOSHIFUJI Hideaki #endif
65abbc3043SJohannes Berg __s32 drop_unicast_in_l2_multicast;
661b34be74SYOSHIFUJI Hideaki __s32 accept_dad;
67f7734fdfSOctavian Purdila __s32 force_tllao;
685cb04436SHannes Frederic Sowa __s32 ndisc_notify;
69b800c3b9SHannes Frederic Sowa __s32 suppress_frag_ndisc;
70c2943f14SHarout Hedeshian __s32 accept_ra_mtu;
717a02bf89SJohannes Berg __s32 drop_unsolicited_na;
723e0b8f52SArun Ajith S __s32 accept_untracked_na;
733d1bec99SHannes Frederic Sowa struct ipv6_stable_secret {
743d1bec99SHannes Frederic Sowa bool initialized;
753d1bec99SHannes Frederic Sowa struct in6_addr secret;
763d1bec99SHannes Frederic Sowa } stable_secret;
773985e8a3SErik Kline __s32 use_oif_addrs_only;
78f1705ec1SDavid Ahern __s32 keep_addr_on_down;
791ababebaSDavid Lebrun __s32 seg6_enabled;
80bf355b8dSDavid Lebrun #ifdef CONFIG_IPV6_SEG6_HMAC
81bf355b8dSDavid Lebrun __s32 seg6_require_hmac;
82bf355b8dSDavid Lebrun #endif
83adc176c5SErik Nordmark __u32 enhanced_dad;
84d35a00b8SFelix Jia __u32 addr_gen_mode;
852210d6b2SMaciej Żenczykowski __s32 ndisc_tclass;
868610c7c6SAlexander Aring __s32 rpl_seg_enabled;
879ee11f0fSJustin Iurman __u32 ioam6_id;
889ee11f0fSJustin Iurman __u32 ioam6_id_wide;
899ee11f0fSJustin Iurman __u8 ioam6_enabled;
9018ac597aSJames Prestwood __u8 ndisc_evict_nocarrier;
91473267a4SPatrick Rohr __u8 ra_honor_pio_life;
92990c3049SPatrick Rohr __u8 ra_honor_pio_pflag;
93607ea7cdSKonstantin Khlebnikov
94607ea7cdSKonstantin Khlebnikov struct ctl_table_header *sysctl_header;
951da177e4SLinus Torvalds };
9656d417b1SBrian Haley
9756d417b1SBrian Haley struct ipv6_params {
9856d417b1SBrian Haley __s32 disable_ipv6;
9956d417b1SBrian Haley __s32 autoconf;
10056d417b1SBrian Haley };
10156d417b1SBrian Haley extern struct ipv6_params ipv6_defaults;
1021da177e4SLinus Torvalds #include <linux/tcp.h>
1031da177e4SLinus Torvalds #include <linux/udp.h>
1041da177e4SLinus Torvalds
10514c85021SArnaldo Carvalho de Melo #include <net/inet_sock.h>
10614c85021SArnaldo Carvalho de Melo
ipv6_hdr(const struct sk_buff * skb)1070660e03fSArnaldo Carvalho de Melo static inline struct ipv6hdr *ipv6_hdr(const struct sk_buff *skb)
1080660e03fSArnaldo Carvalho de Melo {
1090660e03fSArnaldo Carvalho de Melo return (struct ipv6hdr *)skb_network_header(skb);
1100660e03fSArnaldo Carvalho de Melo }
1110660e03fSArnaldo Carvalho de Melo
inner_ipv6_hdr(const struct sk_buff * skb)1126a674e9cSJoseph Gasparakis static inline struct ipv6hdr *inner_ipv6_hdr(const struct sk_buff *skb)
1136a674e9cSJoseph Gasparakis {
1146a674e9cSJoseph Gasparakis return (struct ipv6hdr *)skb_inner_network_header(skb);
1156a674e9cSJoseph Gasparakis }
1166a674e9cSJoseph Gasparakis
ipipv6_hdr(const struct sk_buff * skb)11739b89160SArnaldo Carvalho de Melo static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb)
11839b89160SArnaldo Carvalho de Melo {
1199c70220bSArnaldo Carvalho de Melo return (struct ipv6hdr *)skb_transport_header(skb);
12039b89160SArnaldo Carvalho de Melo }
12139b89160SArnaldo Carvalho de Melo
ipv6_transport_len(const struct sk_buff * skb)122ba5ea614SLinus Lüssing static inline unsigned int ipv6_transport_len(const struct sk_buff *skb)
123ba5ea614SLinus Lüssing {
124ba5ea614SLinus Lüssing return ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr) -
125ba5ea614SLinus Lüssing skb_network_header_len(skb);
126ba5ea614SLinus Lüssing }
127ba5ea614SLinus Lüssing
1281da177e4SLinus Torvalds /*
1291da177e4SLinus Torvalds This structure contains results of exthdrs parsing
1301da177e4SLinus Torvalds as offsets from skb->nh.
1311da177e4SLinus Torvalds */
1321da177e4SLinus Torvalds
1331da177e4SLinus Torvalds struct inet6_skb_parm {
1341da177e4SLinus Torvalds int iif;
135dd3332bfSYOSHIFUJI Hideaki / 吉藤英明 __be16 ra;
1361da177e4SLinus Torvalds __u16 dst0;
1371da177e4SLinus Torvalds __u16 srcrt;
1381da177e4SLinus Torvalds __u16 dst1;
139333fad53SYOSHIFUJI Hideaki __u16 lastopt;
140e7c38157SDavid S. Miller __u16 nhoff;
1413e3850e9SPatrick McHardy __u16 flags;
14259fbb3a6SMasahide NAKAMURA #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
1438dd7368dSDavid S. Miller __u16 dsthao;
1448dd7368dSDavid S. Miller #endif
1454cdd3408SPatrick McHardy __u16 frag_max_size;
146e4129440SAndrew Lunn __u16 srhoff;
1473e3850e9SPatrick McHardy
1483e3850e9SPatrick McHardy #define IP6SKB_XFRM_TRANSFORMED 1
1497bc570c8SYOSHIFUJI Hideaki #define IP6SKB_FORWARDED 2
1509c6eb28aSJan Engelhardt #define IP6SKB_REROUTED 4
151dd3332bfSYOSHIFUJI Hideaki / 吉藤英明 #define IP6SKB_ROUTERALERT 8
152f46078cfSHannes Frederic Sowa #define IP6SKB_FRAGMENTED 16
1538b58a398SFlorian Westphal #define IP6SKB_HOPBYHOP 32
15474b20582SDavid Ahern #define IP6SKB_L3SLAVE 64
155cb891fa6SPaolo Abeni #define IP6SKB_JUMBOGRAM 128
156e4129440SAndrew Lunn #define IP6SKB_SEG6 256
15780e425b6SCoco Li #define IP6SKB_FAKEJUMBO 512
1588423be89SSriram Yagnaraman #define IP6SKB_MULTIPATH 1024
1591da177e4SLinus Torvalds };
1601da177e4SLinus Torvalds
16174b20582SDavid Ahern #if defined(CONFIG_NET_L3_MASTER_DEV)
ipv6_l3mdev_skb(__u16 flags)162a04a480dSDavid Ahern static inline bool ipv6_l3mdev_skb(__u16 flags)
16374b20582SDavid Ahern {
16474b20582SDavid Ahern return flags & IP6SKB_L3SLAVE;
16574b20582SDavid Ahern }
16674b20582SDavid Ahern #else
ipv6_l3mdev_skb(__u16 flags)167a04a480dSDavid Ahern static inline bool ipv6_l3mdev_skb(__u16 flags)
16874b20582SDavid Ahern {
16974b20582SDavid Ahern return false;
17074b20582SDavid Ahern }
17174b20582SDavid Ahern #endif
17274b20582SDavid Ahern
1731da177e4SLinus Torvalds #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
1744b340ae2SBrian Haley #define IP6CBMTU(skb) ((struct ip6_mtuinfo *)((skb)->cb))
1751da177e4SLinus Torvalds
inet6_iif(const struct sk_buff * skb)176505cbfc5SArnaldo Carvalho de Melo static inline int inet6_iif(const struct sk_buff *skb)
177505cbfc5SArnaldo Carvalho de Melo {
178a04a480dSDavid Ahern bool l3_slave = ipv6_l3mdev_skb(IP6CB(skb)->flags);
17974b20582SDavid Ahern
18074b20582SDavid Ahern return l3_slave ? skb->skb_iif : IP6CB(skb)->iif;
181505cbfc5SArnaldo Carvalho de Melo }
182505cbfc5SArnaldo Carvalho de Melo
inet6_is_jumbogram(const struct sk_buff * skb)183cb891fa6SPaolo Abeni static inline bool inet6_is_jumbogram(const struct sk_buff *skb)
184cb891fa6SPaolo Abeni {
185cb891fa6SPaolo Abeni return !!(IP6CB(skb)->flags & IP6SKB_JUMBOGRAM);
186cb891fa6SPaolo Abeni }
187cb891fa6SPaolo Abeni
188a04a480dSDavid Ahern /* can not be used in TCP layer after tcp_v6_fill_cb */
inet6_sdif(const struct sk_buff * skb)1891801b570SDavid Ahern static inline int inet6_sdif(const struct sk_buff *skb)
1901801b570SDavid Ahern {
1911801b570SDavid Ahern #if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
1921801b570SDavid Ahern if (skb && ipv6_l3mdev_skb(IP6CB(skb)->flags))
1931801b570SDavid Ahern return IP6CB(skb)->iif;
1941801b570SDavid Ahern #endif
1951801b570SDavid Ahern return 0;
1961801b570SDavid Ahern }
1971801b570SDavid Ahern
198ca304b61SArnaldo Carvalho de Melo struct tcp6_request_sock {
199ca304b61SArnaldo Carvalho de Melo struct tcp_request_sock tcp6rsk_tcp;
200ca304b61SArnaldo Carvalho de Melo };
2012e6599cbSArnaldo Carvalho de Melo
20220283d84SHerbert Xu struct ipv6_mc_socklist;
20320283d84SHerbert Xu struct ipv6_ac_socklist;
20420283d84SHerbert Xu struct ipv6_fl_socklist;
20520283d84SHerbert Xu
206366e41d9SVlad Yasevich struct inet6_cork {
207366e41d9SVlad Yasevich struct ipv6_txoptions *opt;
208366e41d9SVlad Yasevich u8 hop_limit;
209366e41d9SVlad Yasevich u8 tclass;
210*a18dfa99SWillem de Bruijn u8 dontfrag:1;
211366e41d9SVlad Yasevich };
212366e41d9SVlad Yasevich
213f5f80e32SEric Dumazet /* struct ipv6_pinfo - ipv6 private area */
2141da177e4SLinus Torvalds struct ipv6_pinfo {
2151da177e4SLinus Torvalds struct in6_addr saddr;
216b24a2516SYang Hongyang struct in6_pktinfo sticky_pktinfo;
217d3818c92SEric Dumazet const struct in6_addr *daddr_cache;
2188e1ef0a9SYOSHIFUJI Hideaki #ifdef CONFIG_IPV6_SUBTREES
219d3818c92SEric Dumazet const struct in6_addr *saddr_cache;
2208e1ef0a9SYOSHIFUJI Hideaki #endif
2211da177e4SLinus Torvalds
22290bcaf7bSAl Viro __be32 flow_label;
2231da177e4SLinus Torvalds __u32 frag_size;
2241d5d236dSYOSHIFUJI Hideaki
225b0adfba7SEric Dumazet s16 hop_limit;
2262da23eb0SEric Dumazet u8 mcast_hops;
2271d5d236dSYOSHIFUJI Hideaki
228c4062dfcSErich E. Hoover int ucast_oif;
2291da177e4SLinus Torvalds int mcast_oif;
2301da177e4SLinus Torvalds
2311da177e4SLinus Torvalds /* pktoption flags */
2321da177e4SLinus Torvalds union {
2331da177e4SLinus Torvalds struct {
2344c752098SYOSHIFUJI Hideaki __u16 srcrt:1,
2354c752098SYOSHIFUJI Hideaki osrcrt:1,
2361da177e4SLinus Torvalds rxinfo:1,
237333fad53SYOSHIFUJI Hideaki rxoinfo:1,
2381da177e4SLinus Torvalds rxhlim:1,
239333fad53SYOSHIFUJI Hideaki rxohlim:1,
2401da177e4SLinus Torvalds hopopts:1,
241333fad53SYOSHIFUJI Hideaki ohopopts:1,
2421da177e4SLinus Torvalds dstopts:1,
243333fad53SYOSHIFUJI Hideaki odstopts:1,
24441a1f8eaSYOSHIFUJI Hideaki rxflow:1,
245793b1473SBrian Haley rxtclass:1,
2466c468622SBalazs Scheidler rxpmtu:1,
2470cc0aa61SWillem de Bruijn rxorigdstaddr:1,
2480cc0aa61SWillem de Bruijn recvfragsize:1;
2490cc0aa61SWillem de Bruijn /* 1 bits hole */
2501da177e4SLinus Torvalds } bits;
251333fad53SYOSHIFUJI Hideaki __u16 all;
2521da177e4SLinus Torvalds } rxopt;
2531da177e4SLinus Torvalds
2541da177e4SLinus Torvalds /* sockopt flags */
255fa17a6d8SEric Dumazet __u8 srcprefs; /* 001: prefer temporary address
2567cbca67cSYOSHIFUJI Hideaki * 010: prefer public address
2577cbca67cSYOSHIFUJI Hideaki * 100: prefer care-of address
2587cbca67cSYOSHIFUJI Hideaki */
2596b724bc4SEric Dumazet __u8 pmtudisc;
260e802af9cSStephen Hemminger __u8 min_hopcount;
26141a1f8eaSYOSHIFUJI Hideaki __u8 tclass;
2621397ed35SFlorent Fourcot __be32 rcv_flowinfo;
2631da177e4SLinus Torvalds
2641da177e4SLinus Torvalds __u32 dst_cookie;
2651da177e4SLinus Torvalds
266456b61bcSEric Dumazet struct ipv6_mc_socklist __rcu *ipv6_mc_list;
2671da177e4SLinus Torvalds struct ipv6_ac_socklist *ipv6_ac_list;
26818367681SYOSHIFUJI Hideaki / 吉藤英明 struct ipv6_fl_socklist __rcu *ipv6_fl_list;
2691da177e4SLinus Torvalds
27045f6fad8SEric Dumazet struct ipv6_txoptions __rcu *opt;
2711da177e4SLinus Torvalds struct sk_buff *pktoptions;
2724b340ae2SBrian Haley struct sk_buff *rxpmtu;
273366e41d9SVlad Yasevich struct inet6_cork cork;
2741da177e4SLinus Torvalds };
2751da177e4SLinus Torvalds
276d986f521SEric Dumazet /* We currently use available bits from inet_sk(sk)->inet_flags,
277d986f521SEric Dumazet * this could change in the future.
278d986f521SEric Dumazet */
279d986f521SEric Dumazet #define inet6_test_bit(nr, sk) \
280d986f521SEric Dumazet test_bit(INET_FLAGS_##nr, &inet_sk(sk)->inet_flags)
281d986f521SEric Dumazet #define inet6_set_bit(nr, sk) \
282d986f521SEric Dumazet set_bit(INET_FLAGS_##nr, &inet_sk(sk)->inet_flags)
283d986f521SEric Dumazet #define inet6_clear_bit(nr, sk) \
284d986f521SEric Dumazet clear_bit(INET_FLAGS_##nr, &inet_sk(sk)->inet_flags)
285d986f521SEric Dumazet #define inet6_assign_bit(nr, sk, val) \
286d986f521SEric Dumazet assign_bit(INET_FLAGS_##nr, &inet_sk(sk)->inet_flags, val)
287d986f521SEric Dumazet
2881da177e4SLinus Torvalds /* WARNING: don't change the layout of the members in {raw,udp,tcp}6_sock! */
2891da177e4SLinus Torvalds struct raw6_sock {
2901da177e4SLinus Torvalds /* inet_sock has to be the first member of raw6_sock */
2911da177e4SLinus Torvalds struct inet_sock inet;
2921da177e4SLinus Torvalds __u32 checksum; /* perform checksum */
2931da177e4SLinus Torvalds __u32 offset; /* checksum offset */
2941da177e4SLinus Torvalds struct icmp6_filter filter;
295d1db275dSPatrick McHardy __u32 ip6mr_table;
296f5f80e32SEric Dumazet
2971da177e4SLinus Torvalds struct ipv6_pinfo inet6;
2981da177e4SLinus Torvalds };
2991da177e4SLinus Torvalds
3001da177e4SLinus Torvalds struct udp6_sock {
3011da177e4SLinus Torvalds struct udp_sock udp;
302f5f80e32SEric Dumazet
3031da177e4SLinus Torvalds struct ipv6_pinfo inet6;
3041da177e4SLinus Torvalds };
3051da177e4SLinus Torvalds
3061da177e4SLinus Torvalds struct tcp6_sock {
3071da177e4SLinus Torvalds struct tcp_sock tcp;
308f5f80e32SEric Dumazet
3091da177e4SLinus Torvalds struct ipv6_pinfo inet6;
3101da177e4SLinus Torvalds };
3111da177e4SLinus Torvalds
312b9750ce1SArnaldo Carvalho de Melo extern int inet6_sk_rebuild_header(struct sock *sk);
313b9750ce1SArnaldo Carvalho de Melo
31448ee3569SDavid S. Miller struct tcp6_timewait_sock {
31548ee3569SDavid S. Miller struct tcp_timewait_sock tcp6tw_tcp;
31648ee3569SDavid S. Miller };
31748ee3569SDavid S. Miller
318dfd56b8bSEric Dumazet #if IS_ENABLED(CONFIG_IPV6)
319e4348637SDavid Ahern bool ipv6_mod_enabled(void);
320e4348637SDavid Ahern
inet6_sk(const struct sock * __sk)3211da177e4SLinus Torvalds static inline struct ipv6_pinfo *inet6_sk(const struct sock *__sk)
3221da177e4SLinus Torvalds {
323e7eadb4dSEric Dumazet return sk_fullsock(__sk) ? inet_sk(__sk)->pinet6 : NULL;
3241da177e4SLinus Torvalds }
3251da177e4SLinus Torvalds
32647fcae28SEric Dumazet #define raw6_sk(ptr) container_of_const(ptr, struct raw6_sock, inet.sk)
3271da177e4SLinus Torvalds
32889e9c728SKuniyuki Iwashima #define ipv6_only_sock(sk) (sk->sk_ipv6only)
3294b261c75SHannes Frederic Sowa #define ipv6_sk_rxinfo(sk) ((sk)->sk_family == PF_INET6 && \
3304b261c75SHannes Frederic Sowa inet6_sk(sk)->rxopt.bits.rxinfo)
3318feaf0c0SArnaldo Carvalho de Melo
inet6_rcv_saddr(const struct sock * sk)332efe4208fSEric Dumazet static inline const struct in6_addr *inet6_rcv_saddr(const struct sock *sk)
3338feaf0c0SArnaldo Carvalho de Melo {
334efe4208fSEric Dumazet if (sk->sk_family == AF_INET6)
335efe4208fSEric Dumazet return &sk->sk_v6_rcv_saddr;
336efe4208fSEric Dumazet return NULL;
3378feaf0c0SArnaldo Carvalho de Melo }
3388feaf0c0SArnaldo Carvalho de Melo
inet_v6_ipv6only(const struct sock * sk)339463c84b9SArnaldo Carvalho de Melo static inline int inet_v6_ipv6only(const struct sock *sk)
3408feaf0c0SArnaldo Carvalho de Melo {
3419fe516baSEric Dumazet /* ipv6only field is at same position for timewait and other sockets */
3429fe516baSEric Dumazet return ipv6_only_sock(sk);
3438feaf0c0SArnaldo Carvalho de Melo }
3441da177e4SLinus Torvalds #else
3451da177e4SLinus Torvalds #define ipv6_only_sock(sk) 0
3464b261c75SHannes Frederic Sowa #define ipv6_sk_rxinfo(sk) 0
3471da177e4SLinus Torvalds
ipv6_mod_enabled(void)348e4348637SDavid Ahern static inline bool ipv6_mod_enabled(void)
349e4348637SDavid Ahern {
350e4348637SDavid Ahern return false;
351e4348637SDavid Ahern }
352e4348637SDavid Ahern
inet6_sk(const struct sock * __sk)3531da177e4SLinus Torvalds static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
3541da177e4SLinus Torvalds {
3551da177e4SLinus Torvalds return NULL;
3561da177e4SLinus Torvalds }
3571da177e4SLinus Torvalds
raw6_sk(const struct sock * sk)3581da177e4SLinus Torvalds static inline struct raw6_sock *raw6_sk(const struct sock *sk)
3591da177e4SLinus Torvalds {
3601da177e4SLinus Torvalds return NULL;
3611da177e4SLinus Torvalds }
3621da177e4SLinus Torvalds
3630fa1a53eSArnaldo Carvalho de Melo #define inet6_rcv_saddr(__sk) NULL
364463c84b9SArnaldo Carvalho de Melo #define inet_v6_ipv6only(__sk) 0
365dfd56b8bSEric Dumazet #endif /* IS_ENABLED(CONFIG_IPV6) */
3668feaf0c0SArnaldo Carvalho de Melo #endif /* _IPV6_H */
367