diff options
author | Alexander Wirt <formorer@debian.org> | 2014-09-19 10:15:13 +0200 |
---|---|---|
committer | Alexander Wirt <formorer@debian.org> | 2014-09-19 10:15:13 +0200 |
commit | 9f760e5d3f6b44ecf5bb7144517e022fd987fa76 (patch) | |
tree | a19ccbfccc5049ee3a8252725191af221f31b3ea /src/cache-ct.c | |
parent | 6b61aefbf3de71852386f5f26d60c10ef62407d3 (diff) | |
download | conntrack-tools-9f760e5d3f6b44ecf5bb7144517e022fd987fa76.tar.gz conntrack-tools-9f760e5d3f6b44ecf5bb7144517e022fd987fa76.zip |
Imported Upstream version 1.4.2
Diffstat (limited to 'src/cache-ct.c')
-rw-r--r-- | src/cache-ct.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/cache-ct.c b/src/cache-ct.c index 0ad8d2a..f86d143 100644 --- a/src/cache-ct.c +++ b/src/cache-ct.c @@ -59,7 +59,7 @@ cache_hash6_ct(const struct nf_conntrack *ct, const struct hashtable *table) uint32_t a[10]; memcpy(&a[0], nfct_get_attr(ct, ATTR_IPV6_SRC), sizeof(uint32_t)*4); - memcpy(&a[4], nfct_get_attr(ct, ATTR_IPV6_SRC), sizeof(uint32_t)*4); + memcpy(&a[4], nfct_get_attr(ct, ATTR_IPV6_DST), sizeof(uint32_t)*4); a[8] = nfct_get_attr_u8(ct, ATTR_ORIG_L3PROTO) << 16 | nfct_get_attr_u8(ct, ATTR_ORIG_L4PROTO); a[9] = nfct_get_attr_u16(ct, ATTR_ORIG_PORT_SRC) << 16 | @@ -88,14 +88,21 @@ cache_ct_hash(const void *data, const struct hashtable *table) return ret; } +/* master conntrack of expectations have no ID */ +static inline int +cache_ct_cmp_id(const struct nf_conntrack *ct1, const struct nf_conntrack *ct2) +{ + return nfct_attr_is_set(ct2, ATTR_ID) ? + nfct_get_attr_u32(ct1, ATTR_ID) == nfct_get_attr_u32(ct2, ATTR_ID) : 1; +} + static int cache_ct_cmp(const void *data1, const void *data2) { const struct cache_object *obj = data1; const struct nf_conntrack *ct = data2; return nfct_cmp(obj->ptr, ct, NFCT_CMP_ORIG) && - nfct_get_attr_u32(obj->ptr, ATTR_ID) == - nfct_get_attr_u32(ct, ATTR_ID); + cache_ct_cmp_id(obj->ptr, ct); } static void *cache_ct_alloc(void) |