X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Flisp-gpe%2Flisp_gpe_fwd_entry.c;fp=src%2Fvnet%2Flisp-gpe%2Flisp_gpe_fwd_entry.c;h=efa724e0d5b00e48cab22f90a6d740fdd6b41913;hb=25ad0ea266f03af1f4ec563a3de498bd49de6d61;hp=6e6885af440fee184a1441e11d464732d7c74c16;hpb=7eac916e1b00d6a3393a09925e1634d71bf30568;p=vpp.git 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); } }