Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/ipv4/fib_lookup.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef _FIB_LOOKUP_H
3
#define _FIB_LOOKUP_H
4
5
#include <linux/types.h>
6
#include <linux/list.h>
7
#include <net/inet_dscp.h>
8
#include <net/ip_fib.h>
9
#include <net/nexthop.h>
10
11
struct fib_alias {
12
struct hlist_node fa_list;
13
struct fib_info *fa_info;
14
dscp_t fa_dscp;
15
u8 fa_type;
16
u8 fa_state;
17
u8 fa_slen;
18
u32 tb_id;
19
s16 fa_default;
20
u8 offload;
21
u8 trap;
22
u8 offload_failed;
23
struct rcu_head rcu;
24
};
25
26
#define FA_S_ACCESSED 0x01
27
28
/* Don't write on fa_state unless needed, to keep it shared on all cpus */
29
static inline void fib_alias_accessed(struct fib_alias *fa)
30
{
31
if (!(fa->fa_state & FA_S_ACCESSED))
32
fa->fa_state |= FA_S_ACCESSED;
33
}
34
35
/* Exported by fib_semantics.c */
36
void fib_release_info(struct fib_info *);
37
struct fib_info *fib_create_info(struct fib_config *cfg,
38
struct netlink_ext_ack *extack);
39
int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi,
40
struct netlink_ext_ack *extack);
41
bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi);
42
int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
43
const struct fib_rt_info *fri, unsigned int flags);
44
void rtmsg_fib(int event, __be32 key, struct fib_alias *fa, int dst_len,
45
u32 tb_id, const struct nl_info *info, unsigned int nlm_flags);
46
size_t fib_nlmsg_size(struct fib_info *fi);
47
48
static inline void fib_result_assign(struct fib_result *res,
49
struct fib_info *fi)
50
{
51
/* we used to play games with refcounts, but we now use RCU */
52
res->fi = fi;
53
res->nhc = fib_info_nhc(fi, 0);
54
}
55
56
struct fib_prop {
57
int error;
58
u8 scope;
59
};
60
61
extern const struct fib_prop fib_props[RTN_MAX + 1];
62
63
#endif /* _FIB_LOOKUP_H */
64
65