}
#endif /* VPP_API_TEST_BUILTIN */
+#define VHOST_USER_POLLING_MODE 0
+#define VHOST_USER_INTERRUPT_MODE 1
+#define VHOST_USER_ADAPTIVE_MODE 2
+
+static u8 *
+api_format_vhost_user_operation_mode (u8 * s, va_list * va)
+{
+ int operation_mode = va_arg (*va, int);
+
+ switch (operation_mode)
+ {
+ case VHOST_USER_POLLING_MODE:
+ s = format (s, "%-9s", "polling");
+ break;
+ case VHOST_USER_INTERRUPT_MODE:
+ s = format (s, "%-9s", "interrupt");
+ break;
+ default:
+ s = format (s, "%-9s", "invalid");
+ }
+ return s;
+}
+
+static uword
+api_unformat_vhost_user_operation_mode (unformat_input_t * input,
+ va_list * args)
+{
+ u8 *operation_mode = va_arg (*args, u8 *);
+ uword rc = 1;
+
+ if (unformat (input, "interrupt"))
+ *operation_mode = VHOST_USER_INTERRUPT_MODE;
+ else if (unformat (input, "polling"))
+ *operation_mode = VHOST_USER_POLLING_MODE;
+ else
+ rc = 0;
+
+ return rc;
+}
+
static uword
unformat_policer_rate_type (unformat_input_t * input, va_list * args)
{
vl_api_ip4_arp_event_t_handler (vl_api_ip4_arp_event_t * mp)
{
u32 sw_if_index = ntohl (mp->sw_if_index);
- errmsg ("arp %s event: address %U new mac %U sw_if_index %d",
+ errmsg ("arp %s event: pid %d address %U new mac %U sw_if_index %d\n",
mp->mac_ip ? "mac/ip binding" : "address resolution",
- format_ip4_address, &mp->address,
+ ntohl (mp->pid), format_ip4_address, &mp->address,
format_ethernet_address, mp->new_mac, sw_if_index);
}
vl_api_ip6_nd_event_t_handler (vl_api_ip6_nd_event_t * mp)
{
u32 sw_if_index = ntohl (mp->sw_if_index);
- errmsg ("ip6 nd %s event: address %U new mac %U sw_if_index %d",
+ errmsg ("ip6 nd %s event: pid %d address %U new mac %U sw_if_index %d\n",
mp->mac_ip ? "mac/ip binding" : "address resolution",
- format_ip6_address, mp->address,
+ ntohl (mp->pid), format_ip6_address, mp->address,
format_ethernet_address, mp->new_mac, sw_if_index);
}
vam->result_ready = 1;
}
+static void
+ vl_api_bridge_domain_set_mac_age_reply_t_handler
+ (vl_api_bridge_domain_set_mac_age_reply_t * mp)
+{
+ vat_main_t *vam = &vat_main;
+ i32 retval = ntohl (mp->retval);
+ if (vam->async_mode)
+ {
+ vam->async_errors += (retval < 0);
+ }
+ else
+ {
+ vam->retval = retval;
+ vam->result_ready = 1;
+ }
+}
+
+static void vl_api_bridge_domain_set_mac_age_reply_t_handler_json
+ (vl_api_bridge_domain_set_mac_age_reply_t * mp)
+{
+ vat_main_t *vam = &vat_main;
+ vat_json_node_t node;
+
+ vat_json_init_object (&node);
+ vat_json_object_add_int (&node, "retval", ntohl (mp->retval));
+
+ vat_json_print (vam->ofp, &node);
+ vat_json_free (&node);
+
+ vam->retval = ntohl (mp->retval);
+ vam->result_ready = 1;
+}
+
static void
vl_api_l2_flags_reply_t_handler (vl_api_l2_flags_reply_t * mp)
{
{
errmsg ("DHCP compl event: pid %d %s hostname %s host_addr %U "
"router_addr %U host_mac %U",
- mp->pid, mp->is_ipv6 ? "ipv6" : "ipv4", mp->hostname,
+ ntohl (mp->pid), mp->is_ipv6 ? "ipv6" : "ipv4", mp->hostname,
format_ip4_address, &mp->host_address,
format_ip4_address, &mp->router_address,
format_ethernet_address, mp->host_mac);
vat_json_object_add_string_copy (node, "name", mp->name);
vat_json_object_add_uint (node, "cir", ntohl (mp->cir));
vat_json_object_add_uint (node, "eir", ntohl (mp->eir));
- vat_json_object_add_uint (node, "cb", ntohl (mp->cb));
- vat_json_object_add_uint (node, "eb", ntohl (mp->eb));
+ vat_json_object_add_uint (node, "cb", clib_net_to_host_u64 (mp->cb));
+ vat_json_object_add_uint (node, "eb", clib_net_to_host_u64 (mp->eb));
vat_json_object_add_string_copy (node, "rate_type", rate_type_str);
vat_json_object_add_string_copy (node, "round_type", round_type_str);
vat_json_object_add_string_copy (node, "type", type_str);
_(BRIDGE_DOMAIN_ADD_DEL_REPLY, bridge_domain_add_del_reply) \
_(BRIDGE_DOMAIN_DETAILS, bridge_domain_details) \
_(BRIDGE_DOMAIN_SW_IF_DETAILS, bridge_domain_sw_if_details) \
+_(BRIDGE_DOMAIN_SET_MAC_AGE_REPLY, bridge_domain_set_mac_age_reply) \
_(L2FIB_ADD_DEL_REPLY, l2fib_add_del_reply) \
_(L2_FLAGS_REPLY, l2_flags_reply) \
_(BRIDGE_FLAGS_REPLY, bridge_flags_reply) \
return (vam->retval);
}
+static int
+api_bridge_domain_set_mac_age (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ vl_api_bridge_domain_set_mac_age_t *mp;
+ u32 bd_id = ~0;
+ u32 mac_age = 0;
+ int ret;
+
+ /* Parse args required to build the message */
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "bd_id %d", &bd_id));
+ else if (unformat (i, "mac-age %d", &mac_age));
+ else
+ break;
+ }
+
+ if (bd_id == ~0)
+ {
+ errmsg ("missing bridge domain");
+ return -99;
+ }
+
+ if (mac_age > 255)
+ {
+ errmsg ("mac age must be less than 256 ");
+ return -99;
+ }
+
+ M (BRIDGE_DOMAIN_SET_MAC_AGE, mp);
+
+ mp->bd_id = htonl (bd_id);
+ mp->mac_age = (u8) mac_age;
+
+ S (mp);
+ W (ret);
+ return ret;
+}
+
static int
api_l2_flags (vat_main_t * vam)
{
/* Construct the API message */
M (DHCP_CLIENT_CONFIG, mp);
- mp->sw_if_index = ntohl (sw_if_index);
+ mp->sw_if_index = htonl (sw_if_index);
clib_memcpy (mp->hostname, hostname, vec_len (hostname));
vec_free (hostname);
mp->is_add = is_add;
mp->want_dhcp_event = disable_event ? 0 : 1;
- mp->pid = getpid ();
+ mp->pid = htonl (getpid ());
/* send it... */
S (mp);
u8 use_custom_mac = 0;
u8 *tag = 0;
int ret;
+ u8 operation_mode = VHOST_USER_POLLING_MODE;
/* Shut up coverity */
memset (hwaddr, 0, sizeof (hwaddr));
is_server = 1;
else if (unformat (i, "tag %s", &tag))
;
+ else if (unformat (i, "mode %U",
+ api_unformat_vhost_user_operation_mode,
+ &operation_mode))
+ ;
else
break;
}
M (CREATE_VHOST_USER_IF, mp);
+ mp->operation_mode = operation_mode;
mp->is_server = is_server;
clib_memcpy (mp->sock_filename, file_name, vec_len (file_name));
vec_free (file_name);
u8 sw_if_index_set = 0;
u32 sw_if_index = (u32) ~ 0;
int ret;
+ u8 operation_mode = VHOST_USER_POLLING_MODE;
while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
{
;
else if (unformat (i, "server"))
is_server = 1;
+ else if (unformat (i, "mode %U",
+ api_unformat_vhost_user_operation_mode,
+ &operation_mode))
+ ;
else
break;
}
M (MODIFY_VHOST_USER_IF, mp);
+ mp->operation_mode = operation_mode;
mp->sw_if_index = ntohl (sw_if_index);
mp->is_server = is_server;
clib_memcpy (mp->sock_filename, file_name, vec_len (file_name));
{
vat_main_t *vam = &vat_main;
- print (vam->ofp, "%-25s %3" PRIu32 " %6" PRIu32 " %8x %6d %7d %s",
+ print (vam->ofp, "%-25s %3" PRIu32 " %6" PRIu32 " %8x %6d %7d %U %s",
(char *) mp->interface_name,
ntohl (mp->sw_if_index), ntohl (mp->virtio_net_hdr_sz),
clib_net_to_host_u64 (mp->features), mp->is_server,
- ntohl (mp->num_regions), (char *) mp->sock_filename);
+ ntohl (mp->num_regions), api_format_vhost_user_operation_mode,
+ mp->operation_mode, (char *) mp->sock_filename);
print (vam->ofp, " Status: '%s'", strerror (ntohl (mp->sock_errno)));
}
vat_json_object_add_string_copy (node, "sock_filename", mp->sock_filename);
vat_json_object_add_uint (node, "num_regions", ntohl (mp->num_regions));
vat_json_object_add_uint (node, "sock_errno", ntohl (mp->sock_errno));
+ vat_json_object_add_uint (node, "mode", mp->operation_mode);
}
static int
vl_api_control_ping_t *mp_ping;
int ret;
print (vam->ofp,
- "Interface name idx hdr_sz features server regions filename");
+ "Interface name idx hdr_sz features server regions mode"
+ " filename");
/* Get list of vhost-user interfaces */
M (SW_INTERFACE_VHOST_USER_DUMP, mp);
M (WANT_IP4_ARP_EVENTS, mp);
mp->enable_disable = enable_disable;
- mp->pid = getpid ();
+ mp->pid = htonl (getpid ());
mp->address = address.as_u32;
S (mp);
M (WANT_IP6_ND_EVENTS, mp);
mp->enable_disable = enable_disable;
- mp->pid = getpid ();
+ mp->pid = htonl (getpid ());
clib_memcpy (mp->address, &address, sizeof (ip6_address_t));
S (mp);
"<intfc> | sw_if_index <id> bd_id <bridge-domain-id>\n" \
"[shg <split-horizon-group>] [bvi]\n" \
"enable | disable") \
+_(bridge_domain_set_mac_age, "bd_id <bridge-domain-id> mac-age 0-255\n")\
_(bridge_domain_add_del, \
- "bd_id <bridge-domain-id> [flood 1|0] [uu-flood 1|0] [forward 1|0] [learn 1|0] [arp-term 1|0] [del]\n") \
+ "bd_id <bridge-domain-id> [flood 1|0] [uu-flood 1|0] [forward 1|0] [learn 1|0] [arp-term 1|0] [mac-age 0-255] [del]\n") \
_(bridge_domain_dump, "[bd_id <bridge-domain-id>]\n") \
_(l2fib_add_del, \
"mac <mac-addr> bd_id <bridge-domain-id> [del] | sw_if <intfc> | sw_if_index <id> [static] [filter] [bvi] [count <nn>]\n") \
"[translate-2-[1|2]] [push_dot1q 0] tag1 <nn> tag2 <nn>") \
_(create_vhost_user_if, \
"socket <filename> [server] [renumber <dev_instance>] " \
- "[mac <mac_address>]") \
+ "[mac <mac_address>] " \
+ "[mode <interrupt | polling>]") \
_(modify_vhost_user_if, \
"<intfc> | sw_if_index <nn> socket <filename>\n" \
- "[server] [renumber <dev_instance>]") \
+ "[server] [renumber <dev_instance>] " \
+ "[mode <interrupt | polling>]") \
_(delete_vhost_user_if, "<intfc> | sw_if_index <nn>") \
_(sw_interface_vhost_user_dump, "") \
_(show_version, "") \