rename ip_reassembly args name 'mgr' -> 'assembler'
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
#define IPV6_KEYLEN 4
|
||||
#define PRIME_VALUE 0xeaad8405
|
||||
#define IP_FRAG_HASH_FNUM 2
|
||||
#define IP_FRAG_TBL_POS(mgr, sig) ((mgr)->table + ((sig) & (mgr)->entry_mask))
|
||||
#define IP_FRAG_TBL_POS(assembler, sig) ((assembler)->table + ((sig) & (assembler)->entry_mask))
|
||||
|
||||
#define KEY_TO_STR(key, str_str, dst_str) \
|
||||
do \
|
||||
@@ -136,16 +136,16 @@ struct ip_reassembly
|
||||
* utils
|
||||
******************************************************************************/
|
||||
|
||||
#define ip_reassembly_stat_inc(mgr, filed, key) \
|
||||
{ \
|
||||
if ((key)->src_dst_len == IPV4_KEYLEN) \
|
||||
{ \
|
||||
(mgr)->stat.ip4_flow_##filed++; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
(mgr)->stat.ip6_flow_##filed++; \
|
||||
} \
|
||||
#define ip_reassembly_stat_inc(assembler, filed, key) \
|
||||
{ \
|
||||
if ((key)->src_dst_len == IPV4_KEYLEN) \
|
||||
{ \
|
||||
(assembler)->stat.ip4_flow_##filed++; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
(assembler)->stat.ip6_flow_##filed++; \
|
||||
} \
|
||||
}
|
||||
|
||||
static inline void *memdup(const void *src, size_t len)
|
||||
@@ -402,7 +402,7 @@ static inline int ip_flow_is_ready(struct ip_flow *flow)
|
||||
|
||||
// return 0 : success
|
||||
// return -1 : failed
|
||||
static inline int ip_flow_update(struct ip_reassembly *mgr,
|
||||
static inline int ip_flow_update(struct ip_reassembly *assembler,
|
||||
struct ip_flow *flow, const struct packet *pkt,
|
||||
char *frag_data, uint16_t frag_len, uint16_t frag_offset, bool more_frags)
|
||||
{
|
||||
@@ -424,7 +424,7 @@ static inline int ip_flow_update(struct ip_reassembly *mgr,
|
||||
if (flow->frags[IP_FIRST_FRAG_IDX].data != NULL)
|
||||
{
|
||||
IP_REASSEMBLE_DEBUG1("duplicate first fragment bypass", &flow->key);
|
||||
ip_reassembly_stat_inc(mgr, bypass_dup_fist_frag, &flow->key);
|
||||
ip_reassembly_stat_inc(assembler, bypass_dup_fist_frag, &flow->key);
|
||||
return 0;
|
||||
}
|
||||
idx = IP_FIRST_FRAG_IDX;
|
||||
@@ -435,7 +435,7 @@ static inline int ip_flow_update(struct ip_reassembly *mgr,
|
||||
if (flow->frags[IP_LAST_FRAG_IDX].data != NULL)
|
||||
{
|
||||
IP_REASSEMBLE_DEBUG1("duplicate last fragment bypass", &flow->key);
|
||||
ip_reassembly_stat_inc(mgr, bypass_dup_last_frag, &flow->key);
|
||||
ip_reassembly_stat_inc(assembler, bypass_dup_last_frag, &flow->key);
|
||||
return 0;
|
||||
}
|
||||
idx = IP_LAST_FRAG_IDX;
|
||||
@@ -446,7 +446,7 @@ static inline int ip_flow_update(struct ip_reassembly *mgr,
|
||||
if (flow->next_fill_idx >= IP_MAX_FRAG_NUM)
|
||||
{
|
||||
IP_REASSEMBLE_ERROR1("max number of fragment exceeded", &flow->key);
|
||||
ip_reassembly_stat_inc(mgr, fail_many_frag, &flow->key);
|
||||
ip_reassembly_stat_inc(assembler, fail_many_frag, &flow->key);
|
||||
return -1;
|
||||
}
|
||||
idx = flow->next_fill_idx;
|
||||
@@ -464,26 +464,26 @@ static inline int ip_flow_update(struct ip_reassembly *mgr,
|
||||
* ip reassemble manager add/del/reuse/find/update flow
|
||||
******************************************************************************/
|
||||
|
||||
static inline void ip_reassembly_add_flow(struct ip_reassembly *mgr, struct ip_flow *flow)
|
||||
static inline void ip_reassembly_add_flow(struct ip_reassembly *assembler, struct ip_flow *flow)
|
||||
{
|
||||
ip_reassembly_stat_inc(mgr, add, &flow->key);
|
||||
TAILQ_INSERT_TAIL(&mgr->lru, flow, lru);
|
||||
mgr->entry_used++;
|
||||
ip_reassembly_stat_inc(assembler, add, &flow->key);
|
||||
TAILQ_INSERT_TAIL(&assembler->lru, flow, lru);
|
||||
assembler->entry_used++;
|
||||
}
|
||||
|
||||
static inline void ip_reassembly_del_flow(struct ip_reassembly *mgr, struct ip_flow *flow)
|
||||
static inline void ip_reassembly_del_flow(struct ip_reassembly *assembler, struct ip_flow *flow)
|
||||
{
|
||||
ip_reassembly_stat_inc(mgr, del, &flow->key);
|
||||
TAILQ_REMOVE(&mgr->lru, flow, lru);
|
||||
mgr->entry_used--;
|
||||
ip_reassembly_stat_inc(assembler, del, &flow->key);
|
||||
TAILQ_REMOVE(&assembler->lru, flow, lru);
|
||||
assembler->entry_used--;
|
||||
}
|
||||
|
||||
static inline void ip_reassembly_reuse_flow(struct ip_reassembly *mgr, struct ip_flow *flow, const struct ip_flow_key *key, uint64_t now)
|
||||
static inline void ip_reassembly_reuse_flow(struct ip_reassembly *assembler, struct ip_flow *flow, const struct ip_flow_key *key, uint64_t now)
|
||||
{
|
||||
ip_reassembly_del_flow(mgr, flow);
|
||||
ip_reassembly_del_flow(assembler, flow);
|
||||
ip_flow_free(flow);
|
||||
ip_flow_init(flow, key, now);
|
||||
ip_reassembly_add_flow(mgr, flow);
|
||||
ip_reassembly_add_flow(assembler, flow);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -491,13 +491,13 @@ static inline void ip_reassembly_reuse_flow(struct ip_reassembly *mgr, struct ip
|
||||
* free : the first empty entry in the bucket
|
||||
* expired: the first timed-out entry in the bucket
|
||||
*/
|
||||
static struct ip_flow *ip_reassembly_find_flow(struct ip_reassembly *mgr, const struct ip_flow_key *key, struct ip_flow **free, struct ip_flow **expired, uint64_t now)
|
||||
static struct ip_flow *ip_reassembly_find_flow(struct ip_reassembly *assembler, const struct ip_flow_key *key, struct ip_flow **free, struct ip_flow **expired, uint64_t now)
|
||||
{
|
||||
ip_reassembly_stat_inc(mgr, find, key);
|
||||
ip_reassembly_stat_inc(assembler, find, key);
|
||||
|
||||
if (mgr->last != NULL && ip_flow_key_cmp(key, &mgr->last->key) == 0)
|
||||
if (assembler->last != NULL && ip_flow_key_cmp(key, &assembler->last->key) == 0)
|
||||
{
|
||||
return mgr->last;
|
||||
return assembler->last;
|
||||
}
|
||||
|
||||
uint32_t sig1 = 0;
|
||||
@@ -512,14 +512,14 @@ static struct ip_flow *ip_reassembly_find_flow(struct ip_reassembly *mgr, const
|
||||
}
|
||||
|
||||
// get the bucket by hash
|
||||
struct ip_flow *p1 = IP_FRAG_TBL_POS(mgr, sig1);
|
||||
struct ip_flow *p2 = IP_FRAG_TBL_POS(mgr, sig2);
|
||||
struct ip_flow *p1 = IP_FRAG_TBL_POS(assembler, sig1);
|
||||
struct ip_flow *p2 = IP_FRAG_TBL_POS(assembler, sig2);
|
||||
|
||||
// search in the bucket
|
||||
struct ip_flow *old = NULL;
|
||||
struct ip_flow *empty = NULL;
|
||||
uint64_t timeout = mgr->timeout;
|
||||
uint32_t assoc = mgr->bucket_entries;
|
||||
uint64_t timeout = assembler->timeout;
|
||||
uint32_t assoc = assembler->bucket_entries;
|
||||
for (uint32_t i = 0; i != assoc; i++)
|
||||
{
|
||||
if (ip_flow_key_cmp(key, &p1[i].key) == 0)
|
||||
@@ -558,22 +558,22 @@ static struct ip_flow *ip_reassembly_find_flow(struct ip_reassembly *mgr, const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct ip_flow *ip_reassembly_update_flow(struct ip_reassembly *mgr, const struct ip_flow_key *key, uint64_t now)
|
||||
static struct ip_flow *ip_reassembly_update_flow(struct ip_reassembly *assembler, const struct ip_flow_key *key, uint64_t now)
|
||||
{
|
||||
struct ip_flow *flow = NULL;
|
||||
struct ip_flow *free = NULL;
|
||||
struct ip_flow *expired = NULL;
|
||||
|
||||
flow = ip_reassembly_find_flow(mgr, key, &free, &expired, now);
|
||||
flow = ip_reassembly_find_flow(assembler, key, &free, &expired, now);
|
||||
if (flow == NULL)
|
||||
{
|
||||
if (expired)
|
||||
{
|
||||
IP_REASSEMBLE_DEBUG1("add ip flow success: reuse expired entry", key);
|
||||
ip_reassembly_reuse_flow(mgr, expired, key, now);
|
||||
ip_reassembly_stat_inc(mgr, timeout, key);
|
||||
ip_reassembly_reuse_flow(assembler, expired, key, now);
|
||||
ip_reassembly_stat_inc(assembler, timeout, key);
|
||||
|
||||
mgr->last = expired;
|
||||
assembler->last = expired;
|
||||
return expired;
|
||||
}
|
||||
|
||||
@@ -581,27 +581,27 @@ static struct ip_flow *ip_reassembly_update_flow(struct ip_reassembly *mgr, cons
|
||||
{
|
||||
IP_REASSEMBLE_DEBUG1("add ip flow success: use free entry", key);
|
||||
ip_flow_init(free, key, now);
|
||||
ip_reassembly_add_flow(mgr, free);
|
||||
ip_reassembly_add_flow(assembler, free);
|
||||
|
||||
mgr->last = free;
|
||||
assembler->last = free;
|
||||
return free;
|
||||
}
|
||||
|
||||
// no space
|
||||
IP_REASSEMBLE_ERROR1("add ip flow failed: bucket full", key);
|
||||
ip_reassembly_stat_inc(mgr, fail_no_space, key);
|
||||
ip_reassembly_stat_inc(assembler, fail_no_space, key);
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
// expired
|
||||
if (mgr->timeout + flow->create_time <= now)
|
||||
if (assembler->timeout + flow->create_time <= now)
|
||||
{
|
||||
IP_REASSEMBLE_DEBUG1("add ip flow success: reuse expired entry", key);
|
||||
ip_reassembly_reuse_flow(mgr, flow, key, now);
|
||||
ip_reassembly_stat_inc(mgr, timeout, key);
|
||||
ip_reassembly_reuse_flow(assembler, flow, key, now);
|
||||
ip_reassembly_stat_inc(assembler, timeout, key);
|
||||
|
||||
mgr->last = flow;
|
||||
assembler->last = flow;
|
||||
return flow;
|
||||
}
|
||||
// not expired
|
||||
@@ -609,7 +609,7 @@ static struct ip_flow *ip_reassembly_update_flow(struct ip_reassembly *mgr, cons
|
||||
{
|
||||
IP_REASSEMBLE_DEBUG1("find ip flow success: not expire", key);
|
||||
|
||||
mgr->last = flow;
|
||||
assembler->last = flow;
|
||||
return flow;
|
||||
}
|
||||
}
|
||||
@@ -619,7 +619,7 @@ static struct ip_flow *ip_reassembly_update_flow(struct ip_reassembly *mgr, cons
|
||||
* frag reassemble
|
||||
******************************************************************************/
|
||||
|
||||
static struct packet *ip_frag_reassemble(struct ip_reassembly *mgr, struct ip_flow *flow)
|
||||
static struct packet *ip_frag_reassemble(struct ip_reassembly *assembler, struct ip_flow *flow)
|
||||
{
|
||||
struct ip_frag_pkt *first = &flow->frags[IP_FIRST_FRAG_IDX];
|
||||
struct ip_frag_pkt *last = &flow->frags[IP_LAST_FRAG_IDX];
|
||||
@@ -735,12 +735,12 @@ static struct packet *ip_frag_reassemble(struct ip_reassembly *mgr, struct ip_fl
|
||||
return pkt;
|
||||
|
||||
error_out_invalid_length:
|
||||
ip_reassembly_stat_inc(mgr, fail_invalid_length, &flow->key);
|
||||
ip_reassembly_stat_inc(assembler, fail_invalid_length, &flow->key);
|
||||
packet_free(pkt);
|
||||
return NULL;
|
||||
|
||||
error_out_overlap:
|
||||
ip_reassembly_stat_inc(mgr, fail_overlap, &flow->key);
|
||||
ip_reassembly_stat_inc(assembler, fail_overlap, &flow->key);
|
||||
packet_free(pkt);
|
||||
return NULL;
|
||||
}
|
||||
@@ -756,84 +756,84 @@ struct ip_reassembly *ip_reassembly_new(const struct ip_reassembly_options *opts
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct ip_reassembly *mgr = (struct ip_reassembly *)calloc(1, sizeof(struct ip_reassembly));
|
||||
if (mgr == NULL)
|
||||
struct ip_reassembly *assembler = (struct ip_reassembly *)calloc(1, sizeof(struct ip_reassembly));
|
||||
if (assembler == NULL)
|
||||
{
|
||||
IP_REASSEMBLE_ERROR("unable to allocate memory");
|
||||
return NULL;
|
||||
}
|
||||
mgr->enable = opts->enable;
|
||||
mgr->timeout = opts->timeout;
|
||||
mgr->bucket_entries = opts->bucket_entries;
|
||||
mgr->bucket_num = opts->bucket_num;
|
||||
assembler->enable = opts->enable;
|
||||
assembler->timeout = opts->timeout;
|
||||
assembler->bucket_entries = opts->bucket_entries;
|
||||
assembler->bucket_num = opts->bucket_num;
|
||||
|
||||
if (!mgr->enable)
|
||||
if (!assembler->enable)
|
||||
{
|
||||
return mgr;
|
||||
return assembler;
|
||||
}
|
||||
|
||||
uint64_t entry_total = align32pow2(mgr->bucket_num) * mgr->bucket_entries * IP_FRAG_HASH_FNUM;
|
||||
uint64_t entry_total = align32pow2(assembler->bucket_num) * assembler->bucket_entries * IP_FRAG_HASH_FNUM;
|
||||
if (entry_total > UINT32_MAX)
|
||||
{
|
||||
IP_REASSEMBLE_ERROR("bucket_num * bucket_entries is too large");
|
||||
free(mgr);
|
||||
free(assembler);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mgr->entry_total = (uint32_t)entry_total;
|
||||
mgr->entry_mask = (mgr->entry_total - 1) & ~(mgr->bucket_entries - 1);
|
||||
mgr->table = (struct ip_flow *)calloc(mgr->entry_total, sizeof(struct ip_flow));
|
||||
if (mgr->table == NULL)
|
||||
assembler->entry_total = (uint32_t)entry_total;
|
||||
assembler->entry_mask = (assembler->entry_total - 1) & ~(assembler->bucket_entries - 1);
|
||||
assembler->table = (struct ip_flow *)calloc(assembler->entry_total, sizeof(struct ip_flow));
|
||||
if (assembler->table == NULL)
|
||||
{
|
||||
IP_REASSEMBLE_ERROR("unable to allocate memory");
|
||||
free(mgr);
|
||||
free(assembler);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TAILQ_INIT(&(mgr->lru));
|
||||
TAILQ_INIT(&(assembler->lru));
|
||||
|
||||
return mgr;
|
||||
return assembler;
|
||||
}
|
||||
|
||||
void ip_reassembly_free(struct ip_reassembly *mgr)
|
||||
void ip_reassembly_free(struct ip_reassembly *assembler)
|
||||
{
|
||||
if (mgr)
|
||||
if (assembler)
|
||||
{
|
||||
if (mgr->table)
|
||||
if (assembler->table)
|
||||
{
|
||||
for (uint32_t i = 0; i < mgr->entry_total; i++)
|
||||
for (uint32_t i = 0; i < assembler->entry_total; i++)
|
||||
{
|
||||
ip_flow_free(mgr->table + i);
|
||||
ip_flow_free(assembler->table + i);
|
||||
}
|
||||
|
||||
free(mgr->table);
|
||||
mgr->table = NULL;
|
||||
free(assembler->table);
|
||||
assembler->table = NULL;
|
||||
}
|
||||
free(mgr);
|
||||
mgr = NULL;
|
||||
free(assembler);
|
||||
assembler = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void ip_reassembly_expire(struct ip_reassembly *mgr, uint64_t now)
|
||||
void ip_reassembly_expire(struct ip_reassembly *assembler, uint64_t now)
|
||||
{
|
||||
struct ip_flow *flow = NULL;
|
||||
uint64_t timeout = mgr->timeout;
|
||||
uint64_t timeout = assembler->timeout;
|
||||
|
||||
TAILQ_FOREACH(flow, &mgr->lru, lru)
|
||||
TAILQ_FOREACH(flow, &assembler->lru, lru)
|
||||
if (timeout + flow->create_time <= now)
|
||||
{
|
||||
IP_REASSEMBLE_DEBUG1("expire ip flow: discarding old fragmented packets", &flow->key);
|
||||
ip_reassembly_del_flow(mgr, flow);
|
||||
ip_reassembly_stat_inc(mgr, timeout, &flow->key);
|
||||
ip_reassembly_del_flow(assembler, flow);
|
||||
ip_reassembly_stat_inc(assembler, timeout, &flow->key);
|
||||
ip_flow_free(flow);
|
||||
}
|
||||
}
|
||||
|
||||
struct ip_reassembly_stat *ip_reassembly_get_stat(struct ip_reassembly *mgr)
|
||||
struct ip_reassembly_stat *ip_reassembly_get_stat(struct ip_reassembly *assembler)
|
||||
{
|
||||
if (mgr)
|
||||
if (assembler)
|
||||
{
|
||||
return &(mgr->stat);
|
||||
return &(assembler->stat);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -846,12 +846,12 @@ struct ip_reassembly_stat *ip_reassembly_get_stat(struct ip_reassembly *mgr)
|
||||
* The returned packet should be freed by calling the packet_free() function
|
||||
*/
|
||||
|
||||
struct packet *ip_reassembly_packet(struct ip_reassembly *mgr, const struct packet *pkt, uint64_t now)
|
||||
struct packet *ip_reassembly_packet(struct ip_reassembly *assembler, const struct packet *pkt, uint64_t now)
|
||||
{
|
||||
struct packet *pkt1;
|
||||
struct packet *pkt2;
|
||||
|
||||
if (!mgr->enable)
|
||||
if (!assembler->enable)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
@@ -864,10 +864,10 @@ struct packet *ip_reassembly_packet(struct ip_reassembly *mgr, const struct pack
|
||||
|
||||
if (layer->type == LAYER_TYPE_IPV4)
|
||||
{
|
||||
pkt1 = ipv4_reassembly_packet(mgr, pkt, now);
|
||||
pkt1 = ipv4_reassembly_packet(assembler, pkt, now);
|
||||
if (pkt1 && pkt1->frag_layer)
|
||||
{
|
||||
pkt2 = ip_reassembly_packet(mgr, pkt1, now);
|
||||
pkt2 = ip_reassembly_packet(assembler, pkt1, now);
|
||||
packet_free(pkt1);
|
||||
return pkt2;
|
||||
}
|
||||
@@ -876,10 +876,10 @@ struct packet *ip_reassembly_packet(struct ip_reassembly *mgr, const struct pack
|
||||
}
|
||||
else if (layer->type == LAYER_TYPE_IPV6)
|
||||
{
|
||||
pkt1 = ipv6_reassembly_packet(mgr, pkt, now);
|
||||
pkt1 = ipv6_reassembly_packet(assembler, pkt, now);
|
||||
if (pkt1 && pkt1->frag_layer)
|
||||
{
|
||||
pkt2 = ip_reassembly_packet(mgr, pkt1, now);
|
||||
pkt2 = ip_reassembly_packet(assembler, pkt1, now);
|
||||
packet_free(pkt1);
|
||||
return pkt2;
|
||||
}
|
||||
@@ -892,7 +892,7 @@ struct packet *ip_reassembly_packet(struct ip_reassembly *mgr, const struct pack
|
||||
}
|
||||
}
|
||||
|
||||
struct packet *ipv4_reassembly_packet(struct ip_reassembly *mgr, const struct packet *pkt, uint64_t now)
|
||||
struct packet *ipv4_reassembly_packet(struct ip_reassembly *assembler, const struct packet *pkt, uint64_t now)
|
||||
{
|
||||
const struct layer *layer = pkt->frag_layer;
|
||||
const struct ip *hdr = (const struct ip *)layer->hdr_ptr;
|
||||
@@ -911,7 +911,7 @@ struct packet *ipv4_reassembly_packet(struct ip_reassembly *mgr, const struct pa
|
||||
key.ip_id = ipv4_hdr_get_ipid(hdr);
|
||||
key.proto = ipv4_hdr_get_proto(hdr);
|
||||
|
||||
struct ip_flow *flow = ip_reassembly_update_flow(mgr, &key, now);
|
||||
struct ip_flow *flow = ip_reassembly_update_flow(assembler, &key, now);
|
||||
if (flow == NULL)
|
||||
{
|
||||
return NULL;
|
||||
@@ -920,9 +920,9 @@ struct packet *ipv4_reassembly_packet(struct ip_reassembly *mgr, const struct pa
|
||||
char *frag_data = (char *)layer->pld_ptr;
|
||||
bool more_frags = ipv4_hdr_get_mf_flag(hdr);
|
||||
uint16_t frag_offset = ipv4_hdr_get_frag_offset(hdr);
|
||||
if (ip_flow_update(mgr, flow, pkt, frag_data, frag_len, frag_offset, more_frags) != 0)
|
||||
if (ip_flow_update(assembler, flow, pkt, frag_data, frag_len, frag_offset, more_frags) != 0)
|
||||
{
|
||||
ip_reassembly_del_flow(mgr, flow);
|
||||
ip_reassembly_del_flow(assembler, flow);
|
||||
ip_flow_free(flow);
|
||||
return NULL;
|
||||
}
|
||||
@@ -932,8 +932,8 @@ struct packet *ipv4_reassembly_packet(struct ip_reassembly *mgr, const struct pa
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct packet *new_pkt = ip_frag_reassemble(mgr, flow);
|
||||
ip_reassembly_del_flow(mgr, flow);
|
||||
struct packet *new_pkt = ip_frag_reassemble(assembler, flow);
|
||||
ip_reassembly_del_flow(assembler, flow);
|
||||
ip_flow_free(flow);
|
||||
|
||||
return new_pkt;
|
||||
@@ -978,7 +978,7 @@ struct packet *ipv4_reassembly_packet(struct ip_reassembly *mgr, const struct pa
|
||||
* +-----------------+-----------------+--------+--------+-//-+--------+
|
||||
*/
|
||||
|
||||
struct packet *ipv6_reassembly_packet(struct ip_reassembly *mgr, const struct packet *pkt, uint64_t now)
|
||||
struct packet *ipv6_reassembly_packet(struct ip_reassembly *assembler, const struct packet *pkt, uint64_t now)
|
||||
{
|
||||
const struct layer *layer = pkt->frag_layer;
|
||||
const struct ip6_hdr *hdr = (const struct ip6_hdr *)layer->hdr_ptr;
|
||||
@@ -1003,7 +1003,7 @@ struct packet *ipv6_reassembly_packet(struct ip_reassembly *mgr, const struct pa
|
||||
key.ip_id = ipv6_frag_get_ident(frag_hdr);
|
||||
key.proto = 0; // only first fragment has the upper layer protocol
|
||||
|
||||
struct ip_flow *flow = ip_reassembly_update_flow(mgr, &key, now);
|
||||
struct ip_flow *flow = ip_reassembly_update_flow(assembler, &key, now);
|
||||
if (flow == NULL)
|
||||
{
|
||||
return NULL;
|
||||
@@ -1011,9 +1011,9 @@ struct packet *ipv6_reassembly_packet(struct ip_reassembly *mgr, const struct pa
|
||||
|
||||
bool more_frags = ipv6_frag_get_more(frag_hdr);
|
||||
uint16_t frag_offset = ipv6_frag_get_offset(frag_hdr);
|
||||
if (ip_flow_update(mgr, flow, pkt, frag_data, frag_len, frag_offset, more_frags) != 0)
|
||||
if (ip_flow_update(assembler, flow, pkt, frag_data, frag_len, frag_offset, more_frags) != 0)
|
||||
{
|
||||
ip_reassembly_del_flow(mgr, flow);
|
||||
ip_reassembly_del_flow(assembler, flow);
|
||||
ip_flow_free(flow);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1023,8 +1023,8 @@ struct packet *ipv6_reassembly_packet(struct ip_reassembly *mgr, const struct pa
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct packet *new_pkt = ip_frag_reassemble(mgr, flow);
|
||||
ip_reassembly_del_flow(mgr, flow);
|
||||
struct packet *new_pkt = ip_frag_reassemble(assembler, flow);
|
||||
ip_reassembly_del_flow(assembler, flow);
|
||||
ip_flow_free(flow);
|
||||
|
||||
return new_pkt;
|
||||
|
||||
Reference in New Issue
Block a user