summaryrefslogtreecommitdiffstats
path: root/src/conntrack/parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/conntrack/parse.c')
-rw-r--r--src/conntrack/parse.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/conntrack/parse.c b/src/conntrack/parse.c
index b52454b..8c1d813 100644
--- a/src/conntrack/parse.c
+++ b/src/conntrack/parse.c
@@ -422,6 +422,31 @@ __parse_nat_seq(const struct nfattr *attr, struct nf_conntrack *ct, int dir)
}
}
+static void __parse_synproxy(const struct nfattr *attr, struct nf_conntrack *ct)
+{
+ struct nfattr *tb[CTA_SYNPROXY_MAX];
+
+ nfnl_parse_nested(tb, CTA_SYNPROXY_MAX, attr);
+
+ if (tb[CTA_SYNPROXY_ISN - 1]) {
+ ct->synproxy.isn =
+ ntohl(*(uint32_t *)NFA_DATA(tb[CTA_SYNPROXY_ISN-1]));
+ set_bit(ATTR_SYNPROXY_ISN, ct->head.set);
+ }
+
+ if (tb[CTA_SYNPROXY_ITS - 1]) {
+ ct->synproxy.its =
+ ntohl(*(uint32_t *)NFA_DATA(tb[CTA_SYNPROXY_ITS-1]));
+ set_bit(ATTR_SYNPROXY_ITS, ct->head.set);
+ }
+
+ if (tb[CTA_SYNPROXY_TSOFF - 1]) {
+ ct->synproxy.tsoff =
+ ntohl(*(uint32_t *)NFA_DATA(tb[CTA_SYNPROXY_TSOFF-1]));
+ set_bit(ATTR_SYNPROXY_TSOFF, ct->head.set);
+ }
+}
+
static void
__parse_helper(const struct nfattr *attr, struct nf_conntrack *ct)
{
@@ -596,4 +621,7 @@ void __parse_conntrack(const struct nlmsghdr *nlh,
if (cda[CTA_LABELS-1])
__parse_labels(cda[CTA_LABELS-1], ct);
+
+ if (cda[CTA_SYNPROXY-1])
+ __parse_synproxy(cda[CTA_SYNPROXY-1], ct);
}