]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
expr: nat: add helper function to translate nat types to string
authorArturo Borrero <arturo.borrero.glez@gmail.com>
Fri, 20 Jun 2014 08:55:08 +0000 (10:55 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 23 Jun 2014 18:05:20 +0000 (20:05 +0200)
This patch adds a helper functon to translate nat types to string.

Signed-off-by: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/expr/nat.c

index 0136fca7556d5df8982c7f24908731fdef79722a..c719b6ccbef7f5c5eba3bc7cfe6fc994a2cca4c8 100644 (file)
@@ -184,6 +184,18 @@ nft_rule_expr_nat_build(struct nlmsghdr *nlh, struct nft_rule_expr *e)
                                 htonl(nat->sreg_proto_max));
 }
 
+static inline const char *nft_nat2str(uint16_t nat)
+{
+       switch (nat) {
+       case NFT_NAT_SNAT:
+               return "snat";
+       case NFT_NAT_DNAT:
+               return "dnat";
+       default:
+               return "unknown";
+       }
+}
+
 static inline int nft_str2nat(const char *nat)
 {
        if (strcmp(nat, "snat") == 0)
@@ -304,11 +316,8 @@ nft_rule_expr_nat_snprintf_json(char *buf, size_t size,
        struct nft_expr_nat *nat = nft_expr_data(e);
        int len = size, offset = 0, ret = 0;
 
-       if (nat->type == NFT_NAT_SNAT)
-               ret = snprintf(buf, len, "\"nat_type\":\"snat\",");
-       else if (nat->type == NFT_NAT_DNAT)
-               ret = snprintf(buf, len, "\"nat_type\":\"dnat\",");
-
+       ret = snprintf(buf, len, "\"nat_type\":\"%s\",",
+                      nft_nat2str(nat->type));
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        ret = snprintf(buf+offset, len, "\"family\":\"%s\",",
@@ -340,14 +349,7 @@ nft_rule_expr_nat_snprintf_xml(char *buf, size_t size,
        struct nft_expr_nat *nat = nft_expr_data(e);
        int len = size, offset = 0, ret = 0;
 
-       /* 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>");
-
+       ret = snprintf(buf, len, "<type>%s</type>", nft_nat2str(nat->type));
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        ret = snprintf(buf+offset, len, "<family>%s</family>",
@@ -380,16 +382,8 @@ nft_rule_expr_nat_snprintf_default(char *buf, size_t size,
        struct nft_expr_nat *nat = nft_expr_data(e);
        int len = size, offset = 0, ret = 0;
 
-       switch (nat->type) {
-       case NFT_NAT_SNAT:
-               ret = snprintf(buf, len, "snat ");
-               SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
-               break;
-       case NFT_NAT_DNAT:
-               ret = snprintf(buf, len, "dnat ");
-               SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
-               break;
-       }
+       ret = snprintf(buf, len, "%s ", nft_nat2str(nat->type));
+       SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        ret = snprintf(buf+offset, len, "%s ", nft_family2str(nat->family));
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);