fib: Decouple source from priority and behaviour
[vpp.git] / src / plugins / pppoe / pppoe.c
index 0595767..1f8a728 100644 (file)
@@ -37,6 +37,8 @@
 
 pppoe_main_t pppoe_main;
 
+static fib_source_t pppoe_fib_src;
+
 u8 *
 format_pppoe_session (u8 * s, va_list * args)
 {
@@ -65,14 +67,6 @@ format_pppoe_name (u8 * s, va_list * args)
   return format (s, "pppoe_session%d", dev_instance);
 }
 
-static uword
-dummy_interface_tx (vlib_main_t * vm,
-                   vlib_node_runtime_t * node, vlib_frame_t * frame)
-{
-  clib_warning ("you shouldn't be here, leaking buffers...");
-  return frame->n_vectors;
-}
-
 static clib_error_t *
 pppoe_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
 {
@@ -87,7 +81,6 @@ pppoe_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
 VNET_DEVICE_CLASS (pppoe_device_class,static) = {
   .name = "PPPoE",
   .format_device_name = format_pppoe_name,
-  .tx_function = dummy_interface_tx,
   .admin_up_down_function = pppoe_interface_admin_up_down,
 };
 /* *INDENT-ON* */
@@ -147,7 +140,7 @@ pppoe_build_rewrite (vnet_main_t * vnm,
  */
 static void
 pppoe_fixup (vlib_main_t * vm,
-            ip_adjacency_t * adj, vlib_buffer_t * b0, const void *data)
+            const ip_adjacency_t * adj, vlib_buffer_t * b0, const void *data)
 {
   const pppoe_session_t *t;
   pppoe_header_t *pppoe0;
@@ -385,7 +378,7 @@ int vnet_pppoe_add_del_session
 
       /* add reverse route for client ip */
       fib_table_entry_path_add (a->decap_fib_index, &pfx,
-                               FIB_SOURCE_PLUGIN_HI, FIB_ENTRY_FLAG_NONE,
+                               pppoe_fib_src, FIB_ENTRY_FLAG_NONE,
                                fib_proto_to_dpo (pfx.fp_proto),
                                &pfx.fp_addr, sw_if_index, ~0,
                                1, NULL, FIB_ROUTE_PATH_FLAG_NONE);
@@ -417,7 +410,7 @@ int vnet_pppoe_add_del_session
 
       /* delete reverse route for client ip */
       fib_table_entry_path_remove (a->decap_fib_index, &pfx,
-                                  FIB_SOURCE_PLUGIN_HI,
+                                  pppoe_fib_src,
                                   fib_proto_to_dpo (pfx.fp_proto),
                                   &pfx.fp_addr,
                                   sw_if_index, ~0, 1,
@@ -730,6 +723,10 @@ pppoe_init (vlib_main_t * vm)
   ethernet_register_input_type (vm, ETHERNET_TYPE_PPPOE_DISCOVERY,
                                pppoe_cp_dispatch_node.index);
 
+  pppoe_fib_src = fib_source_allocate ("pppoe",
+                                      FIB_SOURCE_PRIORITY_HI,
+                                      FIB_SOURCE_BH_API);
+
   return 0;
 }
 
@@ -738,7 +735,7 @@ VLIB_INIT_FUNCTION (pppoe_init);
 /* *INDENT-OFF* */
 VLIB_PLUGIN_REGISTER () = {
     .version = VPP_BUILD_VER,
-    .description = "PPPoE",
+    .description = "PPP over Ethernet (PPPoE)",
 };
 /* *INDENT-ON* */