Misc. janitorial work: 65/1765/1
authorDave Barach <dave@barachs.net>
Sun, 26 Jun 2016 14:29:03 +0000 (10:29 -0400)
committerDave Barach <dave@barachs.net>
Sun, 26 Jun 2016 14:37:14 +0000 (10:37 -0400)
Remove private / name-colliding "give me the first ip address on an
interface" routine from proxy_node.c

Return a proper error from ip4_lookup_init / ip6_lookup_init.

Change-Id: Idd3c574424ba2ea77c263af16b02cd4ad0cb4605
Signed-off-by: Dave Barach <dave@barachs.net>
vnet/vnet/dhcp/proxy_node.c
vnet/vnet/ip/ip4.h
vnet/vnet/ip/ip4_forward.c
vnet/vnet/ip/ip6_forward.c
vnet/vnet/ip/ip_feature_registration.c

index 69edae7..2073b3f 100644 (file)
@@ -93,24 +93,6 @@ u8 * format_dhcp_proxy_header_with_length (u8 * s, va_list * args)
   return s;
 }
 
-/* get first interface address */
-static ip4_address_t *
-ip4_interface_first_address (ip4_main_t * im, u32 sw_if_index)
-{
-  ip_lookup_main_t * lm = &im->lookup_main;
-  ip_interface_address_t * ia = 0;
-  ip4_address_t * result = 0;
-
-  foreach_ip_interface_address (lm, ia, sw_if_index, 
-                                1 /* honor unnumbered */,
-  ({
-    ip4_address_t * a = ip_interface_address_get_address (lm, ia);
-    result = a;
-    break;
-  }));
-  return result;
-}
-
 static uword
 dhcp_proxy_to_server_input (vlib_main_t * vm,
                             vlib_node_runtime_t * node,
@@ -290,7 +272,7 @@ dhcp_proxy_to_server_input (vlib_main_t * vm,
                    * RX interface, if not unnumbered. otherwise use
                    * the loopback interface's ip address.
                    */
-                  ia0 = ip4_interface_first_address(&ip4_main, sw_if_index);
+                  ia0 = ip4_interface_first_address(&ip4_main, sw_if_index, 0);
                   
                   if (ia0 == 0)
                     {
@@ -597,7 +579,7 @@ dhcp_proxy_to_client_input (vlib_main_t * vm,
       if (swif->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED)
           sw_if_index = swif->unnumbered_sw_if_index;
 
-      ia0 = ip4_interface_first_address (&ip4_main, sw_if_index);
+      ia0 = ip4_interface_first_address (&ip4_main, sw_if_index, 0);
       if (ia0 == 0)
         {
           error0 = DHCP_PROXY_ERROR_NO_INTERFACE_ADDRESS;
@@ -1113,7 +1095,7 @@ dhcp_option_82_address_show_command_fn (vlib_main_t * vm,
           swif = vnet_get_sw_interface (vnm, sw_if_index0);
           sw_if_index = (swif->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED) ?
             swif->unnumbered_sw_if_index : sw_if_index0;
-          ia0 = ip4_interface_first_address(&ip4_main, sw_if_index);
+          ia0 = ip4_interface_first_address(&ip4_main, sw_if_index, 0);
           if (ia0)
             {
               vlib_cli_output (vm, "%=20s%=20s", "interface", 
index b24f18d..7ed5bf5 100644 (file)
@@ -386,6 +386,10 @@ void ip4_adjacency_set_interface_route (vnet_main_t * vnm,
                                        u32 sw_if_index,
                                        u32 if_address_index);
 
+ip4_address_t *
+ip4_interface_first_address (ip4_main_t * im, u32 sw_if_index,
+                             ip_interface_address_t ** result_ia);
+
 /* Send an ARP request to see if given destination is reachable on given interface. */
 clib_error_t *
 ip4_probe_neighbor (vlib_main_t * vm, ip4_address_t * dst, u32 sw_if_index);
index 08a1785..96036dc 100644 (file)
@@ -1451,6 +1451,7 @@ clib_error_t *
 ip4_lookup_init (vlib_main_t * vm)
 {
   ip4_main_t * im = &ip4_main;
+  clib_error_t * error;
   uword i;
 
   for (i = 0; i < ARRAY_LEN (im->fib_masks); i++)
@@ -1501,9 +1502,9 @@ ip4_lookup_init (vlib_main_t * vm)
                               "ip4 arp");
   }
 
-  ip4_feature_init (vm, im);
+  error = ip4_feature_init (vm, im);
 
-  return 0;
+  return error;
 }
 
 VLIB_INIT_FUNCTION (ip4_lookup_init);
index b558787..afb23f1 100644 (file)
@@ -2858,6 +2858,7 @@ static clib_error_t *
 ip6_lookup_init (vlib_main_t * vm)
 {
   ip6_main_t * im = &ip6_main;
+  clib_error_t * error;
   uword i;
 
   for (i = 0; i < ARRAY_LEN (im->fib_masks); i++)
@@ -2924,9 +2925,9 @@ ip6_lookup_init (vlib_main_t * vm)
                               "ip6 neighbor discovery");
   }
 
-  ip6_feature_init (vm, im);
+  error = ip6_feature_init (vm, im);
 
-  return 0;
+  return error;
 }
 
 VLIB_INIT_FUNCTION (ip6_lookup_init);
index e100b1e..5f0d58e 100644 (file)
@@ -119,6 +119,12 @@ ip_feature_init_cast (vlib_main_t * vm,
         return clib_error_return (0, "comma_split failed!");
       
       p = hash_get_mem (index_by_name, a_name);
+      /* 
+       * Note: the next two errors mean that the xxx_FEATURE_INIT macros are
+       * b0rked. As in: if you code "A depends on B," and you forget
+       * to define a FEATURE_INIT macro for B, you lose. 
+       * Nonexistent graph nodes are tolerated.
+       */
       if (p == 0)
         return clib_error_return (0, "feature node '%s' not found", a_name);
       a_index = p[0];