diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-01-22 19:41:07 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-01-22 21:26:12 +0100 |
commit | 9064374e7758bc4fa167d1c30ccc751ea588f5db (patch) | |
tree | 8fa4252ed572a12b279469fb0038efe4a4445d88 /src/conntrack | |
parent | 14b50313556eb7ad86de21438ae5837624db381f (diff) |
expect: add XML support for nfexp_snprintf()
Example of the XML output:
<flow type="new">
<layer3 protonum="2" protoname="IPv4">
<expected>
<src>192.168.0.2</src>
<dst>192.168.1.2</dst>
</expected>
<mask>
<src>255.255.255.255</src>
<dst>255.255.255.255</dst>
</mask>
<master>
<src>192.168.0.2</src>
<dst>192.168.1.2</dst>
</master>
</layer3>
<layer4 protonum="6" protoname="tcp">
<expected>
<sport>0</sport>
<dport>41739</dport>
</expected>
<mask>
<sport>0</sport>
<dport>65535</dport>
</mask>
<master>
<sport>36390</sport>
<dport>21</dport>
</master>
</layer4>
<meta>
<helper-name>ftp</helper-name>
<timeout>300</timeout>
<zone>0</zone>
</meta>
</flow>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/conntrack')
-rw-r--r-- | src/conntrack/snprintf_xml.c | 54 |
1 files changed, 16 insertions, 38 deletions
diff --git a/src/conntrack/snprintf_xml.c b/src/conntrack/snprintf_xml.c index 63c814a..756d118 100644 --- a/src/conntrack/snprintf_xml.c +++ b/src/conntrack/snprintf_xml.c @@ -53,17 +53,12 @@ * </flow> */ -enum { - __ADDR_SRC = 0, - __ADDR_DST, -}; - -static const char *__proto2str(u_int8_t protonum) +const char *__proto2str(u_int8_t protonum) { return proto2str[protonum] ? proto2str[protonum] : "unknown"; } -static const char *__l3proto2str(u_int8_t protonum) +const char *__l3proto2str(u_int8_t protonum) { return l3proto2str[protonum] ? l3proto2str[protonum] : "unknown"; } @@ -97,24 +92,16 @@ static int __snprintf_ipv6_xml(char *buf, return snprintf(buf, len, "%s", tmp); } -static int __snprintf_addr_xml(char *buf, - unsigned int len, - const struct __nfct_tuple *tuple, - unsigned int type) +int __snprintf_addr_xml(char *buf, unsigned int len, + const struct __nfct_tuple *tuple, + enum __nfct_addr type) { int ret; unsigned int size = 0, offset = 0; + const char *tag = (type == __ADDR_SRC) ? "src" : "dst"; - switch(type) { - case __ADDR_SRC: - ret = snprintf(buf, len, "<src>"); - BUFFER_SIZE(ret, size, len, offset); - break; - case __ADDR_DST: - ret = snprintf(buf+offset, len, "<dst>"); - BUFFER_SIZE(ret, size, len, offset); - break; - } + ret = snprintf(buf, len, "<%s>", tag); + BUFFER_SIZE(ret, size, len, offset); switch (tuple->l3protonum) { case AF_INET: @@ -127,24 +114,15 @@ static int __snprintf_addr_xml(char *buf, break; } - switch(type) { - case __ADDR_SRC: - ret = snprintf(buf+offset, len, "</src>"); - BUFFER_SIZE(ret, size, len, offset); - break; - case __ADDR_DST: - ret = snprintf(buf+offset, len, "</dst>"); - BUFFER_SIZE(ret, size, len, offset); - break; - } + ret = snprintf(buf+offset, len, "</%s>", tag); + BUFFER_SIZE(ret, size, len, offset); return size; } -static int __snprintf_proto_xml(char *buf, - unsigned int len, - const struct __nfct_tuple *tuple, - unsigned int type) +int __snprintf_proto_xml(char *buf, unsigned int len, + const struct __nfct_tuple *tuple, + enum __nfct_addr type) { int ret = 0; unsigned int size = 0, offset = 0; @@ -261,7 +239,7 @@ __snprintf_deltatime(char *buf, unsigned int len, const struct nf_conntrack *ct) return size; } -static int +int __snprintf_localtime_xml(char *buf, unsigned int len, const struct tm *tm) { int ret = 0; @@ -317,10 +295,10 @@ static int __snprintf_tuple_xml(char *buf, tuple->l3protonum, __l3proto2str(tuple->l3protonum)); BUFFER_SIZE(ret, size, len, offset); - ret = __snprintf_addr_xml(buf+offset, len, tuple, __DIR_ORIG); + ret = __snprintf_addr_xml(buf+offset, len, tuple, __ADDR_SRC); BUFFER_SIZE(ret, size, len, offset); - ret = __snprintf_addr_xml(buf+offset, len, tuple, __DIR_REPL); + ret = __snprintf_addr_xml(buf+offset, len, tuple, __ADDR_DST); BUFFER_SIZE(ret, size, len, offset); ret = snprintf(buf+offset, len, "</layer3>"); |