summaryrefslogtreecommitdiffstats
path: root/src/netlink.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/netlink.c')
-rw-r--r--src/netlink.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/netlink.c b/src/netlink.c
index e538aa0..24d61a0 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -197,7 +197,9 @@ int nl_get_conntrack(struct nfct_handle *h, const struct nf_conntrack *ct)
return 1;
}
-int nl_create_conntrack(struct nfct_handle *h, const struct nf_conntrack *orig)
+int nl_create_conntrack(struct nfct_handle *h,
+ const struct nf_conntrack *orig,
+ int timeout)
{
int ret;
struct nf_conntrack *ct;
@@ -206,6 +208,9 @@ int nl_create_conntrack(struct nfct_handle *h, const struct nf_conntrack *orig)
if (ct == NULL)
return -1;
+ if (timeout > 0)
+ nfct_set_attr_u32(ct, ATTR_TIMEOUT, timeout);
+
/* we hit error if we try to change the expected bit */
if (nfct_attr_is_set(ct, ATTR_STATUS)) {
uint32_t status = nfct_get_attr_u32(ct, ATTR_STATUS);
@@ -233,7 +238,9 @@ int nl_create_conntrack(struct nfct_handle *h, const struct nf_conntrack *orig)
return ret;
}
-int nl_update_conntrack(struct nfct_handle *h, const struct nf_conntrack *orig)
+int nl_update_conntrack(struct nfct_handle *h,
+ const struct nf_conntrack *orig,
+ int timeout)
{
int ret;
struct nf_conntrack *ct;
@@ -242,6 +249,9 @@ int nl_update_conntrack(struct nfct_handle *h, const struct nf_conntrack *orig)
if (ct == NULL)
return -1;
+ if (timeout > 0)
+ nfct_set_attr_u32(ct, ATTR_TIMEOUT, timeout);
+
/* unset NAT info, otherwise we hit error */
nfct_attr_unset(ct, ATTR_SNAT_IPV4);
nfct_attr_unset(ct, ATTR_DNAT_IPV4);