1 /* SPDX-License-Identifier: GPL-2.0 */
6 #include <linux/netdevice.h>
7 #include <linux/skbuff.h>
10 #include <net/neighbour.h>
13 /* structs from net/ip6_fib.h */
19 /* This is ugly, ideally these symbols should be built
20 * into the core kernel.
23 int (*ipv6_sock_mc_join
)(struct sock
*sk
, int ifindex
,
24 const struct in6_addr
*addr
);
25 int (*ipv6_sock_mc_drop
)(struct sock
*sk
, int ifindex
,
26 const struct in6_addr
*addr
);
27 struct dst_entry
*(*ipv6_dst_lookup_flow
)(struct net
*net
,
28 const struct sock
*sk
,
30 const struct in6_addr
*final_dst
);
31 int (*ipv6_route_input
)(struct sk_buff
*skb
);
33 struct fib6_table
*(*fib6_get_table
)(struct net
*net
, u32 id
);
34 int (*fib6_lookup
)(struct net
*net
, int oif
, struct flowi6
*fl6
,
35 struct fib6_result
*res
, int flags
);
36 int (*fib6_table_lookup
)(struct net
*net
, struct fib6_table
*table
,
37 int oif
, struct flowi6
*fl6
,
38 struct fib6_result
*res
, int flags
);
39 void (*fib6_select_path
)(const struct net
*net
, struct fib6_result
*res
,
40 struct flowi6
*fl6
, int oif
, bool oif_match
,
41 const struct sk_buff
*skb
, int strict
);
42 u32 (*ip6_mtu_from_fib6
)(const struct fib6_result
*res
,
43 const struct in6_addr
*daddr
,
44 const struct in6_addr
*saddr
);
46 int (*fib6_nh_init
)(struct net
*net
, struct fib6_nh
*fib6_nh
,
47 struct fib6_config
*cfg
, gfp_t gfp_flags
,
48 struct netlink_ext_ack
*extack
);
49 void (*fib6_nh_release
)(struct fib6_nh
*fib6_nh
);
50 void (*fib6_update_sernum
)(struct net
*net
, struct fib6_info
*rt
);
51 int (*ip6_del_rt
)(struct net
*net
, struct fib6_info
*rt
, bool skip_notify
);
52 void (*fib6_rt_update
)(struct net
*net
, struct fib6_info
*rt
,
53 struct nl_info
*info
);
55 void (*udpv6_encap_enable
)(void);
56 void (*ndisc_send_na
)(struct net_device
*dev
, const struct in6_addr
*daddr
,
57 const struct in6_addr
*solicited_addr
,
58 bool router
, bool solicited
, bool override
, bool inc_opt
);
59 #if IS_ENABLED(CONFIG_XFRM)
60 void (*xfrm6_local_rxpmtu
)(struct sk_buff
*skb
, u32 mtu
);
61 int (*xfrm6_udp_encap_rcv
)(struct sock
*sk
, struct sk_buff
*skb
);
62 int (*xfrm6_rcv_encap
)(struct sk_buff
*skb
, int nexthdr
, __be32 spi
,
65 struct neigh_table
*nd_tbl
;
67 extern const struct ipv6_stub
*ipv6_stub __read_mostly
;
69 /* A stub used by bpf helpers. Similarly ugly as ipv6_stub */
70 struct ipv6_bpf_stub
{
71 int (*inet6_bind
)(struct sock
*sk
, struct sockaddr
*uaddr
, int addr_len
,
73 struct sock
*(*udp6_lib_lookup
)(struct net
*net
,
74 const struct in6_addr
*saddr
, __be16 sport
,
75 const struct in6_addr
*daddr
, __be16 dport
,
76 int dif
, int sdif
, struct udp_table
*tbl
,
79 extern const struct ipv6_bpf_stub
*ipv6_bpf_stub __read_mostly
;