Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
vppinfra: bihash walk cb typedef and continue/stop controls
[vpp.git]
/
src
/
vnet
/
ip
/
reass
/
ip6_full_reass.c
diff --git
a/src/vnet/ip/reass/ip6_full_reass.c
b/src/vnet/ip/reass/ip6_full_reass.c
index
aaaf56a
..
7bcfdfc
100644
(file)
--- a/
src/vnet/ip/reass/ip6_full_reass.c
+++ b/
src/vnet/ip/reass/ip6_full_reass.c
@@
-1092,6
+1092,9
@@
ip6_full_reassembly_inline (vlib_main_t * vm,
next0 = IP6_FULL_REASSEMBLY_NEXT_INPUT;
goto skip_reass;
}
next0 = IP6_FULL_REASSEMBLY_NEXT_INPUT;
goto skip_reass;
}
+ vnet_buffer (b0)->ip.reass.ip6_frag_hdr_offset =
+ (u8 *) frag_hdr - (u8 *) ip0;
+
if (0 == ip6_frag_hdr_offset (frag_hdr))
{
// first fragment - verify upper-layer is present
if (0 == ip6_frag_hdr_offset (frag_hdr))
{
// first fragment - verify upper-layer is present
@@
-1110,9
+1113,6
@@
ip6_full_reassembly_inline (vlib_main_t * vm,
next0 = IP6_FULL_REASSEMBLY_NEXT_ICMP_ERROR;
goto skip_reass;
}
next0 = IP6_FULL_REASSEMBLY_NEXT_ICMP_ERROR;
goto skip_reass;
}
- vnet_buffer (b0)->ip.reass.ip6_frag_hdr_offset =
- (u8 *) frag_hdr - (u8 *) ip0;
-
ip6_full_reass_kv_t kv;
u8 do_handoff = 0;
ip6_full_reass_kv_t kv;
u8 do_handoff = 0;
@@
-1199,14
+1199,17
@@
ip6_full_reassembly_inline (vlib_main_t * vm,
error0 = IP6_ERROR_REASS_LIMIT_REACHED;
}
error0 = IP6_ERROR_REASS_LIMIT_REACHED;
}
- b0->error = node->errors[error0];
-
if (~0 != bi0)
{
skip_reass:
to_next[0] = bi0;
to_next += 1;
n_left_to_next -= 1;
if (~0 != bi0)
{
skip_reass:
to_next[0] = bi0;
to_next += 1;
n_left_to_next -= 1;
+
+ /* bi0 might have been updated by reass_finalize, reload */
+ b0 = vlib_get_buffer (vm, bi0);
+ b0->error = node->errors[error0];
+
if (next0 == IP6_FULL_REASSEMBLY_NEXT_HANDOFF)
{
if (PREDICT_FALSE (b0->flags & VLIB_BUFFER_IS_TRACED))
if (next0 == IP6_FULL_REASSEMBLY_NEXT_HANDOFF)
{
if (PREDICT_FALSE (b0->flags & VLIB_BUFFER_IS_TRACED))
@@
-1219,7
+1222,6
@@
ip6_full_reassembly_inline (vlib_main_t * vm,
}
else if (is_feature && IP6_ERROR_NONE == error0)
{
}
else if (is_feature && IP6_ERROR_NONE == error0)
{
- b0 = vlib_get_buffer (vm, bi0);
vnet_feature_next (&next0, b0);
}
vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next,
vnet_feature_next (&next0, b0);
}
vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next,
@@
-1347,7
+1349,7
@@
typedef struct
clib_bihash_48_8_t *new_hash;
} ip6_rehash_cb_ctx;
clib_bihash_48_8_t *new_hash;
} ip6_rehash_cb_ctx;
-static
void
+static
int
ip6_rehash_cb (clib_bihash_kv_48_8_t * kv, void *_ctx)
{
ip6_rehash_cb_ctx *ctx = _ctx;
ip6_rehash_cb (clib_bihash_kv_48_8_t * kv, void *_ctx)
{
ip6_rehash_cb_ctx *ctx = _ctx;
@@
-1355,6
+1357,7
@@
ip6_rehash_cb (clib_bihash_kv_48_8_t * kv, void *_ctx)
{
ctx->failure = 1;
}
{
ctx->failure = 1;
}
+ return (BIHASH_WALK_CONTINUE);
}
static void
}
static void