Index: include/conntrack.h =================================================================== --- include/conntrack.h (révision 6458) +++ include/conntrack.h (copie de travail) @@ -85,37 +85,40 @@ CT_OPT_TIMEOUT_BIT = 5, CT_OPT_TIMEOUT = (1 << CT_OPT_TIMEOUT_BIT), - CT_OPT_STATUS_BIT = 6, + CT_OPT_FIXED_TIMEOUT_BIT = 6, + CT_OPT_FIXED_TIMEOUT = (1 << CT_OPT_FIXED_TIMEOUT_BIT), + + CT_OPT_STATUS_BIT = 7, CT_OPT_STATUS = (1 << CT_OPT_STATUS_BIT), - CT_OPT_ZERO_BIT = 7, + CT_OPT_ZERO_BIT = 8, CT_OPT_ZERO = (1 << CT_OPT_ZERO_BIT), - CT_OPT_EVENT_MASK_BIT = 8, + CT_OPT_EVENT_MASK_BIT = 9, CT_OPT_EVENT_MASK = (1 << CT_OPT_EVENT_MASK_BIT), - CT_OPT_EXP_SRC_BIT = 9, + CT_OPT_EXP_SRC_BIT = 10, CT_OPT_EXP_SRC = (1 << CT_OPT_EXP_SRC_BIT), - CT_OPT_EXP_DST_BIT = 10, + CT_OPT_EXP_DST_BIT = 11, CT_OPT_EXP_DST = (1 << CT_OPT_EXP_DST_BIT), - CT_OPT_MASK_SRC_BIT = 11, + CT_OPT_MASK_SRC_BIT = 12, CT_OPT_MASK_SRC = (1 << CT_OPT_MASK_SRC_BIT), - CT_OPT_MASK_DST_BIT = 12, + CT_OPT_MASK_DST_BIT = 13, CT_OPT_MASK_DST = (1 << CT_OPT_MASK_DST_BIT), - CT_OPT_NATRANGE_BIT = 13, + CT_OPT_NATRANGE_BIT = 14, CT_OPT_NATRANGE = (1 << CT_OPT_NATRANGE_BIT), - CT_OPT_MARK_BIT = 14, + CT_OPT_MARK_BIT = 15, CT_OPT_MARK = (1 << CT_OPT_MARK_BIT), - CT_OPT_ID_BIT = 15, + CT_OPT_ID_BIT = 16, CT_OPT_ID = (1 << CT_OPT_ID_BIT), - CT_OPT_FAMILY_BIT = 16, + CT_OPT_FAMILY_BIT = 17, CT_OPT_FAMILY = (1 << CT_OPT_FAMILY_BIT), CT_OPT_MAX_BIT = CT_OPT_FAMILY_BIT Index: src/conntrack.c =================================================================== --- src/conntrack.c (révision 6458) +++ src/conntrack.c (copie de travail) @@ -80,6 +80,7 @@ {"reply-dst", 1, 0, 'q'}, {"protonum", 1, 0, 'p'}, {"timeout", 1, 0, 't'}, + {"Timeout", 1, 0, 'T'}, {"status", 1, 0, 'u'}, {"zero", 0, 0, 'z'}, {"event-mask", 1, 0, 'e'}, @@ -569,6 +570,7 @@ " -p, --protonum proto\t\tLayer 4 Protocol, eg. 'tcp'\n" " -f, --family proto\t\tLayer 3 Protocol, eg. 'ipv6'\n" " -t, --timeout timeout\t\tSet timeout\n" + " -T, --Timeout fixed timeout\t\tSet fixed timeout\n" " -u, --status status\t\tSet status, eg. ASSURED\n" " -i, --id [id]\t\t\tShow or set conntrack ID\n" ; @@ -595,6 +597,7 @@ static struct nfct_conntrack *ct; static struct nfct_expect *exp; static unsigned long timeout; +static unsigned long fixed_timeout; static unsigned int status; static unsigned int mark; static unsigned int id = NFCT_ANY_ID; @@ -611,7 +614,7 @@ struct nfct_conntrack_compare *pcmp; while ((c = getopt_long(argc, argv, - "L::I::U::D::G::E::F::hVs:d:r:q:p:t:u:e:a:z[:]:{:}:m:i::f:", + "L::I::U::D::G::E::F::hVs:d:r:q:p:t:T:u:e:a:z[:]:{:}:m:i::f:", opts, NULL)) != -1) { switch(c) { case 'L': @@ -735,6 +738,12 @@ if (optarg) timeout = atol(optarg); break; + case 'T': + options |= CT_OPT_FIXED_TIMEOUT; + if (optarg) + fixed_timeout = atol(optarg); + break; + case 'u': { if (!optarg) continue; @@ -974,6 +983,9 @@ ct = nfct_conntrack_alloc(&orig, &reply, timeout, &proto, status, mark, id, NULL); + if (options & CT_OPT_FIXED_TIMEOUT) { + ct->fixed_timeout = fixed_timeout; + } if (!ct) exit_error(OTHER_PROBLEM, "Not enough memory");