bonding: support custom interface IDs

Change-Id: I78fe58144fa3ba2e1c7135897a13a2541f235c91
Signed-off-by: Alexander Chernavin <achernavin@netgate.com>
diff --git a/src/vat/api_format.c b/src/vat/api_format.c
index 1b61af6..8a9a997 100644
--- a/src/vat/api_format.c
+++ b/src/vat/api_format.c
@@ -7919,6 +7919,7 @@
   u8 mode;
   u8 lb;
   u8 mode_is_set = 0;
+  u32 id = ~0;
 
   clib_memset (mac_address, 0, sizeof (mac_address));
   lb = BOND_LB_L2;
@@ -7934,6 +7935,8 @@
       else if (unformat (i, "hw-addr %U", unformat_ethernet_address,
 			 mac_address))
 	custom_mac = 1;
+      else if (unformat (i, "id %u", &id))
+	;
       else
 	break;
     }
@@ -7951,6 +7954,7 @@
 
   mp->mode = mode;
   mp->lb = lb;
+  mp->id = htonl (id);
 
   if (custom_mac)
     clib_memcpy (mp->mac_address, mac_address, 6);
@@ -23176,7 +23180,8 @@
 _(sw_interface_tap_v2_dump, "")                                         \
 _(bond_create,                                                          \
   "[hw-addr <mac-addr>] {round-robin | active-backup | "                \
-  "broadcast | {lacp | xor} [load-balance { l2 | l23 | l34 }]}")        \
+  "broadcast | {lacp | xor} [load-balance { l2 | l23 | l34 }]} "        \
+  "[id <if-id>]")                                                       \
 _(bond_delete,                                                          \
   "<vpp-if-name> | sw_if_index <id>")                                   \
 _(bond_enslave,                                                         \