2019-03-22 16:06:09 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifndef _IPV6_STUBS_H
# define _IPV6_STUBS_H
# include <linux/in6.h>
# include <linux/netdevice.h>
# include <linux/skbuff.h>
# include <net/dst.h>
# include <net/flow.h>
# include <net/neighbour.h>
# include <net/sock.h>
/* structs from net/ip6_fib.h */
struct fib6_info ;
2019-04-06 02:30:24 +03:00
struct fib6_nh ;
struct fib6_config ;
2019-04-17 00:35:59 +03:00
struct fib6_result ;
2019-03-22 16:06:09 +03:00
/* This is ugly, ideally these symbols should be built
* into the core kernel .
*/
struct ipv6_stub {
int ( * ipv6_sock_mc_join ) ( struct sock * sk , int ifindex ,
const struct in6_addr * addr ) ;
int ( * ipv6_sock_mc_drop ) ( struct sock * sk , int ifindex ,
const struct in6_addr * addr ) ;
int ( * ipv6_dst_lookup ) ( struct net * net , struct sock * sk ,
struct dst_entry * * dst , struct flowi6 * fl6 ) ;
int ( * ipv6_route_input ) ( struct sk_buff * skb ) ;
struct fib6_table * ( * fib6_get_table ) ( struct net * net , u32 id ) ;
2019-04-17 00:36:10 +03:00
int ( * fib6_lookup ) ( struct net * net , int oif , struct flowi6 * fl6 ,
struct fib6_result * res , int flags ) ;
int ( * fib6_table_lookup ) ( struct net * net , struct fib6_table * table ,
int oif , struct flowi6 * fl6 ,
struct fib6_result * res , int flags ) ;
2019-04-17 00:35:59 +03:00
void ( * fib6_select_path ) ( const struct net * net , struct fib6_result * res ,
struct flowi6 * fl6 , int oif , bool oif_match ,
const struct sk_buff * skb , int strict ) ;
2019-04-17 00:36:06 +03:00
u32 ( * ip6_mtu_from_fib6 ) ( const struct fib6_result * res ,
const struct in6_addr * daddr ,
const struct in6_addr * saddr ) ;
2019-03-22 16:06:09 +03:00
2019-04-06 02:30:24 +03:00
int ( * fib6_nh_init ) ( struct net * net , struct fib6_nh * fib6_nh ,
struct fib6_config * cfg , gfp_t gfp_flags ,
struct netlink_ext_ack * extack ) ;
void ( * fib6_nh_release ) ( struct fib6_nh * fib6_nh ) ;
2019-05-22 22:04:40 +03:00
void ( * fib6_update_sernum ) ( struct net * net , struct fib6_info * rt ) ;
2019-05-22 22:04:39 +03:00
int ( * ip6_del_rt ) ( struct net * net , struct fib6_info * rt ) ;
2019-03-22 16:06:09 +03:00
void ( * udpv6_encap_enable ) ( void ) ;
void ( * ndisc_send_na ) ( struct net_device * dev , const struct in6_addr * daddr ,
const struct in6_addr * solicited_addr ,
bool router , bool solicited , bool override , bool inc_opt ) ;
struct neigh_table * nd_tbl ;
} ;
extern const struct ipv6_stub * ipv6_stub __read_mostly ;
/* A stub used by bpf helpers. Similarly ugly as ipv6_stub */
struct ipv6_bpf_stub {
int ( * inet6_bind ) ( struct sock * sk , struct sockaddr * uaddr , int addr_len ,
bool force_bind_address_no_port , bool with_lock ) ;
struct sock * ( * udp6_lib_lookup ) ( struct net * net ,
const struct in6_addr * saddr , __be16 sport ,
const struct in6_addr * daddr , __be16 dport ,
int dif , int sdif , struct udp_table * tbl ,
struct sk_buff * skb ) ;
} ;
extern const struct ipv6_bpf_stub * ipv6_bpf_stub __read_mostly ;
# endif