summaryrefslogtreecommitdiff
path: root/system-linux.c
diff options
context:
space:
mode:
authorMatthew Hagan <mnhagan88@gmail.com>2022-01-16 00:21:17 +0000
committerHans Dedecker <dedeckeh@gmail.com>2022-01-22 21:24:16 +0100
commited7187684685430ee6de49e551775badbee39761 (patch)
tree70161fb2b0d0969a8f7cf10d49478ff3c439b737 /system-linux.c
parent3043206e94da412eb19dd72ea68edcaca545d84c (diff)
downloadnetifd-ed7187684685430ee6de49e551775badbee39761.tar.gz
iprule: add support for uidrange
Allow for per-user routing policies via the uidrange iprule option. Option allows for a single UID or range of UIDs. Signed-off-by: Matthew Hagan <mnhagan88@gmail.com> Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'system-linux.c')
-rw-r--r--system-linux.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/system-linux.c b/system-linux.c
index 654f2ac..9846e98 100644
--- a/system-linux.c
+++ b/system-linux.c
@@ -2954,6 +2954,15 @@ static int system_iprule(struct iprule *rule, int cmd)
if (rule->flags & IPRULE_SUP_PREFIXLEN)
nla_put_u32(msg, FRA_SUPPRESS_PREFIXLEN, rule->sup_prefixlen);
+ if (rule->flags & IPRULE_UIDRANGE) {
+ struct fib_rule_uid_range uidrange = {
+ .start = rule->uidrange_start,
+ .end = rule->uidrange_end
+ };
+
+ nla_put(msg, FRA_UID_RANGE, sizeof(uidrange), &uidrange);
+ }
+
if (rule->flags & IPRULE_GOTO)
nla_put_u32(msg, FRA_GOTO, rule->gotoid);