]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
src: improve default text output
authorGiuseppe Longo <giuseppelng@gmail.com>
Fri, 5 Jul 2013 08:06:28 +0000 (10:06 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 5 Jul 2013 11:06:23 +0000 (13:06 +0200)
This patch improves default plain text output by mimicing the
default output of libnl-nft.

While at it, several %lu has been translated to use %"PRIu64"
for correctness.

[ I have added the policy to string translation --pablo ]

Signed-off-by: Giuseppe Longo <giuseppelng@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
21 files changed:
src/chain.c
src/expr/bitwise.c
src/expr/byteorder.c
src/expr/cmp.c
src/expr/counter.c
src/expr/ct.c
src/expr/data_reg.c
src/expr/exthdr.c
src/expr/immediate.c
src/expr/limit.c
src/expr/log.c
src/expr/lookup.c
src/expr/match.c
src/expr/meta.c
src/expr/nat.c
src/expr/payload.c
src/expr/target.c
src/rule.c
src/set.c
src/set_elem.c
src/table.c

index 68744bc229702a5026fce000ae5b712d2e2c58d4..bdbaf60e86352ca44259af786016d71772c25a24 100644 (file)
@@ -18,6 +18,7 @@
 #include <string.h>
 #include <netinet/in.h>
 #include <errno.h>
+#include <inttypes.h>
 
 #include <libmnl/libmnl.h>
 #include <linux/netfilter/nfnetlink.h>
@@ -721,9 +722,9 @@ static int nft_chain_snprintf_json(char *buf, size_t size, struct nft_chain *c)
        return snprintf(buf, size,
                "{ \"chain\": {"
                        "\"name\": \"%s\","
-                       "\"handle\": %lu,"
-                       "\"bytes\": %lu,"
-                       "\"packets\": %lu,"
+                       "\"handle\": %"PRIu64","
+                       "\"bytes\": %"PRIu64","
+                       "\"packets\": %"PRIu64","
                        "\"version\": %d,"
                        "\"properties\": {"
                                "\"type\" : \"%s\","
@@ -747,8 +748,8 @@ static int nft_chain_snprintf_xml(char *buf, size_t size, struct nft_chain *c)
        int ret, len = size, offset = 0;
 
        ret = snprintf(buf, size,
-                      "<chain name=\"%s\" handle=\"%lu\""
-                      " bytes=\"%lu\" packets=\"%lu\" version=\"%d\">"
+                      "<chain name=\"%s\" handle=\"%"PRIu64"\""
+                      " bytes=\"%"PRIu64"\" packets=\"%"PRIu64"\" version=\"%d\">"
                       "<properties>"
                                "<type>%s</type>"
                                "<table>%s</table>"
@@ -779,15 +780,39 @@ static int nft_chain_snprintf_xml(char *buf, size_t size, struct nft_chain *c)
        return offset;
 }
 
+static const char *policy2str(int policy)
+{
+       switch (policy) {
+       case NF_ACCEPT:
+               return "accept";
+       case NF_DROP:
+               return "drop";
+       default:
+               break;
+       }
+       return "unknown";
+}
+
 static int nft_chain_snprintf_default(char *buf, size_t size,
                                      struct nft_chain *c)
 {
-       return snprintf(buf, size, "family=%s table=%s chain=%s type=%s "
-                                  "hook=%u prio=%d policy=%d use=%d "
-                                  "packets=%lu bytes=%lu",
-                       nft_family2str(c->family), c->table, c->name, c->type,
-                       c->hooknum, c->prio, c->policy, c->use, c->packets,
-                       c->bytes);
+       int ret, len = size, offset = 0;
+
+       ret = snprintf(buf, size, "%s %s %s",
+                       nft_family2str(c->family), c->table, c->name);
+       SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+       if (c->flags & (1 << NFT_CHAIN_ATTR_HOOKNUM)) {
+               ret = snprintf(buf+offset, size,
+                              " type %s hook %s prio %d policy %s use %d "
+                              "packets %"PRIu64" bytes %"PRIu64"",
+                              c->type, hooknum2str_array[c->hooknum], c->prio,
+                              policy2str(c->policy), c->use,
+                              c->packets, c->bytes);
+               SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+       }
+
+       return offset;
 }
 
 int nft_chain_snprintf(char *buf, size_t size, struct nft_chain *c,
index 6b534b49ee356f83d6ee9403e0b0a6c0d5fca873..e9176cd0468624d741af80aaf20e1c28ad3874d6 100644 (file)
@@ -337,18 +337,15 @@ nft_rule_expr_bitwise_snprintf_default(char *buf, size_t size,
 {
        int len = size, offset = 0, ret;
 
-       ret = snprintf(buf, len, "sreg=%u dreg=%u ",
-                      bitwise->sreg, bitwise->dreg);
-       SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
-
-       ret = snprintf(buf+offset, len, " mask=");
+       ret = snprintf(buf, len, "reg %u = (reg=%u & ",
+                      bitwise->dreg, bitwise->sreg);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        ret = nft_data_reg_snprintf(buf+offset, len, &bitwise->mask,
                                    NFT_RULE_O_DEFAULT, 0, DATA_VALUE);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
-       ret = snprintf(buf+offset, len, " xor=");
+       ret = snprintf(buf+offset, len, ") ^ ");
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        ret = nft_data_reg_snprintf(buf+offset, len, &bitwise->xor,
index 8813546bf76313de9cb678171124b82aaa46016a..1e6a51b13de60ed7732d17af8df868d951e2a7b2 100644 (file)
@@ -315,10 +315,9 @@ nft_rule_expr_byteorder_snprintf_default(char *buf, size_t size,
 {
        int len = size, offset = 0, ret;
 
-       ret = snprintf(buf, len, "sreg=%u dreg=%u op=%s len=%u size=%u ",
-                      byteorder->sreg, byteorder->dreg,
-                      expr_byteorder_str[byteorder->op],
-                      byteorder->len, byteorder->size);
+       ret = snprintf(buf, len, "reg %u = %s(reg %u, %u, %u) ",
+                      byteorder->dreg, expr_byteorder_str[byteorder->op],
+                      byteorder->sreg, byteorder->size, byteorder->len);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        return offset;
index f3a363a450a99b3a9c263860b0aec1b1ca9bd85e..2115839deb6e38b89eab0c53926c9c8c6a2832a7 100644 (file)
@@ -277,8 +277,8 @@ nft_rule_expr_cmp_snprintf_default(char *buf, size_t size,
 {
        int len = size, offset = 0, ret;
 
-       ret = snprintf(buf, len, "sreg=%u op=%s data=",
-                      cmp->sreg, expr_cmp_str[cmp->op]);
+       ret = snprintf(buf, len, "%s reg %u ",
+                      expr_cmp_str[cmp->op], cmp->sreg);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        ret = nft_data_reg_snprintf(buf+offset, len, &cmp->data,
index 665fa148916b703c7f9589ae211a72ca8dfba55a..171088d69374155a10d0a44bdfda0446ae840c5b 100644 (file)
@@ -13,6 +13,7 @@
 #include <stdint.h>
 #include <arpa/inet.h>
 #include <errno.h>
+#include <inttypes.h>
 
 #include <linux/netfilter/nf_tables.h>
 
@@ -175,13 +176,13 @@ nft_rule_expr_counter_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "pkts=%lu bytes=%lu ",
+               return snprintf(buf, len, "pkts %"PRIu64" bytes %"PRIu64" ",
                                ctr->pkts, ctr->bytes);
        case NFT_RULE_O_XML:
-               return snprintf(buf, len, "<pkts>%lu</pkts><bytes>%lu</bytes>",
+               return snprintf(buf, len, "<pkts>%"PRIu64"</pkts><bytes>%"PRIu64"</bytes>",
                                ctr->pkts, ctr->bytes);
        case NFT_RULE_O_JSON:
-               return snprintf(buf, len, "\"pkts\" : %lu, \"bytes\" : %lu",
+               return snprintf(buf, len, "\"pkts\" : %"PRIu64", \"bytes\" : %"PRIu64"",
                                ctr->pkts, ctr->bytes);
        default:
                break;
index be23e8061cede1eb9b27aa13dc01cb2cd4622492..655a935f1311dacfed111f6cbe31569238087ea2 100644 (file)
@@ -252,8 +252,8 @@ nft_rule_expr_ct_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "dreg=%u key=%s dir=%u ",
-                               ct->dreg, ctkey2str(ct->key), ct->dir);
+               return snprintf(buf, len, "load %s => reg %u dir %u ",
+                               ctkey2str(ct->key), ct->dreg, ct->dir);
        case NFT_RULE_O_XML:
                return snprintf(buf, len, "<dreg>%u</dreg>"
                                          "<key>%s</key>"
index fd0549977bbba2bec53189637d1abe561fa3a3bc..316111d0ba35261003ff6cc26e2a6639597dfbe8 100644 (file)
@@ -363,7 +363,7 @@ int nft_data_reg_snprintf(char *buf, size_t size, union nft_data_reg *reg,
        case DATA_VERDICT:
                switch(output_format) {
                case NFT_RULE_O_DEFAULT:
-                       return snprintf(buf, size, "verdict=%d", reg->verdict);
+                       return snprintf(buf, size, "%d ", reg->verdict);
                case NFT_RULE_O_XML:
                        return snprintf(buf, size,
                                        "<data_reg type=\"verdict\">"
@@ -380,7 +380,7 @@ int nft_data_reg_snprintf(char *buf, size_t size, union nft_data_reg *reg,
        case DATA_CHAIN:
                switch(output_format) {
                case NFT_RULE_O_DEFAULT:
-                       return snprintf(buf, size, "chain=%s", reg->chain);
+                       return snprintf(buf, size, "%s ", reg->chain);
                case NFT_RULE_O_XML:
                        return snprintf(buf, size,
                                        "<data_reg type=\"chain\">"
index 6055067e78b65950f1ffde8789c4e506029aa50e..eddcd00085151ac3935f6fa425c6d9f284c2c59c 100644 (file)
@@ -282,9 +282,9 @@ nft_rule_expr_exthdr_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "dreg=%u type=%u offset=%u len=%u ",
-                               exthdr->dreg, exthdr->type,
-                               exthdr->offset, exthdr->len);
+               return snprintf(buf, len, "load %ub @ %u + %u => reg %u ",
+                               exthdr->len, exthdr->type,
+                               exthdr->offset, exthdr->dreg);
        case NFT_RULE_O_XML:
                return snprintf(buf, len, "<dreg>%u</dreg>"
                                          "<exthdr_type>%s</exthdr_type>"
index 8f57649c3c6c42aa0b9d7a5313c372cb8efe16b2..c5757c64d7c8e3ebb07314148dd084e5cecf23f9 100644 (file)
@@ -333,7 +333,7 @@ nft_rule_expr_immediate_snprintf_default(char *buf, size_t len,
        int size = len, offset = 0, ret;
        struct nft_expr_immediate *imm = (struct nft_expr_immediate *)e->data;
 
-       ret = snprintf(buf, len, "dreg=%u ", imm->dreg);
+       ret = snprintf(buf, len, "reg %u ", imm->dreg);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        if (e->flags & (1 << NFT_EXPR_IMM_DATA)) {
index fdd76e306a27f0827dcc52601d58ef71367f1dc6..c18ca2a6768bc7a26c174f61ad18531529b5f97f 100644 (file)
@@ -176,7 +176,7 @@ nft_rule_expr_limit_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "rate=%"PRIu64" depth=%"PRIu64" ",
+               return snprintf(buf, len, "rate %"PRIu64" depth %"PRIu64" ",
                                limit->rate, limit->depth);
        case NFT_RULE_O_XML:
                return snprintf(buf, len, "<rate>%"PRIu64"</rate>"
index b2b3ca1d623f4285d7fdc0e048d779cc200baa83..03be03085e1d64332ab7a22ce2f4a33584d09d6d 100644 (file)
@@ -239,8 +239,8 @@ nft_rule_expr_log_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "prefix=%s group=%u "
-                                         "snaplen=%u qthreshold=%u ",
+               return snprintf(buf, len, "prefix '%s' group %u "
+                                         "snaplen %u qthreshold %u ",
                                log->prefix, log->group,
                                log->snaplen, log->qthreshold);
        case NFT_RULE_O_XML:
index e0833726cf3e26c4702143801b0cf39aa620bbbe..9babfd12354b98844195d6149024876c9057c543 100644 (file)
@@ -224,8 +224,8 @@ nft_rule_expr_lookup_snprintf_default(char *buf, size_t size,
 {
        int len = size, offset = 0, ret;
 
-       ret = snprintf(buf, len, "set=%s sreg=%u dreg=%u",
-                       l->set_name, l->sreg, l->dreg);
+       ret = snprintf(buf, len, "reg %u set %s dreg %u ",
+                       l->sreg, l->set_name, l->dreg);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        return offset;
index 3302bb499dda043066a2feff0dc18eaa6ded2347..01d8cef9bfa3c31bbaaa20c8c284fd854ffc069d 100644 (file)
@@ -242,7 +242,7 @@ nft_rule_expr_match_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "name=%s rev=%u ",
+               return snprintf(buf, len, "name %s rev %u ",
                                match->name, match->rev);
        case NFT_RULE_O_XML:
                return nft_rule_expr_match_snprintf_xml(buf, len, match);
index b1d978b302a406f440af68f4e1c32cc6fbd91919..3b83a4a73bf653aa3669e538af962feac5187af1 100644 (file)
@@ -211,8 +211,8 @@ nft_rule_expr_meta_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "dreg=%u key=%u ",
-                               meta->dreg, meta->key);
+               return snprintf(buf, len, "load %s => reg %u ",
+                               meta_key2str(meta->key), meta->dreg);
        case NFT_RULE_O_XML:
                return snprintf(buf, len, "<dreg>%u</dreg>"
                                          "<key>%s</key>",
index 32be56452d0e0cb55ba9a7b16968723e3f2bc2dd..66ae40589e0182c5048083715962c76946e178bf 100644 (file)
@@ -363,28 +363,28 @@ nft_rule_expr_nat_snprintf_default(char *buf, size_t size,
 
        switch (nat->type) {
        case NFT_NAT_SNAT:
-               ret = snprintf(buf, len, "type=NFT_NAT_SNAT ");
+               ret = snprintf(buf, len, "snat ");
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
                break;
        case NFT_NAT_DNAT:
-               ret = snprintf(buf, len, "type=NFT_NAT_DNAT ");
+               ret = snprintf(buf, len, "dnat ");
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
                break;
        }
 
-       ret = snprintf(buf+offset, len, "family=%s ", nft_family2str(nat->family));
+       ret = snprintf(buf+offset, len, "%s ", nft_family2str(nat->family));
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        if (e->flags & (1 << NFT_EXPR_NAT_REG_ADDR_MIN)) {
                ret = snprintf(buf+offset, len,
-                              "sreg_addr_min_v4=%u sreg_addr_max_v4=%u ",
+                              "addr_min reg %u addr_max reg %u ",
                               nat->sreg_addr_min, nat->sreg_addr_max);
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
        }
 
        if (e->flags & (1 << NFT_EXPR_NAT_REG_PROTO_MIN)) {
                ret = snprintf(buf+offset, len,
-                              "sreg_proto_min=%u sreg_proto_max=%u ",
+                              "proto_min reg %u proto_max reg %u ",
                               nat->sreg_proto_min, nat->sreg_proto_max);
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
        }
index 7d6fb6d3062bf3a5d64f3cb106d55a3513e46f80..449fbd6e7335963ec7ff4e28b56d1df6a4a46a9c 100644 (file)
@@ -303,9 +303,8 @@ nft_rule_expr_payload_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "dreg=%u base=%u offset=%u len=%u ",
-                               payload->dreg, payload->base,
-                               payload->offset, payload->len);
+               return snprintf(buf, len, "load %ub @ network header + %u => reg %u ",
+                               payload->dreg, payload->offset, payload->len);
        case NFT_RULE_O_XML:
                return nft_rule_expr_payload_snprintf_xml(buf, len, flags,
                                                          payload);
index ba7ee1a879f35c24f1bee4291f2e53d7e9ad7c5e..fc24a811a79c7e9e98f71a6ae7f217503fdeae28 100644 (file)
@@ -244,7 +244,7 @@ nft_rule_expr_target_snprintf(char *buf, size_t len, uint32_t type,
 
        switch(type) {
        case NFT_RULE_O_DEFAULT:
-               return snprintf(buf, len, "name=%s rev=%u ",
+               return snprintf(buf, len, "name %s rev %u ",
                                target->name, target->rev);
        case NFT_RULE_O_XML:
                return nft_rule_exp_target_snprintf_xml(buf, len, target);
index 64c34bd8bd27d9e5db9f54a9ed592396698e2581..5a4ae91d8d32d7f3a64cbdedf23afb6c9e1792f6 100644 (file)
@@ -18,6 +18,7 @@
 #include <string.h>
 #include <netinet/in.h>
 #include <errno.h>
+#include <inttypes.h>
 
 #include <libmnl/libmnl.h>
 #include <linux/netfilter/nfnetlink.h>
@@ -745,18 +746,20 @@ static int nft_rule_snprintf_default(char *buf, size_t size, struct nft_rule *r,
        struct nft_rule_expr *expr;
        int ret, len = size, offset = 0;
 
-       ret = snprintf(buf, size, "family=%s table=%s chain=%s handle=%llu "
-                                 "flags=%x ",
+       ret = snprintf(buf, size, "%s %s %s %"PRIu64"\n",
                        nft_family2str(r->family), r->table, r->chain,
-                       (unsigned long long)r->handle, r->rule_flags);
+                       r->handle);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        list_for_each_entry(expr, &r->expr_list, head) {
-               ret = snprintf(buf+offset, len, "%s ", expr->ops->name);
+               ret = snprintf(buf+offset, len, "  [ %s ", expr->ops->name);
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
                ret = nft_rule_expr_snprintf(buf+offset, size, expr, type, flags);
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+               ret = snprintf(buf+offset, len, "]\n");
+               SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
        }
 
        return offset;
index b8d431efcb5519eb4b7a3bdaa3db948d8377a4e1..69f25ac021fcf8eccfd3705f49fc635805cd1b55 100644 (file)
--- a/src/set.c
+++ b/src/set.c
@@ -323,7 +323,7 @@ int nft_set_snprintf(char *buf, size_t size, struct nft_set *s,
        int len = size, offset = 0;
        struct nft_set_elem *elem;
 
-       ret = snprintf(buf, size, "set=%s table=%s flags=%x",
+       ret = snprintf(buf, size, "%s %s %x",
                        s->name, s->table, s->set_flags);
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
index 0cbb9b7916927f5704fdc65755f6d754dea977d1..a70dc09bda0b7df1a4311d13a8a8b151dcd2c62b 100644 (file)
@@ -389,7 +389,7 @@ int nft_set_elem_snprintf(char *buf, size_t size, struct nft_set_elem *e,
 {
        int ret, len = size, offset = 0, i;
 
-       ret = snprintf(buf, size, "flags=%u key=", e->set_elem_flags);
+       ret = snprintf(buf, size, "element ");
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        for (i=0; i<e->key.len/sizeof(uint32_t); i++) {
@@ -397,7 +397,7 @@ int nft_set_elem_snprintf(char *buf, size_t size, struct nft_set_elem *e,
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
        }
 
-       ret = snprintf(buf+offset, size, "data=");
+       ret = snprintf(buf+offset, size, " : ");
        SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 
        for (i=0; i<e->data.len/sizeof(uint32_t); i++) {
@@ -405,6 +405,9 @@ int nft_set_elem_snprintf(char *buf, size_t size, struct nft_set_elem *e,
                SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
        }
 
+       ret = snprintf(buf+offset, len, "%u [end]", e->set_elem_flags);
+       SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
        return offset;
 }
 EXPORT_SYMBOL(nft_set_elem_snprintf);
index 982d101fb30532a71adcc8111046ef04705edaf2..27fa8fce3d08cd2322ab06ef81e5199814882495 100644 (file)
@@ -359,7 +359,7 @@ static int nft_table_snprintf_xml(char *buf, size_t size, struct nft_table *t)
 
 static int nft_table_snprintf_default(char *buf, size_t size, struct nft_table *t)
 {
-       return snprintf(buf, size, "table=%s family=%s flags=%x",
+       return snprintf(buf, size, "table %s %s flags %x",
                        t->name, nft_family2str(t->family), t->table_flags);
 }