From f693586d1b69114049a47fa615872ad4c14dcff2 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Thu, 5 Mar 2009 13:26:29 +0100 Subject: src: add support for GRE transport protocol This patch adds support for GRE transport protocol. Tested-by: Byan Buff Signed-off-by: Pablo Neira Ayuso --- src/conntrack/build.c | 1 + src/conntrack/snprintf_default.c | 9 +++++++-- src/conntrack/snprintf_xml.c | 14 +++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) (limited to 'src/conntrack') diff --git a/src/conntrack/build.c b/src/conntrack/build.c index 9611508..a1569ab 100644 --- a/src/conntrack/build.c +++ b/src/conntrack/build.c @@ -50,6 +50,7 @@ void __build_tuple_proto(struct nfnlhdr *req, case IPPROTO_UDP: case IPPROTO_TCP: case IPPROTO_SCTP: + case IPPROTO_GRE: nfnl_addattr_l(&req->nlh, size, CTA_PROTO_SRC_PORT, &t->l4src.tcp.port, sizeof(u_int16_t)); nfnl_addattr_l(&req->nlh, size, CTA_PROTO_DST_PORT, diff --git a/src/conntrack/snprintf_default.c b/src/conntrack/snprintf_default.c index 7cf28f8..a846af9 100644 --- a/src/conntrack/snprintf_default.c +++ b/src/conntrack/snprintf_default.c @@ -13,7 +13,8 @@ static char *proto2str[IPPROTO_MAX] = { [IPPROTO_UDPLITE] = "udplite", [IPPROTO_ICMP] = "icmp", [IPPROTO_ICMPV6] = "icmpv6", - [IPPROTO_SCTP] = "sctp" + [IPPROTO_SCTP] = "sctp", + [IPPROTO_GRE] = "gre" }; static char *l3proto2str[AF_MAX] = { @@ -162,7 +163,11 @@ int __snprintf_proto(char *buf, ntohs(tuple->l4src.tcp.port), ntohs(tuple->l4dst.tcp.port)); break; - + case IPPROTO_GRE: + return snprintf(buf, len, "srckey=0x%x dstkey=0x%x ", + ntohs(tuple->l4src.all), + ntohs(tuple->l4dst.all)); + break; case IPPROTO_ICMP: case IPPROTO_ICMPV6: /* The ID only makes sense some ICMP messages but we want to diff --git a/src/conntrack/snprintf_xml.c b/src/conntrack/snprintf_xml.c index b14ff43..cb6fc03 100644 --- a/src/conntrack/snprintf_xml.c +++ b/src/conntrack/snprintf_xml.c @@ -59,7 +59,8 @@ static char *proto2str[IPPROTO_MAX] = { [IPPROTO_UDPLITE] = "udplite", [IPPROTO_ICMP] = "icmp", [IPPROTO_ICMPV6] = "icmp6", - [IPPROTO_SCTP] = "sctp" + [IPPROTO_SCTP] = "sctp", + [IPPROTO_GRE] = "gre" }; static char *l3proto2str[AF_MAX] = { [AF_INET] = "ipv4", @@ -177,6 +178,17 @@ static int __snprintf_proto_xml(char *buf, BUFFER_SIZE(ret, size, len, offset); } break; + case IPPROTO_GRE: + if (type == __ADDR_SRC) { + ret = snprintf(buf, len, "0x%x", + ntohs(tuple->l4src.all)); + BUFFER_SIZE(ret, size, len, offset); + } else { + ret = snprintf(buf, len, "%u", + ntohs(tuple->l4dst.all)); + BUFFER_SIZE(ret, size, len, offset); + } + break; } return ret; -- cgit v1.2.3