fib: fix source address get error for p2p if 01/32801/2
authorjxm <jiangxiaoming@outlook.com>
Mon, 21 Jun 2021 04:53:59 +0000 (04:53 +0000)
committerMatthew Smith <mgsmith@netgate.com>
Wed, 25 Aug 2021 21:22:16 +0000 (21:22 +0000)
Type: fix
Signed-off-by: jxm <jiangxiaoming@outlook.com>
Change-Id: I5a6a1ce9f232d4ed0fd4707cd5aa9b46cc8a2a5a

src/vnet/fib/fib_sas.c

index 230fcd1..8abac86 100644 (file)
@@ -61,6 +61,18 @@ fib_sas4_get (u32 sw_if_index,
         d_tmp.ip4 = *dst;
     }
 
+    if (vnet_sw_interface_is_p2p(vnet_get_main(), sw_if_index))
+    {
+        ip4_address_t *ip4;
+        ip4 = ip_interface_get_first_ip (sw_if_index, 1);
+        if (ip4) {
+            src->as_u32 = ip4->as_u32;
+            return (true);
+        } else {
+            return (false);
+        }
+    }
+
     /*
      * If the interface is unnumbered then use the IP interface
      */
@@ -111,6 +123,18 @@ fib_sas6_get (u32 sw_if_index,
         return (true);
     }
 
+    if (vnet_sw_interface_is_p2p(vnet_get_main(), sw_if_index))
+    {
+        ip6_address_t *ip6;
+        ip6 = ip_interface_get_first_ip (sw_if_index, 0);
+        if (ip6) {
+            ip6_address_copy(src, ip6);
+            return (true);
+        } else {
+            return (false);
+        }
+    }
+
     /*
      * get the source address from the glean adjacency
      */