Attached hosts

allow this config to function:
  set int ip address loop0 169.254.1.1/32  (the default GW address for attached hosts)
  set int unnumbered af_packet0 use loop0  ('enable' IP on the host interface)
  ip route add 192.168.1.1/32 via af_packet0 (where to find the host)
repeat for each host and host interface.
Inter-host communication is throught the /32 routes.
To allow this:
 1 - attached host routes have the ATTACHED flag set, so the ARP code accepts then as legitimate sources
 2 - unnumbered interfaces inherit the source address from the IP interface

Change-Id: Ib66c5f0e848c528f79372813adc3a0c11b50717f
Signed-off-by: Neale Ranns <nranns@cisco.com>
diff --git a/src/vnet/interface_cli.c b/src/vnet/interface_cli.c
index bd715e4..ec8530d 100644
--- a/src/vnet/interface_cli.c
+++ b/src/vnet/interface_cli.c
@@ -864,6 +864,10 @@
       si->unnumbered_sw_if_index = (u32) ~ 0;
       ip4_sw_interface_enable_disable (unnumbered_sw_if_index, 0);
       ip6_sw_interface_enable_disable (unnumbered_sw_if_index, 0);
+      ip4_main.lookup_main.if_address_pool_index_by_sw_if_index
+	[unnumbered_sw_if_index] = ~0;
+      ip6_main.lookup_main.if_address_pool_index_by_sw_if_index
+	[unnumbered_sw_if_index] = ~0;
     }
   else if (is_set)
     {
@@ -871,6 +875,14 @@
       si->unnumbered_sw_if_index = inherit_from_sw_if_index;
       ip4_sw_interface_enable_disable (unnumbered_sw_if_index, 1);
       ip6_sw_interface_enable_disable (unnumbered_sw_if_index, 1);
+      ip4_main.lookup_main.if_address_pool_index_by_sw_if_index
+	[unnumbered_sw_if_index] =
+	ip4_main.lookup_main.if_address_pool_index_by_sw_if_index
+	[inherit_from_sw_if_index];
+      ip6_main.lookup_main.if_address_pool_index_by_sw_if_index
+	[unnumbered_sw_if_index] =
+	ip6_main.lookup_main.if_address_pool_index_by_sw_if_index
+	[inherit_from_sw_if_index];
     }
 
   return 0;