GRE tests and fixes
[vpp.git] / vnet / vnet / adj / adj_internal.h
index f2d0ce0..833bc7c 100644 (file)
  * Debug macro
  */
 #ifdef ADJ_DEBUG
-#define ADJ_DBG(_adj, _fmt, _args...)                  \
-{                                                      \
-    clib_warning("adj:[%d:%p]:" _fmt,                  \
-                _adj->heap_handle, _adj,               \
-                ##_args);                              \
+#define ADJ_DBG(_adj, _fmt, _args...)          \
+{                                              \
+    clib_warning("adj:[%d:%p]:" _fmt,          \
+                _adj - adj_pool, _adj,         \
+                ##_args);                      \
 }
 #else
 #define ADJ_DBG(_e, _fmt, _args...)
 #endif
 
-static inline vlib_node_registration_t*
-adj_get_rewrite_node (fib_link_t linkt)
+static inline u32
+adj_get_rewrite_node (vnet_link_t linkt)
 {
     switch (linkt) {
-    case FIB_LINK_IP4:
-       return (&ip4_rewrite_node);
-    case FIB_LINK_IP6:
-       return (&ip6_rewrite_node);
-    case FIB_LINK_MPLS:
-       return (&mpls_output_node);
-    case FIB_LINK_ETHERNET:
-       return (&adj_l2_rewrite_node);
-    }
-    ASSERT(0);
-    return (NULL);
-}
-
-static inline vnet_l3_packet_type_t
-adj_fib_link_2_vnet (fib_link_t linkt)
-{
-    switch (linkt)
-    {
-    case FIB_LINK_IP4:
-       return (VNET_L3_PACKET_TYPE_IP4);
-    case FIB_LINK_IP6:
-       return (VNET_L3_PACKET_TYPE_IP6);
-    case FIB_LINK_MPLS:
-       return (VNET_L3_PACKET_TYPE_MPLS_UNICAST);
-    case FIB_LINK_ETHERNET:
+    case VNET_LINK_IP4:
+       return (ip4_rewrite_node.index);
+    case VNET_LINK_IP6:
+       return (ip6_rewrite_node.index);
+    case VNET_LINK_MPLS:
+       return (mpls_output_node.index);
+    case VNET_LINK_ETHERNET:
+       return (adj_l2_rewrite_node.index);
+    case VNET_LINK_ARP:
        break;
     }
+    ASSERT(0);
     return (0);
 }
 
-static inline vnet_l3_packet_type_t
+static inline vnet_link_t
 adj_fib_proto_2_nd (fib_protocol_t fp)
 {
     switch (fp)
     {
     case FIB_PROTOCOL_IP4:
-       return (VNET_L3_PACKET_TYPE_ARP);
+       return (VNET_LINK_ARP);
     case FIB_PROTOCOL_IP6:
-       return (VNET_L3_PACKET_TYPE_IP6);
+       return (VNET_LINK_IP6);
     case FIB_PROTOCOL_MPLS:
-       return (VNET_L3_PACKET_TYPE_MPLS_UNICAST);
+       return (VNET_LINK_MPLS);
     }
     return (0);
 }
 
+/**
+ * @brief
+ * Get a pointer to an adjacency object from its index
+ */
+static inline adj_index_t
+adj_get_index (ip_adjacency_t *adj)
+{
+    return (adj - adj_pool);
+}
+
+extern void adj_nbr_update_rewrite_internal (ip_adjacency_t *adj,
+                                            ip_lookup_next_t adj_next_index,
+                                            u32 complete_next_index,
+                                            u32 next_index,
+                                            u8 *rewrite);
+
 extern ip_adjacency_t * adj_alloc(fib_protocol_t proto);
 
-extern void adj_nbr_remove(fib_protocol_t nh_proto,
-                          fib_link_t link_type,
+extern void adj_nbr_remove(adj_index_t ai,
+                           fib_protocol_t nh_proto,
+                          vnet_link_t link_type,
                           const ip46_address_t *nh_addr,
                           u32 sw_if_index);
 extern void adj_glean_remove(fib_protocol_t proto,