Allow interface types to override glean adjacency behaivour
[vpp.git] / src / vnet / ethernet / arp.c
index f46e6f5..da56c2b 100644 (file)
@@ -455,8 +455,10 @@ arp_update_adjacency (vnet_main_t * vnm, u32 sw_if_index, u32 ai)
 
   switch (adj->lookup_next_index)
     {
-    case IP_LOOKUP_NEXT_ARP:
     case IP_LOOKUP_NEXT_GLEAN:
+      adj_glean_update_rewrite (ai);
+      break;
+    case IP_LOOKUP_NEXT_ARP:
       if (NULL != e)
        {
          adj_nbr_walk_nh4 (sw_if_index,
@@ -1123,6 +1125,12 @@ arp_input (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
                                  &arp0->ip4_over_ethernet[0]);
              goto drop1;
            }
+         else if (arp0->opcode ==
+                  clib_host_to_net_u16 (ETHERNET_ARP_OPCODE_request) &&
+                  (dst_is_local0 == 0))
+           {
+             goto drop1;
+           }
 
        send_reply:
          /* Send a reply.
@@ -2481,6 +2489,8 @@ ethernet_arp_change_mac (u32 sw_if_index)
     change_arp_mac (sw_if_index, e);
   }));
   /* *INDENT-ON* */
+
+  adj_glean_update_rewrite (adj_glean_get (FIB_PROTOCOL_IP4, sw_if_index));
 }
 
 void