#include <linux/netdevice.h>
#include <linux/notifier.h>
#include <linux/export.h>
#include <linux/indirect_call_wrapper.h>
#include <net/fib_rules.h>
#include <net/inet_dscp.h>
#include <net/ipv6.h>
#include <net/addrconf.h>
#include <net/ip6_route.h>
#include <net/netlink.h>
struct fib6_rule { … };
static bool fib6_rule_matchall(const struct fib_rule *rule)
{ … }
bool fib6_rule_default(const struct fib_rule *rule)
{ … }
EXPORT_SYMBOL_GPL(…);
int fib6_rules_dump(struct net *net, struct notifier_block *nb,
struct netlink_ext_ack *extack)
{ … }
unsigned int fib6_rules_seq_read(struct net *net)
{ … }
int fib6_lookup(struct net *net, int oif, struct flowi6 *fl6,
struct fib6_result *res, int flags)
{ … }
struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6,
const struct sk_buff *skb,
int flags, pol_lookup_t lookup)
{ … }
static int fib6_rule_saddr(struct net *net, struct fib_rule *rule, int flags,
struct flowi6 *flp6, const struct net_device *dev)
{ … }
static int fib6_rule_action_alt(struct fib_rule *rule, struct flowi *flp,
int flags, struct fib_lookup_arg *arg)
{ … }
static int __fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
int flags, struct fib_lookup_arg *arg)
{ … }
INDIRECT_CALLABLE_SCOPE int fib6_rule_action(struct fib_rule *rule,
struct flowi *flp, int flags,
struct fib_lookup_arg *arg)
{ … }
INDIRECT_CALLABLE_SCOPE bool fib6_rule_suppress(struct fib_rule *rule,
int flags,
struct fib_lookup_arg *arg)
{ … }
INDIRECT_CALLABLE_SCOPE int fib6_rule_match(struct fib_rule *rule,
struct flowi *fl, int flags)
{ … }
static int fib6_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
struct fib_rule_hdr *frh,
struct nlattr **tb,
struct netlink_ext_ack *extack)
{ … }
static int fib6_rule_delete(struct fib_rule *rule)
{ … }
static int fib6_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh,
struct nlattr **tb)
{ … }
static int fib6_rule_fill(struct fib_rule *rule, struct sk_buff *skb,
struct fib_rule_hdr *frh)
{ … }
static size_t fib6_rule_nlmsg_payload(struct fib_rule *rule)
{ … }
static void fib6_rule_flush_cache(struct fib_rules_ops *ops)
{ … }
static const struct fib_rules_ops __net_initconst fib6_rules_ops_template = …;
static int __net_init fib6_rules_net_init(struct net *net)
{ … }
static void __net_exit fib6_rules_net_exit_batch(struct list_head *net_list)
{ … }
static struct pernet_operations fib6_rules_net_ops = …;
int __init fib6_rules_init(void)
{ … }
void fib6_rules_cleanup(void)
{ … }