diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index 09c1015f2ca..20f748944ea 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -905,6 +905,20 @@ int routing_policy_serialize_rules(Set *rules, FILE *f) { space = true; } + if (rule->iif) { + fprintf(f, "%siif=%s", + space ? " " : "", + rule->iif); + space = true; + } + + if (rule->oif) { + fprintf(f, "%soif=%s", + space ? " " : "", + rule->oif); + space = true; + } + fprintf(f, "%stable=%"PRIu32 "\n", space ? " " : "", rule->table); @@ -1001,14 +1015,14 @@ int routing_policy_load_rules(const char *state_file, Set **rules) { log_error_errno(r, "Failed to parse RPDB rule firewall mark or mask, ignoring: %s", a); continue; } - } else if (streq(a, "IncomingInterface")) { + } else if (streq(a, "iif")) { - rule->iif = strdup(a); + rule->iif = strdup(b); if (!rule->iif) return log_oom(); - } else if (streq(a, "OutgoingInterface")) { + } else if (streq(a, "oif")) { - rule->oif = strdup(a); + rule->oif = strdup(b); if (!rule->oif) return log_oom(); } diff --git a/src/network/test-routing-policy-rule.c b/src/network/test-routing-policy-rule.c index a4c568e325b..c619dbc1594 100644 --- a/src/network/test-routing-policy-rule.c +++ b/src/network/test-routing-policy-rule.c @@ -89,5 +89,12 @@ int main(int argc, char **argv) { test_rule_serialization("default table", "RULE=from=1::2/64 to=2::3/64", p); + test_rule_serialization("incoming interface", + "RULE=from=1::2/64 to=2::3/64 table=1 iif=lo", + "RULE=from=1::2/64 to=2::3/64 iif=lo table=1"); + + test_rule_serialization("outgoing interface", + "RULE=from=1::2/64 to=2::3/64 oif=eth0 table=1", NULL); + return 0; }