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

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

Version: ~ [ linux-5.2-rc4 ] ~ [ linux-5.1.9 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.50 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.125 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.181 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.181 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.68 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ 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 <net/flow.h>
  9 #include <net/rtnetlink.h>
 10 
 11 struct fib_rule {
 12         struct list_head        list;
 13         atomic_t                refcnt;
 14         int                     iifindex;
 15         int                     oifindex;
 16         u32                     mark;
 17         u32                     mark_mask;
 18         u32                     pref;
 19         u32                     flags;
 20         u32                     table;
 21         u8                      action;
 22         u32                     target;
 23         struct fib_rule __rcu   *ctarget;
 24         char                    iifname[IFNAMSIZ];
 25         char                    oifname[IFNAMSIZ];
 26         struct rcu_head         rcu;
 27         struct net *            fr_net;
 28 };
 29 
 30 struct fib_lookup_arg {
 31         void                    *lookup_ptr;
 32         void                    *result;
 33         struct fib_rule         *rule;
 34         int                     flags;
 35 #define FIB_LOOKUP_NOREF        1
 36 };
 37 
 38 struct fib_rules_ops {
 39         int                     family;
 40         struct list_head        list;
 41         int                     rule_size;
 42         int                     addr_size;
 43         int                     unresolved_rules;
 44         int                     nr_goto_rules;
 45 
 46         int                     (*action)(struct fib_rule *,
 47                                           struct flowi *, int,
 48                                           struct fib_lookup_arg *);
 49         int                     (*match)(struct fib_rule *,
 50                                          struct flowi *, int);
 51         int                     (*configure)(struct fib_rule *,
 52                                              struct sk_buff *,
 53                                              struct fib_rule_hdr *,
 54                                              struct nlattr **);
 55         void                    (*delete)(struct fib_rule *);
 56         int                     (*compare)(struct fib_rule *,
 57                                            struct fib_rule_hdr *,
 58                                            struct nlattr **);
 59         int                     (*fill)(struct fib_rule *, struct sk_buff *,
 60                                         struct fib_rule_hdr *);
 61         u32                     (*default_pref)(struct fib_rules_ops *ops);
 62         size_t                  (*nlmsg_payload)(struct fib_rule *);
 63 
 64         /* Called after modifications to the rules set, must flush
 65          * the route cache if one exists. */
 66         void                    (*flush_cache)(struct fib_rules_ops *ops);
 67 
 68         int                     nlgroup;
 69         const struct nla_policy *policy;
 70         struct list_head        rules_list;
 71         struct module           *owner;
 72         struct net              *fro_net;
 73         struct rcu_head         rcu;
 74 };
 75 
 76 #define FRA_GENERIC_POLICY \
 77         [FRA_IIFNAME]   = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
 78         [FRA_OIFNAME]   = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
 79         [FRA_PRIORITY]  = { .type = NLA_U32 }, \
 80         [FRA_FWMARK]    = { .type = NLA_U32 }, \
 81         [FRA_FWMASK]    = { .type = NLA_U32 }, \
 82         [FRA_TABLE]     = { .type = NLA_U32 }, \
 83         [FRA_GOTO]      = { .type = NLA_U32 }
 84 
 85 static inline void fib_rule_get(struct fib_rule *rule)
 86 {
 87         atomic_inc(&rule->refcnt);
 88 }
 89 
 90 static inline void fib_rule_put_rcu(struct rcu_head *head)
 91 {
 92         struct fib_rule *rule = container_of(head, struct fib_rule, rcu);
 93         release_net(rule->fr_net);
 94         kfree(rule);
 95 }
 96 
 97 static inline void fib_rule_put(struct fib_rule *rule)
 98 {
 99         if (atomic_dec_and_test(&rule->refcnt))
100                 call_rcu(&rule->rcu, fib_rule_put_rcu);
101 }
102 
103 static inline u32 frh_get_table(struct fib_rule_hdr *frh, struct nlattr **nla)
104 {
105         if (nla[FRA_TABLE])
106                 return nla_get_u32(nla[FRA_TABLE]);
107         return frh->table;
108 }
109 
110 extern struct fib_rules_ops *fib_rules_register(const struct fib_rules_ops *, struct net *);
111 extern void fib_rules_unregister(struct fib_rules_ops *);
112 
113 extern int                      fib_rules_lookup(struct fib_rules_ops *,
114                                                  struct flowi *, int flags,
115                                                  struct fib_lookup_arg *);
116 extern int                      fib_default_rule_add(struct fib_rules_ops *,
117                                                      u32 pref, u32 table,
118                                                      u32 flags);
119 extern u32                      fib_default_rule_pref(struct fib_rules_ops *ops);
120 #endif
121 

~ [ 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