summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/internal/prototypes.h2
-rw-r--r--src/conntrack/snprintf_default.c32
-rw-r--r--src/expect/parse.c5
-rw-r--r--src/expect/snprintf_default.c22
4 files changed, 47 insertions, 14 deletions
diff --git a/include/internal/prototypes.h b/include/internal/prototypes.h
index 928ddbd..5f1418f 100644
--- a/include/internal/prototypes.h
+++ b/include/internal/prototypes.h
@@ -10,7 +10,7 @@ int __parse_message_type(const struct nlmsghdr *nlh);
void __parse_conntrack(const struct nlmsghdr *nlh, struct nfattr *cda[], struct nf_conntrack *ct);
void __parse_tuple(const struct nfattr *attr, struct __nfct_tuple *tuple, int dir, u_int32_t *set);
int __snprintf_conntrack(char *buf, unsigned int len, const struct nf_conntrack *ct, unsigned int type, unsigned int msg_output, unsigned int flags);
-int __snprintf_address(char *buf, unsigned int len, const struct __nfct_tuple *tuple);
+int __snprintf_address(char *buf, unsigned int len, const struct __nfct_tuple *tuple, const char *src_tag, const char *dst_tag);
int __snprintf_protocol(char *buf, unsigned int len, const struct nf_conntrack *ct);
int __snprintf_proto(char *buf, unsigned int len, const struct __nfct_tuple *tuple);
int __snprintf_conntrack_default(char *buf, unsigned int len, const struct nf_conntrack *ct, const unsigned int msg_type, const unsigned int flags);
diff --git a/src/conntrack/snprintf_default.c b/src/conntrack/snprintf_default.c
index 8523bd1..beb1991 100644
--- a/src/conntrack/snprintf_default.c
+++ b/src/conntrack/snprintf_default.c
@@ -66,16 +66,18 @@ static int __snprintf_protoinfo_dccp(char *buf,
static int __snprintf_address_ipv4(char *buf,
unsigned int len,
- const struct __nfct_tuple *tuple)
+ const struct __nfct_tuple *tuple,
+ const char *src_tag,
+ const char *dst_tag)
{
int ret, size = 0, offset = 0;
struct in_addr src = { .s_addr = tuple->src.v4 };
struct in_addr dst = { .s_addr = tuple->dst.v4 };
- ret = snprintf(buf, len, "src=%s ", inet_ntoa(src));
+ ret = snprintf(buf, len, "%s=%s ", src_tag, inet_ntoa(src));
BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+offset, len, "dst=%s ", inet_ntoa(dst));
+ ret = snprintf(buf+offset, len, "%s=%s ", dst_tag, inet_ntoa(dst));
BUFFER_SIZE(ret, size, len, offset);
return size;
@@ -83,7 +85,9 @@ static int __snprintf_address_ipv4(char *buf,
static int __snprintf_address_ipv6(char *buf,
unsigned int len,
- const struct __nfct_tuple *tuple)
+ const struct __nfct_tuple *tuple,
+ const char *src_tag,
+ const char *dst_tag)
{
int ret, size = 0, offset = 0;
struct in6_addr src;
@@ -96,13 +100,13 @@ static int __snprintf_address_ipv6(char *buf,
if (!inet_ntop(AF_INET6, &src, tmp, sizeof(tmp)))
return -1;
- ret = snprintf(buf, len, "src=%s ", tmp);
+ ret = snprintf(buf, len, "%s=%s ", src_tag, tmp);
BUFFER_SIZE(ret, size, len, offset);
if (!inet_ntop(AF_INET6, &dst, tmp, sizeof(tmp)))
return -1;
- ret = snprintf(buf+offset, len-size, "dst=%s ", tmp);
+ ret = snprintf(buf+offset, len-size, "%s=%s ", dst_tag, tmp);
BUFFER_SIZE(ret, size, len, offset);
return size;
@@ -110,16 +114,20 @@ static int __snprintf_address_ipv6(char *buf,
int __snprintf_address(char *buf,
unsigned int len,
- const struct __nfct_tuple *tuple)
+ const struct __nfct_tuple *tuple,
+ const char *src_tag,
+ const char *dst_tag)
{
int size = 0;
switch (tuple->l3protonum) {
case AF_INET:
- size = __snprintf_address_ipv4(buf, len, tuple);
+ size = __snprintf_address_ipv4(buf, len, tuple,
+ src_tag, dst_tag);
break;
case AF_INET6:
- size = __snprintf_address_ipv6(buf, len, tuple);
+ size = __snprintf_address_ipv6(buf, len, tuple,
+ src_tag, dst_tag);
break;
}
@@ -324,7 +332,8 @@ int __snprintf_conntrack_default(char *buf,
BUFFER_SIZE(ret, size, len, offset);
}
- ret = __snprintf_address(buf+offset, len, &ct->tuple[__DIR_ORIG]);
+ ret = __snprintf_address(buf+offset, len, &ct->tuple[__DIR_ORIG],
+ "src", "dst");
BUFFER_SIZE(ret, size, len, offset);
ret = __snprintf_proto(buf+offset, len, &ct->tuple[__DIR_ORIG]);
@@ -341,7 +350,8 @@ int __snprintf_conntrack_default(char *buf,
BUFFER_SIZE(ret, size, len, offset);
}
- ret = __snprintf_address(buf+offset, len, &ct->tuple[__DIR_REPL]);
+ ret = __snprintf_address(buf+offset, len, &ct->tuple[__DIR_REPL],
+ "src", "dst");
BUFFER_SIZE(ret, size, len, offset);
ret = __snprintf_proto(buf+offset, len, &ct->tuple[__DIR_REPL]);
diff --git a/src/expect/parse.c b/src/expect/parse.c
index be9be78..0581aca 100644
--- a/src/expect/parse.c
+++ b/src/expect/parse.c
@@ -34,9 +34,12 @@ void __parse_expect(const struct nlmsghdr *nlh,
exp->expected.tuple[__DIR_ORIG].l3protonum = nfhdr->nfgen_family;
set_bit(ATTR_ORIG_L3PROTO, exp->expected.set);
- exp->mask.tuple[__DIR_REPL].l3protonum = nfhdr->nfgen_family;
+ exp->mask.tuple[__DIR_ORIG].l3protonum = nfhdr->nfgen_family;
set_bit(ATTR_ORIG_L3PROTO, exp->mask.set);
+ exp->master.tuple[__DIR_ORIG].l3protonum = nfhdr->nfgen_family;
+ set_bit(ATTR_ORIG_L3PROTO, exp->master.set);
+
if (cda[CTA_EXPECT_MASTER-1]) {
__parse_tuple(cda[CTA_EXPECT_MASTER-1],
&exp->master.tuple[__DIR_ORIG],
diff --git a/src/expect/snprintf_default.c b/src/expect/snprintf_default.c
index 51ffb30..c4a19fa 100644
--- a/src/expect/snprintf_default.c
+++ b/src/expect/snprintf_default.c
@@ -56,7 +56,9 @@ int __snprintf_expect_default(char *buf,
ret = __snprintf_expect_proto(buf+offset, len, exp);
BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_address(buf+offset, len, &exp->expected.tuple[__DIR_ORIG]);
+ ret = __snprintf_address(buf+offset, len,
+ &exp->expected.tuple[__DIR_ORIG],
+ "src", "dst");
BUFFER_SIZE(ret, size, len, offset);
ret = __snprintf_proto(buf+offset, len, &exp->expected.tuple[__DIR_ORIG]);
@@ -82,6 +84,24 @@ int __snprintf_expect_default(char *buf,
BUFFER_SIZE(ret, size, len, offset);
}
+ ret = __snprintf_address(buf+offset, len,
+ &exp->mask.tuple[__DIR_ORIG],
+ "mask-src", "mask-dst");
+ BUFFER_SIZE(ret, size, len, offset);
+
+ ret = __snprintf_proto(buf+offset, len,
+ &exp->mask.tuple[__DIR_ORIG]);
+ BUFFER_SIZE(ret, size, len, offset);
+
+ ret = __snprintf_address(buf+offset, len,
+ &exp->master.tuple[__DIR_ORIG],
+ "master-src", "master-dst");
+ BUFFER_SIZE(ret, size, len, offset);
+
+ ret = __snprintf_proto(buf+offset, len,
+ &exp->master.tuple[__DIR_ORIG]);
+ BUFFER_SIZE(ret, size, len, offset);
+
/* Delete the last blank space if needed */
if (len > 0 && buf[size-1] == ' ')
size--;