summaryrefslogtreecommitdiffstats
path: root/src/conntrack
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2012-01-22 19:41:07 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2012-01-22 21:26:12 +0100
commit9064374e7758bc4fa167d1c30ccc751ea588f5db (patch)
tree8fa4252ed572a12b279469fb0038efe4a4445d88 /src/conntrack
parent14b50313556eb7ad86de21438ae5837624db381f (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.c54
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>");