diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2017-04-04 15:26:54 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2017-04-05 15:20:03 +0000 |
commit | 25ad0ea266f03af1f4ec563a3de498bd49de6d61 (patch) | |
tree | 85e4b13ed002e08f75c391d4f313f966acecac25 /src | |
parent | 7eac916e1b00d6a3393a09925e1634d71bf30568 (diff) |
LISP: fix crash when adding a negative forwarding entry, VPP-681
Change-Id: I190696da5555c05074ee0eee32eb914bd16e38fb
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c b/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c index 6e6885af440..efa724e0d5b 100644 --- a/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c +++ b/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c @@ -283,20 +283,21 @@ static void create_fib_entries (lisp_gpe_fwd_entry_t * lfe) { dpo_proto_t dproto; - - if (!lfe->is_src_dst) - { - /* install normal destination route if not src/dst and be done */ - ip_src_fib_add_route (lfe->eid_fib_index, - &lfe->key->rmt.ippref, lfe->paths); - return; - } - + ip_prefix_t ippref; dproto = (ip_prefix_version (&lfe->key->rmt.ippref) == IP4 ? DPO_PROTO_IP4 : DPO_PROTO_IP6); - lfe->src_fib_index = ip_dst_fib_add_route (lfe->eid_fib_index, - &lfe->key->rmt.ippref); + if (lfe->is_src_dst) + { + lfe->src_fib_index = ip_dst_fib_add_route (lfe->eid_fib_index, + &lfe->key->rmt.ippref); + memcpy (&ippref, &lfe->key->lcl.ippref, sizeof (ippref)); + } + else + { + lfe->src_fib_index = lfe->eid_fib_index; + memcpy (&ippref, &lfe->key->rmt.ippref, sizeof (ippref)); + } if (LISP_GPE_FWD_ENTRY_TYPE_NEGATIVE == lfe->type) { @@ -318,14 +319,12 @@ create_fib_entries (lisp_gpe_fwd_entry_t * lfe) dpo_copy (&dpo, drop_dpo_get (dproto)); break; } - ip_src_fib_add_route_w_dpo (lfe->src_fib_index, - &lfe->key->lcl.ippref, &dpo); + ip_src_fib_add_route_w_dpo (lfe->src_fib_index, &ippref, &dpo); dpo_reset (&dpo); } else { - ip_src_fib_add_route (lfe->src_fib_index, - &lfe->key->lcl.ippref, lfe->paths); + ip_src_fib_add_route (lfe->src_fib_index, &ippref, lfe->paths); } } |