#include <linux/capability.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/in6.h>
#include <linux/ipv6.h>
#include <linux/route.h>
#include <linux/slab.h>
#include <linux/export.h>
#include <linux/icmp.h>
#include <net/ipv6.h>
#include <net/ndisc.h>
#include <net/addrconf.h>
#include <net/transp_v6.h>
#include <net/ip6_route.h>
#include <net/tcp_states.h>
#include <net/dsfield.h>
#include <net/sock_reuseport.h>
#include <linux/errqueue.h>
#include <linux/uaccess.h>
static bool ipv6_mapped_addr_any(const struct in6_addr *a)
{ … }
static void ip6_datagram_flow_key_init(struct flowi6 *fl6,
const struct sock *sk)
{ … }
int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr)
{ … }
void ip6_datagram_release_cb(struct sock *sk)
{ … }
EXPORT_SYMBOL_GPL(…);
int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr,
int addr_len)
{ … }
EXPORT_SYMBOL_GPL(…);
int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
{ … }
EXPORT_SYMBOL_GPL(…);
int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr *uaddr,
int addr_len)
{ … }
EXPORT_SYMBOL_GPL(…);
static void ipv6_icmp_error_rfc4884(const struct sk_buff *skb,
struct sock_ee_data_rfc4884 *out)
{ … }
void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
__be16 port, u32 info, u8 *payload)
{ … }
EXPORT_SYMBOL_GPL(…);
void ipv6_local_error(struct sock *sk, int err, struct flowi6 *fl6, u32 info)
{ … }
void ipv6_local_rxpmtu(struct sock *sk, struct flowi6 *fl6, u32 mtu)
{ … }
static inline bool ipv6_datagram_support_addr(struct sock_exterr_skb *serr)
{ … }
static bool ip6_datagram_support_cmsg(struct sk_buff *skb,
struct sock_exterr_skb *serr)
{ … }
int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
{ … }
EXPORT_SYMBOL_GPL(…);
int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
int *addr_len)
{ … }
void ip6_datagram_recv_common_ctl(struct sock *sk, struct msghdr *msg,
struct sk_buff *skb)
{ … }
void ip6_datagram_recv_specific_ctl(struct sock *sk, struct msghdr *msg,
struct sk_buff *skb)
{ … }
void ip6_datagram_recv_ctl(struct sock *sk, struct msghdr *msg,
struct sk_buff *skb)
{ … }
EXPORT_SYMBOL_GPL(…);
int ip6_datagram_send_ctl(struct net *net, struct sock *sk,
struct msghdr *msg, struct flowi6 *fl6,
struct ipcm6_cookie *ipc6)
{ … }
EXPORT_SYMBOL_GPL(…);
void __ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
__u16 srcp, __u16 destp, int rqueue, int bucket)
{ … }