diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-07-05 14:00:08 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-07-05 14:00:08 +0200 |
commit | 2765d8c3f09315766a83acc38a29e7f6a7392128 (patch) | |
tree | ad7aa22e9ad1127474a5c43fdc95fadaf19976d0 | |
parent | f95e8598af7e3a1641166b4e6be31b87d4690326 (diff) |
src: expr: data_reg: fix printing data register content
Before:
ip filter output 41
[ payload load 1b @ network header + 9 => reg 1 ]
[ cmp eq reg 1 ]
Now:
ip filter output 41
[ payload load 1b @ network header + 9 => reg 1 ]
[ cmp eq reg 1 0x00000006 ]
^^^^^^^^^^
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | src/expr/data_reg.c | 10 | ||||
-rw-r--r-- | src/internal.h | 2 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c index 316111d..260ae59 100644 --- a/src/expr/data_reg.c +++ b/src/expr/data_reg.c @@ -188,7 +188,7 @@ static int nft_data_reg_value_xml_parse(union nft_data_reg *reg, char *xml) reg->len = tmp; /* Get and set <dataN> */ - for (i = 0; i < reg->len/sizeof(uint32_t); i++) { + for (i = 0; i < div_round_up(reg->len, sizeof(uint32_t)); i++) { sprintf(node_name, "data%d", i); node = mxmlFindElement(tree, tree, node_name, NULL, @@ -261,7 +261,6 @@ nft_data_reg_value_snprintf_json(char *buf, size_t size, int len = size, offset = 0, ret, i, j; uint32_t utemp; uint8_t *tmp; - int data_len = reg->len/sizeof(uint32_t); ret = snprintf(buf, len, "\"data_reg\": { \"type\" : \"value\", "); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -269,7 +268,7 @@ nft_data_reg_value_snprintf_json(char *buf, size_t size, ret = snprintf(buf+offset, len, "\"len\" : %zd, ", reg->len); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); - for (i = 0; i<data_len; i++) { + for (i = 0; i < div_round_up(reg->len, sizeof(uint32_t)); i++) { ret = snprintf(buf+offset, len, "\"data%d\" : \"0x", i); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -298,7 +297,6 @@ int nft_data_reg_value_snprintf_xml(char *buf, size_t size, int len = size, offset = 0, ret, i, j; uint32_t be; uint8_t *tmp; - int data_len = reg->len/sizeof(uint32_t); ret = snprintf(buf, len, "<data_reg type=\"value\">"); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -306,7 +304,7 @@ int nft_data_reg_value_snprintf_xml(char *buf, size_t size, ret = snprintf(buf+offset, len, "<len>%zd</len>", reg->len); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); - for (i=0; i<data_len; i++) { + for (i = 0; i < div_round_up(reg->len, sizeof(uint32_t)); i++) { ret = snprintf(buf+offset, len, "<data%d>0x", i); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -334,7 +332,7 @@ nft_data_reg_value_snprintf_default(char *buf, size_t size, { int len = size, offset = 0, ret, i; - for (i=0; i<reg->len/sizeof(uint32_t); i++) { + for (i = 0; i < div_round_up(reg->len, sizeof(uint32_t)); i++) { ret = snprintf(buf+offset, len, "0x%.8x ", reg->val[i]); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); } diff --git a/src/internal.h b/src/internal.h index ee09661..b6df4dd 100644 --- a/src/internal.h +++ b/src/internal.h @@ -73,4 +73,6 @@ struct nft_set_elem { offset += ret; \ len -= ret; +#define div_round_up(n, d) (((n) + (d) - 1) / (d)) + #endif |