From: Zbigniew Jędrzejewski-Szmek Date: Mon, 27 Nov 2017 11:51:08 +0000 (+0000) Subject: networkd: fix serialization of {Incoming,Outgoing}Interface X-Git-Tag: v236~102^2~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9491f55f74a1c61a8c6c79c3ef16a32f2722e232;p=thirdparty%2Fsystemd.git networkd: fix serialization of {Incoming,Outgoing}Interface Let's just say that the code wasn't fully functional ;( Since we only had the parser for serialization, and not the writer, we are free to change the format. So while at it, let's use shorter names in the serialization format that match the surrounding style. --- 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; }