1 /* SPDX-License-Identifier: GPL-2.0 */
6 #include <linux/netdevice.h>
7 #include <linux/skbuff.h>
10 #include <net/neighbour.h>
14 /* structs from net/ip6_fib.h */
20 /* This is ugly, ideally these symbols should be built
21 * into the core kernel.
24 int (*ipv6_sock_mc_join
)(struct sock
*sk
, int ifindex
,
25 const struct in6_addr
*addr
);
26 int (*ipv6_sock_mc_drop
)(struct sock
*sk
, int ifindex
,
27 const struct in6_addr
*addr
);
28 struct dst_entry
*(*ipv6_dst_lookup_flow
)(struct net
*net
,
29 const struct sock
*sk
,
31 const struct in6_addr
*final_dst
);
32 int (*ipv6_route_input
)(struct sk_buff
*skb
);
34 struct fib6_table
*(*fib6_get_table
)(struct net
*net
, u32 id
);
35 int (*fib6_lookup
)(struct net
*net
, int oif
, struct flowi6
*fl6
,
36 struct fib6_result
*res
, int flags
);
37 int (*fib6_table_lookup
)(struct net
*net
, struct fib6_table
*table
,
38 int oif
, struct flowi6
*fl6
,
39 struct fib6_result
*res
, int flags
);
40 void (*fib6_select_path
)(const struct net
*net
, struct fib6_result
*res
,
41 struct flowi6
*fl6
, int oif
, bool oif_match
,
42 const struct sk_buff
*skb
, int strict
);
43 u32 (*ip6_mtu_from_fib6
)(const struct fib6_result
*res
,
44 const struct in6_addr
*daddr
,
45 const struct in6_addr
*saddr
);
47 int (*fib6_nh_init
)(struct net
*net
, struct fib6_nh
*fib6_nh
,
48 struct fib6_config
*cfg
, gfp_t gfp_flags
,
49 struct netlink_ext_ack
*extack
);
50 void (*fib6_nh_release
)(struct fib6_nh
*fib6_nh
);
51 void (*fib6_nh_release_dsts
)(struct fib6_nh
*fib6_nh
);
52 void (*fib6_update_sernum
)(struct net
*net
, struct fib6_info
*rt
);
53 int (*ip6_del_rt
)(struct net
*net
, struct fib6_info
*rt
, bool skip_notify
);
54 void (*fib6_rt_update
)(struct net
*net
, struct fib6_info
*rt
,
55 struct nl_info
*info
);
57 void (*udpv6_encap_enable
)(void);
58 void (*ndisc_send_na
)(struct net_device
*dev
, const struct in6_addr
*daddr
,
59 const struct in6_addr
*solicited_addr
,
60 bool router
, bool solicited
, bool override
, bool inc_opt
);
61 #if IS_ENABLED(CONFIG_XFRM)
62 void (*xfrm6_local_rxpmtu
)(struct sk_buff
*skb
, u32 mtu
);
63 int (*xfrm6_udp_encap_rcv
)(struct sock
*sk
, struct sk_buff
*skb
);
64 struct sk_buff
*(*xfrm6_gro_udp_encap_rcv
)(struct sock
*sk
,
65 struct list_head
*head
,
67 int (*xfrm6_rcv_encap
)(struct sk_buff
*skb
, int nexthdr
, __be32 spi
,
70 struct neigh_table
*nd_tbl
;
72 int (*ipv6_fragment
)(struct net
*net
, struct sock
*sk
, struct sk_buff
*skb
,
73 int (*output
)(struct net
*, struct sock
*, struct sk_buff
*));
74 struct net_device
*(*ipv6_dev_find
)(struct net
*net
, const struct in6_addr
*addr
,
75 struct net_device
*dev
);
76 int (*ip6_xmit
)(const struct sock
*sk
, struct sk_buff
*skb
, struct flowi6
*fl6
,
77 __u32 mark
, struct ipv6_txoptions
*opt
, int tclass
, u32 priority
);
79 extern const struct ipv6_stub
*ipv6_stub __read_mostly
;
81 /* A stub used by bpf helpers. Similarly ugly as ipv6_stub */
82 struct ipv6_bpf_stub
{
83 int (*inet6_bind
)(struct sock
*sk
, struct sockaddr
*uaddr
, int addr_len
,
85 struct sock
*(*udp6_lib_lookup
)(const struct net
*net
,
86 const struct in6_addr
*saddr
, __be16 sport
,
87 const struct in6_addr
*daddr
, __be16 dport
,
88 int dif
, int sdif
, struct udp_table
*tbl
,
90 int (*ipv6_setsockopt
)(struct sock
*sk
, int level
, int optname
,
91 sockptr_t optval
, unsigned int optlen
);
92 int (*ipv6_getsockopt
)(struct sock
*sk
, int level
, int optname
,
93 sockptr_t optval
, sockptr_t optlen
);
94 int (*ipv6_dev_get_saddr
)(struct net
*net
,
95 const struct net_device
*dst_dev
,
96 const struct in6_addr
*daddr
,
98 struct in6_addr
*saddr
);
100 extern const struct ipv6_bpf_stub
*ipv6_bpf_stub __read_mostly
;