summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid Ahern <dsa@cumulusnetworks.com>2018-03-14 00:17:25 (GMT)
committerThomas Haller <thaller@redhat.com>2018-04-06 12:54:12 (GMT)
commit961c4f675054cf605c71e533e77528035d38b2a1 (patch)
treeab3d37f6a5e1eb5f6d69ded0d6ed6a0fad82dc32 /include
parentfc4880fa5b5d0e81f7e4246c3049124835eda158 (diff)
downloadlibnl-961c4f675054cf605c71e533e77528035d38b2a1.zip
libnl-961c4f675054cf605c71e533e77528035d38b2a1.tar.gz
libnl-961c4f675054cf605c71e533e77528035d38b2a1.tar.bz2
rule: Add support for protocol and port ranges
Add support for recent fib rule features - specifying a protocol that installed a rule and an IP protocol plus port range for rules. Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Diffstat (limited to 'include')
-rw-r--r--include/netlink-private/types.h6
-rw-r--r--include/netlink/route/rule.h16
2 files changed, 22 insertions, 0 deletions
diff --git a/include/netlink-private/types.h b/include/netlink-private/types.h
index 35c9689..db03192 100644
--- a/include/netlink-private/types.h
+++ b/include/netlink-private/types.h
@@ -31,6 +31,7 @@
#include <linux/tc_act/tc_skbedit.h>
#include <linux/tc_act/tc_gact.h>
#include <linux/sock_diag.h>
+#include <linux/fib_rules.h>
#define NL_SOCK_PASSCRED (1<<1)
#define NL_OWN_PORT (1<<2)
@@ -358,6 +359,8 @@ struct rtnl_rule
uint8_t r_action;
uint8_t r_dsfield; /* ipv4 only */
uint8_t r_l3mdev;
+ uint8_t r_protocol; /* protocol that installed rule */
+ uint8_t r_ip_proto; /* IP/IPv6 protocol */
uint32_t r_table;
uint32_t r_flags;
uint32_t r_prio;
@@ -369,6 +372,9 @@ struct rtnl_rule
struct nl_addr *r_dst;
char r_iifname[IFNAMSIZ];
char r_oifname[IFNAMSIZ];
+
+ struct fib_rule_port_range r_sport;
+ struct fib_rule_port_range r_dport;
};
struct rtnl_neightbl_parms
diff --git a/include/netlink/route/rule.h b/include/netlink/route/rule.h
index 7aee8d2..d0c335f 100644
--- a/include/netlink/route/rule.h
+++ b/include/netlink/route/rule.h
@@ -69,6 +69,22 @@ extern void rtnl_rule_set_goto(struct rtnl_rule *, uint32_t);
extern uint32_t rtnl_rule_get_goto(struct rtnl_rule *);
extern void rtnl_rule_set_l3mdev(struct rtnl_rule *, int);
extern int rtnl_rule_get_l3mdev(struct rtnl_rule *);
+extern int rtnl_rule_set_protocol(struct rtnl_rule *, uint8_t);
+extern int rtnl_rule_get_protocol(struct rtnl_rule *, uint8_t *);
+extern int rtnl_rule_set_ipproto(struct rtnl_rule *, uint8_t);
+extern int rtnl_rule_get_ipproto(struct rtnl_rule *, uint8_t *);
+extern int rtnl_rule_set_sport(struct rtnl_rule *, uint16_t start);
+extern int rtnl_rule_set_sport_range(struct rtnl_rule *,
+ uint16_t start,
+ uint16_t end);
+extern int rtnl_rule_get_sport(struct rtnl_rule *, uint16_t *start,
+ uint16_t *end);
+extern int rtnl_rule_set_dport(struct rtnl_rule *, uint16_t start);
+extern int rtnl_rule_set_dport_range(struct rtnl_rule *,
+ uint16_t start,
+ uint16_t end);
+extern int rtnl_rule_get_dport(struct rtnl_rule *, uint16_t *start,
+ uint16_t *end);
#ifdef __cplusplus
}