mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAlpL3gcACgkQONu9yGCS aT5Mtg//ZLHXxfOvt7JDOBw1iWR/ysgrS/8p2ora3zjGUCtsYSkGqRmRrAj9CiFD ihbb8pGvdDu4JzOVJxIbT6hLBcK93RqeYVlK4qm5G3ja4ddik3Y9Ue0JkjqWbBDD 4BNGdixwlOEA5EhCBsZTESFDReox9sg4eUcw5X2bDKoo3in3ZSWVtzmGw6lqgSj3 c7HkScjc2aqp8rs1hKwkwfjfhF3uT7qqOmcNopoTJmwyoritC8bcRtAukqKP+eQR vXp15vApC0IpBwU7iChAAl165looT9PjRMvPOwkORkBnWf7H1Y2weOk2hE4LF1yy 2zdM3b1qqEsjpKi1N8Pin70RyNxjTr8OOhEBdIwl/FrJ02lKsCxKXig0UsFL0Skj lfQWyyg5qkkK4TK/F36f6RrqatN74O3nuPGcRG+vldHcP/sangKF09/+a3pDW0oZ Kvi7HLSscZsuSD1VMIzf/+9PgrR5gSmlpe8G/3SHsShxfO2P21WUkOX1nmpciAd2 VFm6BvPmmW6Rm/GKkf1vl/a/X9HtrQeCkmsYVlSxGLJ6smnoXLzkNHcqb8Jhnoh8 xKgdrUXqp0Om10hLty2dNzwoaSOKo93eq2fxlftT5lKazxBYAVUZg4tW5LppYZeK kKBTycrFxxt9UFJ8NP9zMPIsleuOeItWzMnNExncVHlxdu+fjbQ= =EJtN -----END PGP SIGNATURE----- Merge 4.14.11 into android-4.14 Changes in 4.14.11 tracing: Remove extra zeroing out of the ring buffer page tracing: Fix possible double free on failure of allocating trace buffer tracing: Fix crash when it fails to alloc ring buffer x86/cpufeatures: Add X86_BUG_CPU_INSECURE x86/mm/pti: Disable global pages if PAGE_TABLE_ISOLATION=y x86/mm/pti: Prepare the x86/entry assembly code for entry/exit CR3 switching x86/mm/pti: Add infrastructure for page table isolation x86/pti: Add the pti= cmdline option and documentation x86/mm/pti: Add mapping helper functions x86/mm/pti: Allow NX poison to be set in p4d/pgd x86/mm/pti: Allocate a separate user PGD x86/mm/pti: Populate user PGD x86/mm/pti: Add functions to clone kernel PMDs x86/mm/pti: Force entry through trampoline when PTI active x86/mm/pti: Share cpu_entry_area with user space page tables x86/entry: Align entry text section to PMD boundary x86/mm/pti: Share entry text PMD x86/mm/pti: Map ESPFIX into user space x86/cpu_entry_area: Add debugstore entries to cpu_entry_area x86/events/intel/ds: Map debug buffers in cpu_entry_area x86/mm/64: Make a full PGD-entry size hole in the memory map x86/pti: Put the LDT in its own PGD if PTI is on x86/pti: Map the vsyscall page if needed x86/mm: Allow flushing for future ASID switches x86/mm: Abstract switching CR3 x86/mm: Use/Fix PCID to optimize user/kernel switches x86/mm: Optimize RESTORE_CR3 x86/mm: Use INVPCID for __native_flush_tlb_single() x86/mm: Clarify the whole ASID/kernel PCID/user PCID naming x86/dumpstack: Indicate in Oops whether PTI is configured and enabled x86/mm/pti: Add Kconfig x86/mm/dump_pagetables: Add page table directory to the debugfs VFS hierarchy x86/mm/dump_pagetables: Check user space page table for WX pages x86/mm/dump_pagetables: Allow dumping current pagetables x86/ldt: Make the LDT mapping RO ring-buffer: Mask out the info bits when returning buffer page length ring-buffer: Do no reuse reader page if still in use iw_cxgb4: Only validate the MSN for successful completions ASoC: codecs: msm8916-wcd: Fix supported formats ASoC: wm_adsp: Fix validation of firmware and coeff lengths ASoC: da7218: fix fix child-node lookup ASoC: fsl_ssi: AC'97 ops need regmap, clock and cleaning up on failure ASoC: twl4030: fix child-node lookup ASoC: tlv320aic31xx: Fix GPIO1 register definition gpio: fix "gpio-line-names" property retrieval IB/hfi: Only read capability registers if the capability exists IB/mlx5: Serialize access to the VMA list IB/uverbs: Fix command checking as part of ib_uverbs_ex_modify_qp() IB/core: Verify that QP is security enabled in create and destroy ALSA: hda: Drop useless WARN_ON() ALSA: hda - Add MIC_NO_PRESENCE fixup for 2 HP machines ALSA: hda - change the location for one mic on a Lenovo machine ALSA: hda - fix headset mic detection issue on a Dell machine ALSA: hda - Fix missing COEF init for ALC225/295/299 cpufreq: schedutil: Use idle_calls counter of the remote CPU block: fix blk_rq_append_bio block: don't let passthrough IO go into .make_request_fn() kbuild: add '-fno-stack-check' to kernel build options ipv4: igmp: guard against silly MTU values ipv6: mcast: better catch silly mtu values net: fec: unmap the xmit buffer that are not transferred by DMA net: igmp: Use correct source address on IGMPv3 reports netlink: Add netns check on taps net: qmi_wwan: add Sierra EM7565 1199:9091 net: reevalulate autoflowlabel setting after sysctl setting ptr_ring: add barriers RDS: Check cmsg_len before dereferencing CMSG_DATA tcp_bbr: record "full bw reached" decision in new full_bw_reached bit tcp md5sig: Use skb's saddr when replying to an incoming segment tg3: Fix rx hang on MTU change with 5717/5719 tcp_bbr: reset full pipe detection on loss recovery undo tcp_bbr: reset long-term bandwidth sampling on loss recovery undo s390/qeth: apply takeover changes when mode is toggled s390/qeth: don't apply takeover changes to RXIP s390/qeth: lock IP table while applying takeover changes s390/qeth: update takeover IPs after configuration change net: ipv4: fix for a race condition in raw_sendmsg net: mvmdio: disable/unprepare clocks in EPROBE_DEFER case sctp: Replace use of sockets_allocated with specified macro. adding missing rcu_read_unlock in ipxip6_rcv ip6_gre: fix device features for ioctl setup ipv4: Fix use-after-free when flushing FIB tables net: bridge: fix early call to br_stp_change_bridge_id and plug newlink leaks net: Fix double free and memory corruption in get_net_ns_by_id() net: phy: micrel: ksz9031: reconfigure autoneg after phy autoneg workaround sock: free skb in skb_complete_tx_timestamp on error tcp: invalidate rate samples during SACK reneging net/mlx5: Fix rate limit packet pacing naming and struct net/mlx5e: Fix possible deadlock of VXLAN lock net/mlx5e: Fix features check of IPv6 traffic net/mlx5e: Add refcount to VXLAN structure net/mlx5e: Prevent possible races in VXLAN control flow net/mlx5: Fix error flow in CREATE_QP command openvswitch: Fix pop_vlan action for double tagged frames sfc: pass valid pointers from efx_enqueue_unwind net: dsa: bcm_sf2: Clear IDDQ_GLOBAL_PWR bit for PHY s390/qeth: fix error handling in checksum cmd callback sctp: make sure stream nums can match optlen in sctp_setsockopt_reset_streams tipc: fix hanging poll() for stream sockets mlxsw: spectrum: Disable MAC learning for ovs port tcp: fix potential underestimation on rcv_rtt net: phy: marvell: Limit 88m1101 autoneg errata to 88E1145 as well. ipv6: Honor specified parameters in fibmatch lookup tcp: refresh tcp_mstamp from timers callbacks net/mlx5: FPGA, return -EINVAL if size is zero vxlan: restore dev->mtu setting based on lower device net: sched: fix static key imbalance in case of ingress/clsact_init error bnxt_en: Fix sources of spurious netpoll warnings phylink: ensure the PHY interface mode is appropriately set phylink: ensure AN is enabled ipv4: fib: Fix metrics match when deleting a route ipv6: set all.accept_dad to 0 by default Revert "mlx5: move affinity hints assignments to generic code" skbuff: orphan frags before zerocopy clone skbuff: skb_copy_ubufs must release uarg even without user frags skbuff: in skb_copy_ubufs unclone before releasing zerocopy sparc64: repair calling incorrect hweight function from stubs usbip: fix usbip bind writing random string after command in match_busid usbip: prevent leaking socket pointer address in messages usbip: stub: stop printing kernel pointer addresses in messages usbip: vhci: stop printing kernel pointer addresses in messages USB: chipidea: msm: fix ulpi-node lookup USB: serial: ftdi_sio: add id for Airbus DS P8GR USB: serial: qcserial: add Sierra Wireless EM7565 USB: serial: option: add support for Telit ME910 PID 0x1101 USB: serial: option: adding support for YUGA CLM920-NC5 usb: Add device quirk for Logitech HD Pro Webcam C925e usb: add RESET_RESUME for ELSA MicroLink 56K USB: Fix off by one in type-specific length check of BOS SSP capability usb: xhci: Add XHCI_TRUST_TX_LENGTH for Renesas uPD720201 timers: Use deferrable base independent of base::nohz_active timers: Invoke timer_start_debug() where it makes sense timers: Reinitialize per cpu bases on hotplug binder: fix proc->files use-after-free phy: tegra: fix device-tree node lookups drivers: base: cacheinfo: fix cache type for non-architected system cache staging: android: ion: Fix dma direction for dma_sync_sg_for_cpu/device nohz: Prevent a timer interrupt storm in tick_nohz_stop_sched_tick() x86/smpboot: Remove stale TLB flush invocations x86/mm: Remove preempt_disable/enable() from __native_flush_tlb() x86-32: Fix kexec with stack canary (CONFIG_CC_STACKPROTECTOR) x86/espfix/64: Fix espfix double-fault handling on 5-level systems x86/ldt: Plug memory leak in error path x86/ldt: Make LDT pgtable free conditional n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD) tty: fix tty_ldisc_receive_buf() documentation Linux 4.14.11 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
397 lines
8.9 KiB
C
397 lines
8.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _IPV6_H
|
|
#define _IPV6_H
|
|
|
|
#include <uapi/linux/ipv6.h>
|
|
|
|
#define ipv6_optlen(p) (((p)->hdrlen+1) << 3)
|
|
#define ipv6_authlen(p) (((p)->hdrlen+2) << 2)
|
|
/*
|
|
* This structure contains configuration options per IPv6 link.
|
|
*/
|
|
struct ipv6_devconf {
|
|
__s32 forwarding;
|
|
__s32 hop_limit;
|
|
__s32 mtu6;
|
|
__s32 accept_ra;
|
|
__s32 accept_redirects;
|
|
__s32 autoconf;
|
|
__s32 dad_transmits;
|
|
__s32 rtr_solicits;
|
|
__s32 rtr_solicit_interval;
|
|
__s32 rtr_solicit_max_interval;
|
|
__s32 rtr_solicit_delay;
|
|
__s32 force_mld_version;
|
|
__s32 mldv1_unsolicited_report_interval;
|
|
__s32 mldv2_unsolicited_report_interval;
|
|
__s32 use_tempaddr;
|
|
__s32 temp_valid_lft;
|
|
__s32 temp_prefered_lft;
|
|
__s32 regen_max_retry;
|
|
__s32 max_desync_factor;
|
|
__s32 max_addresses;
|
|
__s32 accept_ra_defrtr;
|
|
__s32 accept_ra_min_hop_limit;
|
|
__s32 accept_ra_pinfo;
|
|
__s32 ignore_routes_with_linkdown;
|
|
#ifdef CONFIG_IPV6_ROUTER_PREF
|
|
__s32 accept_ra_rtr_pref;
|
|
__s32 rtr_probe_interval;
|
|
#ifdef CONFIG_IPV6_ROUTE_INFO
|
|
__s32 accept_ra_rt_info_min_plen;
|
|
__s32 accept_ra_rt_info_max_plen;
|
|
#endif
|
|
#endif
|
|
__s32 accept_ra_rt_table;
|
|
__s32 proxy_ndp;
|
|
__s32 accept_source_route;
|
|
__s32 accept_ra_from_local;
|
|
#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
|
|
__s32 optimistic_dad;
|
|
__s32 use_optimistic;
|
|
#endif
|
|
#ifdef CONFIG_IPV6_MROUTE
|
|
__s32 mc_forwarding;
|
|
#endif
|
|
__s32 disable_ipv6;
|
|
__s32 drop_unicast_in_l2_multicast;
|
|
__s32 accept_dad;
|
|
__s32 force_tllao;
|
|
__s32 ndisc_notify;
|
|
__s32 suppress_frag_ndisc;
|
|
__s32 accept_ra_mtu;
|
|
__s32 drop_unsolicited_na;
|
|
struct ipv6_stable_secret {
|
|
bool initialized;
|
|
struct in6_addr secret;
|
|
} stable_secret;
|
|
__s32 use_oif_addrs_only;
|
|
__s32 keep_addr_on_down;
|
|
__s32 seg6_enabled;
|
|
#ifdef CONFIG_IPV6_SEG6_HMAC
|
|
__s32 seg6_require_hmac;
|
|
#endif
|
|
__u32 enhanced_dad;
|
|
__u32 addr_gen_mode;
|
|
__s32 disable_policy;
|
|
|
|
struct ctl_table_header *sysctl_header;
|
|
};
|
|
|
|
struct ipv6_params {
|
|
__s32 disable_ipv6;
|
|
__s32 autoconf;
|
|
};
|
|
extern struct ipv6_params ipv6_defaults;
|
|
#include <linux/icmpv6.h>
|
|
#include <linux/tcp.h>
|
|
#include <linux/udp.h>
|
|
|
|
#include <net/inet_sock.h>
|
|
|
|
static inline struct ipv6hdr *ipv6_hdr(const struct sk_buff *skb)
|
|
{
|
|
return (struct ipv6hdr *)skb_network_header(skb);
|
|
}
|
|
|
|
static inline struct ipv6hdr *inner_ipv6_hdr(const struct sk_buff *skb)
|
|
{
|
|
return (struct ipv6hdr *)skb_inner_network_header(skb);
|
|
}
|
|
|
|
static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb)
|
|
{
|
|
return (struct ipv6hdr *)skb_transport_header(skb);
|
|
}
|
|
|
|
/*
|
|
This structure contains results of exthdrs parsing
|
|
as offsets from skb->nh.
|
|
*/
|
|
|
|
struct inet6_skb_parm {
|
|
int iif;
|
|
__be16 ra;
|
|
__u16 dst0;
|
|
__u16 srcrt;
|
|
__u16 dst1;
|
|
__u16 lastopt;
|
|
__u16 nhoff;
|
|
__u16 flags;
|
|
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
|
|
__u16 dsthao;
|
|
#endif
|
|
__u16 frag_max_size;
|
|
|
|
#define IP6SKB_XFRM_TRANSFORMED 1
|
|
#define IP6SKB_FORWARDED 2
|
|
#define IP6SKB_REROUTED 4
|
|
#define IP6SKB_ROUTERALERT 8
|
|
#define IP6SKB_FRAGMENTED 16
|
|
#define IP6SKB_HOPBYHOP 32
|
|
#define IP6SKB_L3SLAVE 64
|
|
#define IP6SKB_JUMBOGRAM 128
|
|
};
|
|
|
|
#if defined(CONFIG_NET_L3_MASTER_DEV)
|
|
static inline bool ipv6_l3mdev_skb(__u16 flags)
|
|
{
|
|
return flags & IP6SKB_L3SLAVE;
|
|
}
|
|
#else
|
|
static inline bool ipv6_l3mdev_skb(__u16 flags)
|
|
{
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
|
|
#define IP6CBMTU(skb) ((struct ip6_mtuinfo *)((skb)->cb))
|
|
|
|
static inline int inet6_iif(const struct sk_buff *skb)
|
|
{
|
|
bool l3_slave = ipv6_l3mdev_skb(IP6CB(skb)->flags);
|
|
|
|
return l3_slave ? skb->skb_iif : IP6CB(skb)->iif;
|
|
}
|
|
|
|
static inline bool inet6_is_jumbogram(const struct sk_buff *skb)
|
|
{
|
|
return !!(IP6CB(skb)->flags & IP6SKB_JUMBOGRAM);
|
|
}
|
|
|
|
/* can not be used in TCP layer after tcp_v6_fill_cb */
|
|
static inline int inet6_sdif(const struct sk_buff *skb)
|
|
{
|
|
#if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
|
|
if (skb && ipv6_l3mdev_skb(IP6CB(skb)->flags))
|
|
return IP6CB(skb)->iif;
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
/* can not be used in TCP layer after tcp_v6_fill_cb */
|
|
static inline bool inet6_exact_dif_match(struct net *net, struct sk_buff *skb)
|
|
{
|
|
#if defined(CONFIG_NET_L3_MASTER_DEV)
|
|
if (!net->ipv4.sysctl_tcp_l3mdev_accept &&
|
|
skb && ipv6_l3mdev_skb(IP6CB(skb)->flags))
|
|
return true;
|
|
#endif
|
|
return false;
|
|
}
|
|
|
|
struct tcp6_request_sock {
|
|
struct tcp_request_sock tcp6rsk_tcp;
|
|
};
|
|
|
|
struct ipv6_mc_socklist;
|
|
struct ipv6_ac_socklist;
|
|
struct ipv6_fl_socklist;
|
|
|
|
struct inet6_cork {
|
|
struct ipv6_txoptions *opt;
|
|
u8 hop_limit;
|
|
u8 tclass;
|
|
};
|
|
|
|
/**
|
|
* struct ipv6_pinfo - ipv6 private area
|
|
*
|
|
* In the struct sock hierarchy (tcp6_sock, upd6_sock, etc)
|
|
* this _must_ be the last member, so that inet6_sk_generic
|
|
* is able to calculate its offset from the base struct sock
|
|
* by using the struct proto->slab_obj_size member. -acme
|
|
*/
|
|
struct ipv6_pinfo {
|
|
struct in6_addr saddr;
|
|
struct in6_pktinfo sticky_pktinfo;
|
|
const struct in6_addr *daddr_cache;
|
|
#ifdef CONFIG_IPV6_SUBTREES
|
|
const struct in6_addr *saddr_cache;
|
|
#endif
|
|
|
|
__be32 flow_label;
|
|
__u32 frag_size;
|
|
|
|
/*
|
|
* Packed in 16bits.
|
|
* Omit one shift by by putting the signed field at MSB.
|
|
*/
|
|
#if defined(__BIG_ENDIAN_BITFIELD)
|
|
__s16 hop_limit:9;
|
|
__u16 __unused_1:7;
|
|
#else
|
|
__u16 __unused_1:7;
|
|
__s16 hop_limit:9;
|
|
#endif
|
|
|
|
#if defined(__BIG_ENDIAN_BITFIELD)
|
|
/* Packed in 16bits. */
|
|
__s16 mcast_hops:9;
|
|
__u16 __unused_2:6,
|
|
mc_loop:1;
|
|
#else
|
|
__u16 mc_loop:1,
|
|
__unused_2:6;
|
|
__s16 mcast_hops:9;
|
|
#endif
|
|
int ucast_oif;
|
|
int mcast_oif;
|
|
|
|
/* pktoption flags */
|
|
union {
|
|
struct {
|
|
__u16 srcrt:1,
|
|
osrcrt:1,
|
|
rxinfo:1,
|
|
rxoinfo:1,
|
|
rxhlim:1,
|
|
rxohlim:1,
|
|
hopopts:1,
|
|
ohopopts:1,
|
|
dstopts:1,
|
|
odstopts:1,
|
|
rxflow:1,
|
|
rxtclass:1,
|
|
rxpmtu:1,
|
|
rxorigdstaddr:1,
|
|
recvfragsize:1;
|
|
/* 1 bits hole */
|
|
} bits;
|
|
__u16 all;
|
|
} rxopt;
|
|
|
|
/* sockopt flags */
|
|
__u16 recverr:1,
|
|
sndflow:1,
|
|
repflow:1,
|
|
pmtudisc:3,
|
|
padding:1, /* 1 bit hole */
|
|
srcprefs:3, /* 001: prefer temporary address
|
|
* 010: prefer public address
|
|
* 100: prefer care-of address
|
|
*/
|
|
dontfrag:1,
|
|
autoflowlabel:1,
|
|
autoflowlabel_set:1;
|
|
__u8 min_hopcount;
|
|
__u8 tclass;
|
|
__be32 rcv_flowinfo;
|
|
|
|
__u32 dst_cookie;
|
|
__u32 rx_dst_cookie;
|
|
|
|
struct ipv6_mc_socklist __rcu *ipv6_mc_list;
|
|
struct ipv6_ac_socklist *ipv6_ac_list;
|
|
struct ipv6_fl_socklist __rcu *ipv6_fl_list;
|
|
|
|
struct ipv6_txoptions __rcu *opt;
|
|
struct sk_buff *pktoptions;
|
|
struct sk_buff *rxpmtu;
|
|
struct inet6_cork cork;
|
|
};
|
|
|
|
/* WARNING: don't change the layout of the members in {raw,udp,tcp}6_sock! */
|
|
struct raw6_sock {
|
|
/* inet_sock has to be the first member of raw6_sock */
|
|
struct inet_sock inet;
|
|
__u32 checksum; /* perform checksum */
|
|
__u32 offset; /* checksum offset */
|
|
struct icmp6_filter filter;
|
|
__u32 ip6mr_table;
|
|
/* ipv6_pinfo has to be the last member of raw6_sock, see inet6_sk_generic */
|
|
struct ipv6_pinfo inet6;
|
|
};
|
|
|
|
struct udp6_sock {
|
|
struct udp_sock udp;
|
|
/* ipv6_pinfo has to be the last member of udp6_sock, see inet6_sk_generic */
|
|
struct ipv6_pinfo inet6;
|
|
};
|
|
|
|
struct tcp6_sock {
|
|
struct tcp_sock tcp;
|
|
/* ipv6_pinfo has to be the last member of tcp6_sock, see inet6_sk_generic */
|
|
struct ipv6_pinfo inet6;
|
|
};
|
|
|
|
extern int inet6_sk_rebuild_header(struct sock *sk);
|
|
|
|
struct tcp6_timewait_sock {
|
|
struct tcp_timewait_sock tcp6tw_tcp;
|
|
};
|
|
|
|
#if IS_ENABLED(CONFIG_IPV6)
|
|
bool ipv6_mod_enabled(void);
|
|
|
|
static inline struct ipv6_pinfo *inet6_sk(const struct sock *__sk)
|
|
{
|
|
return sk_fullsock(__sk) ? inet_sk(__sk)->pinet6 : NULL;
|
|
}
|
|
|
|
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
|
{
|
|
return (struct raw6_sock *)sk;
|
|
}
|
|
|
|
static inline void inet_sk_copy_descendant(struct sock *sk_to,
|
|
const struct sock *sk_from)
|
|
{
|
|
int ancestor_size = sizeof(struct inet_sock);
|
|
|
|
if (sk_from->sk_family == PF_INET6)
|
|
ancestor_size += sizeof(struct ipv6_pinfo);
|
|
|
|
__inet_sk_copy_descendant(sk_to, sk_from, ancestor_size);
|
|
}
|
|
|
|
#define __ipv6_only_sock(sk) (sk->sk_ipv6only)
|
|
#define ipv6_only_sock(sk) (__ipv6_only_sock(sk))
|
|
#define ipv6_sk_rxinfo(sk) ((sk)->sk_family == PF_INET6 && \
|
|
inet6_sk(sk)->rxopt.bits.rxinfo)
|
|
|
|
static inline const struct in6_addr *inet6_rcv_saddr(const struct sock *sk)
|
|
{
|
|
if (sk->sk_family == AF_INET6)
|
|
return &sk->sk_v6_rcv_saddr;
|
|
return NULL;
|
|
}
|
|
|
|
static inline int inet_v6_ipv6only(const struct sock *sk)
|
|
{
|
|
/* ipv6only field is at same position for timewait and other sockets */
|
|
return ipv6_only_sock(sk);
|
|
}
|
|
#else
|
|
#define __ipv6_only_sock(sk) 0
|
|
#define ipv6_only_sock(sk) 0
|
|
#define ipv6_sk_rxinfo(sk) 0
|
|
|
|
static inline bool ipv6_mod_enabled(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline struct inet6_request_sock *
|
|
inet6_rsk(const struct request_sock *rsk)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
#define inet6_rcv_saddr(__sk) NULL
|
|
#define tcp_twsk_ipv6only(__sk) 0
|
|
#define inet_v6_ipv6only(__sk) 0
|
|
#endif /* IS_ENABLED(CONFIG_IPV6) */
|
|
#endif /* _IPV6_H */
|