plugins: unload plugin if early init fails

Change-Id: I32f68e2ee8f5d32962acdefb0193583f71d342b3
Signed-off-by: Damjan Marion <damarion@cisco.com>
diff --git a/src/vlib/cli.h b/src/vlib/cli.h
index e713808..e8ba507 100644
--- a/src/vlib/cli.h
+++ b/src/vlib/cli.h
@@ -162,6 +162,15 @@
     x.next_cli_command = cm->cli_command_registrations;                 \
     cm->cli_command_registrations = &x;                                 \
 }                                                                       \
+static void __vlib_cli_command_unregistration_##x (void)                \
+    __attribute__((__destructor__)) ;                                   \
+static void __vlib_cli_command_unregistration_##x (void)                \
+{                                                                       \
+    vlib_main_t * vm = vlib_get_main();                                 \
+    vlib_cli_main_t *cm = &vm->cli_main;                                \
+    VLIB_REMOVE_FROM_LINKED_LIST (cm->cli_command_registrations, &x,    \
+                                  next_cli_command);                    \
+}                                                                       \
 __VA_ARGS__ vlib_cli_command_t x
 #define VLIB_CLI_PARSE_RULE(x) \
   vlib_cli_parse_rule_t x