diff options
author | Susant Sahani <ssahani@gmail.com> | 2018-11-27 10:58:54 +0530 |
---|---|---|
committer | Susant Sahani <ssahani@gmail.com> | 2018-11-28 20:06:28 +0530 |
commit | 926062f08345c02d360414feae58c964de2b6415 (patch) | |
tree | 010ab395d80fa2c7cc092fd87428fd9c4769c684 /src/basic | |
parent | 59a2a18e27435ed00741fc8703e19866de37e3d3 (diff) | |
download | systemd-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.h | 18 | ||||
-rw-r--r-- | src/basic/parse-util.c | 20 | ||||
-rw-r--r-- | src/basic/parse-util.h | 1 |
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); |