~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/net/fib_rules.h

Version: ~ [ linux-5.13-rc2 ] ~ [ linux-5.12.4 ] ~ [ linux-5.11.21 ] ~ [ linux-5.10.37 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.119 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.190 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.232 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.268 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.268 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef __NET_FIB_RULES_H
  2 #define __NET_FIB_RULES_H
  3 
  4 #include <linux/types.h>
  5 #include <linux/slab.h>
  6 #include <linux/netdevice.h>
  7 #include <linux/fib_rules.h>
  8 #include <linux/refcount.h>
  9 #include <net/flow.h>
 10 #include <net/rtnetlink.h>
 11 
 12 struct fib_kuid_range {
 13         kuid_t start;
 14         kuid_t end;
 15 };
 16 
 17 struct fib_rule {
 18         struct list_head        list;
 19         int                     iifindex;
 20         int                     oifindex;
 21         u32                     mark;
 22         u32                     mark_mask;
 23         u32                     flags;
 24         u32                     table;
 25         u8                      action;
 26         u8                      l3mdev;
 27         /* 2 bytes hole, try to use */
 28         u32                     target;
 29         __be64                  tun_id;
 30         struct fib_rule __rcu   *ctarget;
 31         struct net              *fr_net;
 32 
 33         refcount_t              refcnt;
 34         u32                     pref;
 35         int                     suppress_ifgroup;
 36         int                     suppress_prefixlen;
 37         char                    iifname[IFNAMSIZ];
 38         char                    oifname[IFNAMSIZ];
 39         struct fib_kuid_range   uid_range;
 40         struct rcu_head         rcu;
 41 };
 42 
 43 struct fib_lookup_arg {
 44         void                    *lookup_ptr;
 45         void                    *result;
 46         struct fib_rule         *rule;
 47         u32                     table;
 48         int                     flags;
 49 #define FIB_LOOKUP_NOREF                1
 50 #define FIB_LOOKUP_IGNORE_LINKSTATE     2
 51 };
 52 
 53 struct fib_rules_ops {
 54         int                     family;
 55         struct list_head        list;
 56         int                     rule_size;
 57         int                     addr_size;
 58         int                     unresolved_rules;
 59         int                     nr_goto_rules;
 60 
 61         int                     (*action)(struct fib_rule *,
 62                                           struct flowi *, int,
 63                                           struct fib_lookup_arg *);
 64         bool                    (*suppress)(struct fib_rule *,
 65                                             struct fib_lookup_arg *);
 66         int                     (*match)(struct fib_rule *,
 67                                          struct flowi *, int);
 68         int                     (*configure)(struct fib_rule *,
 69                                              struct sk_buff *,
 70                                              struct fib_rule_hdr *,
 71                                              struct nlattr **);
 72         int                     (*delete)(struct fib_rule *);
 73         int                     (*compare)(struct fib_rule *,
 74                                            struct fib_rule_hdr *,
 75                                            struct nlattr **);
 76         int                     (*fill)(struct fib_rule *, struct sk_buff *,
 77                                         struct fib_rule_hdr *);
 78         size_t                  (*nlmsg_payload)(struct fib_rule *);
 79 
 80         /* Called after modifications to the rules set, must flush
 81          * the route cache if one exists. */
 82         void                    (*flush_cache)(struct fib_rules_ops *ops);
 83 
 84         int                     nlgroup;
 85         const struct nla_policy *policy;
 86         struct list_head        rules_list;
 87         struct module           *owner;
 88         struct net              *fro_net;
 89         struct rcu_head         rcu;
 90 };
 91 
 92 #define FRA_GENERIC_POLICY \
 93         [FRA_IIFNAME]   = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
 94         [FRA_OIFNAME]   = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
 95         [FRA_PRIORITY]  = { .type = NLA_U32 }, \
 96         [FRA_FWMARK]    = { .type = NLA_U32 }, \
 97         [FRA_FWMASK]    = { .type = NLA_U32 }, \
 98         [FRA_TABLE]     = { .type = NLA_U32 }, \
 99         [FRA_SUPPRESS_PREFIXLEN] = { .type = NLA_U32 }, \
100         [FRA_SUPPRESS_IFGROUP] = { .type = NLA_U32 }, \
101         [FRA_GOTO]      = { .type = NLA_U32 }, \
102         [FRA_L3MDEV]    = { .type = NLA_U8 }, \
103         [FRA_UID_RANGE] = { .len = sizeof(struct fib_rule_uid_range) }
104 
105 static inline void fib_rule_get(struct fib_rule *rule)
106 {
107         refcount_inc(&rule->refcnt);
108 }
109 
110 static inline void fib_rule_put(struct fib_rule *rule)
111 {
112         if (refcount_dec_and_test(&rule->refcnt))
113                 kfree_rcu(rule, rcu);
114 }
115 
116 #ifdef CONFIG_NET_L3_MASTER_DEV
117 static inline u32 fib_rule_get_table(struct fib_rule *rule,
118                                      struct fib_lookup_arg *arg)
119 {
120         return rule->l3mdev ? arg->table : rule->table;
121 }
122 #else
123 static inline u32 fib_rule_get_table(struct fib_rule *rule,
124                                      struct fib_lookup_arg *arg)
125 {
126         return rule->table;
127 }
128 #endif
129 
130 static inline u32 frh_get_table(struct fib_rule_hdr *frh, struct nlattr **nla)
131 {
132         if (nla[FRA_TABLE])
133                 return nla_get_u32(nla[FRA_TABLE]);
134         return frh->table;
135 }
136 
137 struct fib_rules_ops *fib_rules_register(const struct fib_rules_ops *,
138                                          struct net *);
139 void fib_rules_unregister(struct fib_rules_ops *);
140 
141 int fib_rules_lookup(struct fib_rules_ops *, struct flowi *, int flags,
142                      struct fib_lookup_arg *);
143 int fib_default_rule_add(struct fib_rules_ops *, u32 pref, u32 table,
144                          u32 flags);
145 bool fib_rule_matchall(const struct fib_rule *rule);
146 
147 int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh,
148                    struct netlink_ext_ack *extack);
149 int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh,
150                    struct netlink_ext_ack *extack);
151 #endif
152 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp