IP6 link-local table

- IPv6 link local table is a per-SW interface array of IPv6 unicast FIBs
- the per-interface ocst is sizeof(fib_table_t) which is small,
  w.r.t. the cost of an interface
- FE80::/10 in the 'global' table points to a DPO that performs a lookup in the
  input interface's LL fib.

Change-Id: Ice834b25ebeeacb2e929d7c864d7ec8c09918cbe
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
diff --git a/src/vnet/ip/ping.c b/src/vnet/ip/ping.c
index a142754..a929a0c 100755
--- a/src/vnet/ip/ping.c
+++ b/src/vnet/ip/ping.c
@@ -314,13 +314,14 @@
   h0->ip6.src_address = *pa6;
 
   /* Fill in the correct source now */
-  ip6_address_t *a = ip6_interface_first_address (im, sw_if_index);
-  if (!a)
+  if (!ip6_src_address_for_packet (&im->lookup_main,
+				   sw_if_index,
+				   &h0->ip6.dst_address,
+				   &h0->ip6.src_address))
     {
       vlib_buffer_free (vm, &bi0, 1);
       return SEND_PING_NO_SRC_ADDRESS;
     }
-  h0->ip6.src_address = a[0];
 
   /* Fill in icmp fields */
   h0->icmp.type = ICMP6_echo_request;