Small fixes to lisp-gpe header and decap
- enforce lisp-gpe router mode (set P bit) - fix selection of ip6 decap node - fix dual-dual lool error index init Change-Id: I1a9623c0eb7e81a2cfb60efaa88dc44ee65e664d Signed-off-by: Florin Coras <fcoras@cisco.com>
This commit is contained in:

committed by
Damjan Marion

parent
633134b78a
commit
c7e91e4451
@ -58,8 +58,12 @@ next_proto_to_next_index[LISP_GPE_NEXT_PROTOS] = {
|
||||
static u32
|
||||
next_protocol_to_next_index (lisp_gpe_header_t * lgh, u8 * next_header)
|
||||
{
|
||||
/* lisp-gpe router */
|
||||
if (PREDICT_TRUE((lgh->flags & LISP_GPE_FLAGS_P)
|
||||
&& lgh->next_protocol < LISP_GPE_NEXT_PROTOS))
|
||||
return next_proto_to_next_index[lgh->next_protocol];
|
||||
/* legay lisp router */
|
||||
if (PREDICT_FALSE((lgh->flags & LISP_GPE_FLAGS_P) == 0))
|
||||
else if ((lgh->flags & LISP_GPE_FLAGS_P) == 0)
|
||||
{
|
||||
ip4_header_t * iph = (ip4_header_t *) next_header;
|
||||
if ((iph->ip_version_and_header_length & 0xF0) == 0x40)
|
||||
@ -69,10 +73,6 @@ next_protocol_to_next_index (lisp_gpe_header_t * lgh, u8 * next_header)
|
||||
else
|
||||
return LISP_GPE_INPUT_NEXT_DROP;
|
||||
}
|
||||
/* lisp-gpe router */
|
||||
else if ((lgh->flags & LISP_GPE_FLAGS_P)
|
||||
&& lgh->next_protocol < LISP_GPE_NEXT_PROTOS)
|
||||
return next_proto_to_next_index[lgh->next_protocol];
|
||||
else
|
||||
return LISP_GPE_INPUT_NEXT_DROP;
|
||||
}
|
||||
@ -199,7 +199,7 @@ lisp_gpe_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
{
|
||||
vnet_buffer(b1)->sw_if_index[VLIB_RX] = si1[0];
|
||||
pkts_decapsulated++;
|
||||
error0 = 0;
|
||||
error1 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -253,7 +253,10 @@ lisp_gpe_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
|
||||
b0 = vlib_get_buffer (vm, bi0);
|
||||
|
||||
/* udp leaves current_data pointing at the lisp header */
|
||||
/* udp leaves current_data pointing at the lisp header
|
||||
* TODO: there's no difference in processing between v4 and v6
|
||||
* encapsulated packets so the code should be simplified if ip header
|
||||
* info is not going to be used for dp smrs/dpsec */
|
||||
if (is_v4)
|
||||
{
|
||||
vlib_buffer_advance (
|
||||
|
@ -227,19 +227,24 @@ vnet_lisp_gpe_add_del_fwd_entry (vnet_lisp_gpe_add_del_fwd_entry_args_t * a,
|
||||
ip_prefix_t * dpref, * spref;
|
||||
uword * lookup_next_index, * lgpe_sw_if_index, * lnip;
|
||||
u8 ip_ver;
|
||||
|
||||
/* treat negative fwd entries separately */
|
||||
if (a->is_negative)
|
||||
return add_del_negative_fwd_entry (lgm, a);
|
||||
|
||||
dpref = &gid_address_ippref(&a->deid);
|
||||
spref = &gid_address_ippref(&a->seid);
|
||||
ip_ver = ip_prefix_version(dpref);
|
||||
|
||||
a->next_protocol = ip_ver == IP4 ?
|
||||
LISP_GPE_NEXT_PROTO_IP4 : LISP_GPE_NEXT_PROTO_IP6;
|
||||
a->flags |= LISP_GPE_FLAGS_P;
|
||||
|
||||
/* add/del tunnel to tunnels pool and prepares rewrite */
|
||||
rv = add_del_tunnel (a, &tun_index);
|
||||
if (rv)
|
||||
return rv;
|
||||
|
||||
dpref = &gid_address_ippref(&a->deid);
|
||||
spref = &gid_address_ippref(&a->seid);
|
||||
ip_ver = ip_prefix_version(dpref);
|
||||
|
||||
/* setup adjacency for eid */
|
||||
memset (&adj, 0, sizeof(adj));
|
||||
adj.n_adj = 1;
|
||||
@ -570,7 +575,7 @@ lisp_gpe_init (vlib_main_t *vm)
|
||||
udp_register_dst_port (vm, UDP_DST_PORT_lisp_gpe,
|
||||
lisp_gpe_ip4_input_node.index, 1 /* is_ip4 */);
|
||||
udp_register_dst_port (vm, UDP_DST_PORT_lisp_gpe6,
|
||||
lisp_gpe_ip4_input_node.index, 0 /* is_ip4 */);
|
||||
lisp_gpe_ip6_input_node.index, 0 /* is_ip4 */);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user