diff options
Diffstat (limited to 'src/expr/nat.c')
-rw-r--r-- | src/expr/nat.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/expr/nat.c b/src/expr/nat.c index 2061618..e838317 100644 --- a/src/expr/nat.c +++ b/src/expr/nat.c @@ -237,9 +237,9 @@ static int nft_rule_expr_nat_xml_parse(struct nft_rule_expr *e, char *xml) return -1; } - if (strcmp(node->child->value.opaque, "NFT_NAT_SNAT") == 0) { + if (strcmp(node->child->value.opaque, "snat") == 0) { nat->type = NFT_NAT_SNAT; - } else if (strcmp(node->child->value.opaque, "NFT_NAT_DNAT") == 0) { + } else if (strcmp(node->child->value.opaque, "dnat") == 0) { nat->type = NFT_NAT_DNAT; } else { mxmlDelete(tree); @@ -334,18 +334,15 @@ nft_rule_expr_nat_snprintf_xml(char *buf, size_t size, struct nft_expr_nat *nat = (struct nft_expr_nat *)e->data; int len = size, offset = 0, ret = 0; - switch (nat->type) { - case NFT_NAT_SNAT: - ret = snprintf(buf, len, - "<type>NFT_NAT_SNAT</type>"); - SNPRINTF_BUFFER_SIZE(ret, size, len, offset); - break; - case NFT_NAT_DNAT: - ret = snprintf(buf, len, - "<type>NFT_NAT_DNAT</type>"); - SNPRINTF_BUFFER_SIZE(ret, size, len, offset); - break; - } + /* Is a mandatory element. Provide a default, even empty */ + if (nat->type == NFT_NAT_SNAT) + ret = snprintf(buf, len, "<type>snat</type>"); + else if (nat->type == NFT_NAT_DNAT) + ret = snprintf(buf, len, "<type>dnat</type>"); + else + ret = snprintf(buf, len, "<type>unknown</type>"); + + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); ret = snprintf(buf+offset, len, "<family>%s</family>", nft_family2str(nat->family)); |