mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
net: fib_rules: support for match on ip_proto, sport and dport
uapi for ip_proto, sport and dport range match in fib rules. Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2927499157
commit
bfff486265
3 changed files with 133 additions and 3 deletions
|
@ -27,7 +27,7 @@ struct fib_rule {
|
|||
u8 action;
|
||||
u8 l3mdev;
|
||||
u8 proto;
|
||||
/* 1 byte hole, try to use */
|
||||
u8 ip_proto;
|
||||
u32 target;
|
||||
__be64 tun_id;
|
||||
struct fib_rule __rcu *ctarget;
|
||||
|
@ -40,6 +40,8 @@ struct fib_rule {
|
|||
char iifname[IFNAMSIZ];
|
||||
char oifname[IFNAMSIZ];
|
||||
struct fib_kuid_range uid_range;
|
||||
struct fib_rule_port_range sport_range;
|
||||
struct fib_rule_port_range dport_range;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
|
@ -144,6 +146,38 @@ static inline u32 frh_get_table(struct fib_rule_hdr *frh, struct nlattr **nla)
|
|||
return frh->table;
|
||||
}
|
||||
|
||||
static inline bool fib_rule_port_range_set(const struct fib_rule_port_range *range)
|
||||
{
|
||||
return range->start != 0 && range->end != 0;
|
||||
}
|
||||
|
||||
static inline bool fib_rule_port_inrange(const struct fib_rule_port_range *a,
|
||||
__be16 port)
|
||||
{
|
||||
return ntohs(port) >= a->start &&
|
||||
ntohs(port) <= a->end;
|
||||
}
|
||||
|
||||
static inline bool fib_rule_port_range_valid(const struct fib_rule_port_range *a)
|
||||
{
|
||||
return a->start != 0 && a->end != 0 && a->end < 0xffff &&
|
||||
a->start <= a->end;
|
||||
}
|
||||
|
||||
static inline bool fib_rule_port_range_compare(struct fib_rule_port_range *a,
|
||||
struct fib_rule_port_range *b)
|
||||
{
|
||||
return a->start == b->start &&
|
||||
a->end == b->end;
|
||||
}
|
||||
|
||||
static inline bool fib_rule_requires_fldissect(struct fib_rule *rule)
|
||||
{
|
||||
return rule->ip_proto ||
|
||||
fib_rule_port_range_set(&rule->sport_range) ||
|
||||
fib_rule_port_range_set(&rule->dport_range);
|
||||
}
|
||||
|
||||
struct fib_rules_ops *fib_rules_register(const struct fib_rules_ops *,
|
||||
struct net *);
|
||||
void fib_rules_unregister(struct fib_rules_ops *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue