adl: move allow/deny list function to plugin

Provide binary API compatibility support for the "cop" APIs until vpp
21.01.

Change the deprecation date in map.api to vpp 21.01.

Type: refactor
Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I0e60d96de4ae9ae4448f134cf257934126f3b760
diff --git a/src/vnet/cop/cop_api.c b/src/vnet/cop/cop_api.c
index 1415bf0..6ebcebc 100644
--- a/src/vnet/cop/cop_api.c
+++ b/src/vnet/cop/cop_api.c
@@ -2,7 +2,7 @@
  *------------------------------------------------------------------
  * cop_api.c - cop api
  *
- * Copyright (c) 2016 Cisco and/or its affiliates.
+ * Copyright (c) 2016,2020 Cisco and/or its affiliates.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
@@ -22,7 +22,6 @@
 
 #include <vnet/interface.h>
 #include <vnet/api_errno.h>
-#include <vnet/cop/cop.h>
 
 #include <vnet/vnet_msg_enum.h>
 
@@ -46,6 +45,36 @@
 _(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable)   \
 _(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable)
 
+typedef struct
+{
+  u32 sw_if_index;
+  u8 ip4;
+  u8 ip6;
+  u8 default_cop;
+  u32 fib_id;
+} cop_whitelist_enable_disable_args_t;
+
+/*
+ * This API will be deprecated in vpp 20.12.
+ *
+ * Continue to support it for the moment if the "adl" plugin
+ * is loaded...
+ */
+static int default_interface_enable_disable_callback
+  (u32 sw_if_index, int enable_disable)
+{
+  return VNET_API_ERROR_UNIMPLEMENTED;
+}
+
+static int (*interface_enable_disable_callback) (u32, int) =
+  default_interface_enable_disable_callback;
+
+void
+register_vl_api_cop_interface_enable_disable_callback (void *cb)
+{
+  interface_enable_disable_callback = cb;
+}
+
 static void vl_api_cop_interface_enable_disable_t_handler
   (vl_api_cop_interface_enable_disable_t * mp)
 {
@@ -58,13 +87,36 @@
 
   enable_disable = (int) mp->enable_disable;
 
-  rv = cop_interface_enable_disable (sw_if_index, enable_disable);
+  rv = (*interface_enable_disable_callback) (sw_if_index, enable_disable);
 
   BAD_SW_IF_INDEX_LABEL;
 
   REPLY_MACRO (VL_API_COP_INTERFACE_ENABLE_DISABLE_REPLY);
 }
 
+/*
+ * This API will be deprecated in vpp 20.12.
+ *
+ * Continue to support it for the moment if the "adl" plugin
+ * is loaded...
+ */
+
+static int default_whitelist_enable_disable_callback
+  (cop_whitelist_enable_disable_args_t * a)
+{
+  return VNET_API_ERROR_UNIMPLEMENTED;
+}
+
+static int (*whitelist_enable_disable_callback)
+  (cop_whitelist_enable_disable_args_t * a) =
+  default_whitelist_enable_disable_callback;
+
+void
+register_vl_api_cop_whitelist_enable_disable_callback (void *cb)
+{
+  whitelist_enable_disable_callback = cb;
+}
+
 static void vl_api_cop_whitelist_enable_disable_t_handler
   (vl_api_cop_whitelist_enable_disable_t * mp)
 {
@@ -81,7 +133,7 @@
   a->default_cop = mp->default_cop;
   a->fib_id = ntohl (mp->fib_id);
 
-  rv = cop_whitelist_enable_disable (a);
+  rv = (*whitelist_enable_disable_callback) (a);
 
   BAD_SW_IF_INDEX_LABEL;