SNAT: fix invalid outside FIB index 11/5011/4
authorMatus Fabian <matfabia@cisco.com>
Fri, 3 Feb 2017 09:35:55 +0000 (01:35 -0800)
committerMatus Fabian <matfabia@cisco.com>
Fri, 3 Feb 2017 11:25:42 +0000 (03:25 -0800)
Change-Id: Ia5d3d81cbc2ef85fabf9e19c89a52c589a921d14
Signed-off-by: Matus Fabian <matfabia@cisco.com>
src/plugins/snat/in2out.c

index b004773..e783027 100644 (file)
@@ -163,6 +163,13 @@ snat_not_translate (snat_main_t * sm, snat_runtime_t * rt, u32 sw_if_index0,
   if (PREDICT_FALSE(ip0->dst_address.as_u32 == rt->cached_ip4_address))
     return 1;
 
+  /* If outside FIB index is not resolved yet */
+  if (sm->outside_fib_index == ~0)
+    {
+      sm->outside_fib_index =
+        ip4_fib_table_find_or_create_and_lock (sm->outside_vrf_id);
+    }
+
   key0.addr = ip0->dst_address;
   key0.port = udp0->dst_port;
   key0.protocol = proto0;
@@ -528,6 +535,13 @@ snat_hairpinning (snat_main_t *sm,
   u32 new_dst_addr0 = 0, old_dst_addr0, ti = 0, si;
   u16 new_dst_port0, old_dst_port0;
 
+  /* If outside FIB index is not resolved yet */
+  if (sm->outside_fib_index == ~0)
+    {
+      sm->outside_fib_index =
+        ip4_fib_table_find_or_create_and_lock (sm->outside_vrf_id);
+    }
+
   key0.addr = ip0->dst_address;
   key0.port = udp0->dst_port;
   key0.protocol = proto0;