- else
- break;
- }
-
- print (vam->ofp,
- "\n%-5s %-7s %-20s %-30s",
- "bd_id", "is_ipv6", "mac_address", "ip_address");
-
- /* Dump Bridge Domain Ip to Mac entries */
- M (BD_IP_MAC_DUMP, mp);
-
- if (bd_id_set)
- mp->bd_id = htonl (bd_id);
- else
- mp->bd_id = ~0;
-
- S (mp);
-
- /* Use a control ping for synchronization */
- MPING (CONTROL_PING, mp_ping);
- S (mp_ping);
-
- W (ret);
- return ret;
-}
-
-static int
-api_tap_connect (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_tap_connect_t *mp;
- u8 mac_address[6];
- u8 random_mac = 1;
- u8 name_set = 0;
- u8 *tap_name;
- u8 *tag = 0;
- ip4_address_t ip4_address;
- u32 ip4_mask_width;
- int ip4_address_set = 0;
- ip6_address_t ip6_address;
- u32 ip6_mask_width;
- int ip6_address_set = 0;
- int ret;
-
- clib_memset (mac_address, 0, sizeof (mac_address));
-
- /* Parse args required to build the message */
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "mac %U", unformat_ethernet_address, mac_address))
- {
- random_mac = 0;
- }
- else if (unformat (i, "random-mac"))
- random_mac = 1;
- else if (unformat (i, "tapname %s", &tap_name))
- name_set = 1;
- else if (unformat (i, "tag %s", &tag))
- ;
- else if (unformat (i, "address %U/%d",
- unformat_ip4_address, &ip4_address, &ip4_mask_width))
- ip4_address_set = 1;
- else if (unformat (i, "address %U/%d",
- unformat_ip6_address, &ip6_address, &ip6_mask_width))
- ip6_address_set = 1;
- else
- break;
- }
-
- if (name_set == 0)
- {
- errmsg ("missing tap name");
- return -99;
- }
- if (vec_len (tap_name) > 63)
- {
- errmsg ("tap name too long");
- return -99;
- }
- vec_add1 (tap_name, 0);
-
- if (vec_len (tag) > 63)
- {
- errmsg ("tag too long");
- return -99;
- }
-
- /* Construct the API message */
- M (TAP_CONNECT, mp);
-
- mp->use_random_mac = random_mac;
- clib_memcpy (mp->mac_address, mac_address, 6);
- clib_memcpy (mp->tap_name, tap_name, vec_len (tap_name));
- if (tag)
- clib_memcpy (mp->tag, tag, vec_len (tag));
-
- if (ip4_address_set)
- {
- mp->ip4_address_set = 1;
- clib_memcpy (mp->ip4_address, &ip4_address, sizeof (mp->ip4_address));
- mp->ip4_mask_width = ip4_mask_width;
- }
- if (ip6_address_set)
- {
- mp->ip6_address_set = 1;
- clib_memcpy (mp->ip6_address, &ip6_address, sizeof (mp->ip6_address));
- mp->ip6_mask_width = ip6_mask_width;
- }
-
- vec_free (tap_name);
- vec_free (tag);
-
- /* send it... */
- S (mp);
-
- /* Wait for a reply... */
- W (ret);
- return ret;
-}
-
-static int
-api_tap_modify (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_tap_modify_t *mp;
- u8 mac_address[6];
- u8 random_mac = 1;
- u8 name_set = 0;
- u8 *tap_name;
- u32 sw_if_index = ~0;
- u8 sw_if_index_set = 0;
- int ret;
-
- clib_memset (mac_address, 0, sizeof (mac_address));
-
- /* Parse args required to build the message */
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "mac %U", unformat_ethernet_address, mac_address))
- {
- random_mac = 0;
- }
- else if (unformat (i, "random-mac"))
- random_mac = 1;
- else if (unformat (i, "tapname %s", &tap_name))
- name_set = 1;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing vpp interface name");
- return -99;
- }
- if (name_set == 0)
- {
- errmsg ("missing tap name");
- return -99;
- }
- if (vec_len (tap_name) > 63)
- {
- errmsg ("tap name too long");
- }
- vec_add1 (tap_name, 0);
-
- /* Construct the API message */
- M (TAP_MODIFY, mp);
-
- mp->use_random_mac = random_mac;
- mp->sw_if_index = ntohl (sw_if_index);
- clib_memcpy (mp->mac_address, mac_address, 6);
- clib_memcpy (mp->tap_name, tap_name, vec_len (tap_name));
- vec_free (tap_name);
-
- /* send it... */
- S (mp);
-
- /* Wait for a reply... */
- W (ret);
- return ret;
-}
-
-static int
-api_tap_delete (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_tap_delete_t *mp;
- u32 sw_if_index = ~0;
- u8 sw_if_index_set = 0;
- int ret;
-
- /* Parse args required to build the message */
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing vpp interface name");
- return -99;