summaryrefslogtreecommitdiff
path: root/src/basic
diff options
context:
space:
mode:
authorSusant Sahani <ssahani@gmail.com>2018-11-27 10:58:54 +0530
committerSusant Sahani <ssahani@gmail.com>2018-11-28 20:06:28 +0530
commit926062f08345c02d360414feae58c964de2b6415 (patch)
tree010ab395d80fa2c7cc092fd87428fd9c4769c684 /src/basic
parent59a2a18e27435ed00741fc8703e19866de37e3d3 (diff)
downloadsystemd-926062f08345c02d360414feae58c964de2b6415.tar.gz
networkd: add support to configure ip rule port range and protocol.
Please see: iprule: support for ip_proto, sport and dport match options https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=f686f764682745daf6a93b0a6330ba42a961f858 Closes 10622
Diffstat (limited to 'src/basic')
-rw-r--r--src/basic/missing.h18
-rw-r--r--src/basic/parse-util.c20
-rw-r--r--src/basic/parse-util.h1
3 files changed, 37 insertions, 2 deletions
diff --git a/src/basic/missing.h b/src/basic/missing.h
index c0c1d40665..99a463b7b6 100644
--- a/src/basic/missing.h
+++ b/src/basic/missing.h
@@ -9,6 +9,7 @@
#include <linux/audit.h>
#include <linux/capability.h>
#include <linux/falloc.h>
+#include <linux/fib_rules.h>
#include <linux/if_link.h>
#include <linux/input.h>
#include <linux/loop.h>
@@ -988,7 +989,7 @@ struct input_mask {
#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
#endif
-#if !HAVE_FRA_UID_RANGE
+#if !HAVE_FRA_DPORT_RANGE
#define FRA_UNSPEC 0
#define FRA_DST 1
#define FRA_SRC 2
@@ -1010,7 +1011,11 @@ struct input_mask {
#define FRA_PAD 18
#define FRA_L3MDEV 19
#define FRA_UID_RANGE 20
-#define __FRA_MAX 12
+#define FRA_PROTOCOL 21
+#define FRA_IP_PROTO 22
+#define FRA_SPORT_RANGE 23
+#define FRA_DPORT_RANGE 24
+#define __FRA_MAX 25
#define FRA_MAX (__FRA_MAX - 1)
#endif
@@ -1311,6 +1316,15 @@ struct fib_rule_uid_range {
#endif
+#if ! HAVE_STRUCT_FIB_RULE_PORT_RANGE
+
+struct fib_rule_port_range {
+ __u16 start;
+ __u16 end;
+};
+
+#endif
+
#endif
#ifndef SOL_ALG
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
index a9085348b5..ce8bb12670 100644
--- a/src/basic/parse-util.c
+++ b/src/basic/parse-util.c
@@ -710,6 +710,26 @@ int parse_ip_port(const char *s, uint16_t *ret) {
return 0;
}
+int parse_ip_port_range(const char *s, uint16_t *low, uint16_t *high) {
+ unsigned l, h;
+ int r;
+
+ r = parse_range(s, &l, &h);
+ if (r < 0)
+ return r;
+
+ if (l <= 0 || l > 65535 || h <= 0 || h > 65535)
+ return -EINVAL;
+
+ if (h < l)
+ return -EINVAL;
+
+ *low = l;
+ *high = h;
+
+ return 0;
+}
+
int parse_dev(const char *s, dev_t *ret) {
unsigned x, y;
dev_t d;
diff --git a/src/basic/parse-util.h b/src/basic/parse-util.h
index f3267f4cfe..e47641b429 100644
--- a/src/basic/parse-util.h
+++ b/src/basic/parse-util.h
@@ -115,5 +115,6 @@ int parse_permille(const char *p);
int parse_nice(const char *p, int *ret);
int parse_ip_port(const char *s, uint16_t *ret);
+int parse_ip_port_range(const char *s, uint16_t *low, uint16_t *high);
int parse_oom_score_adjust(const char *s, int *ret);