Merge review feedback from mgsmith on upstream gerrit 33709 ps8..10

This commit is contained in:
Pim van Pelt
2021-11-29 20:04:54 +00:00
parent 6caa5e8386
commit cdf07cce34
6 changed files with 108 additions and 109 deletions

View File

@ -131,8 +131,8 @@ lcp_itf_pair_show (u32 phy_sw_if_index)
ns = lcp_get_default_ns();
vlib_cli_output (vm, "lcp default netns %v\n", ns ? (char *) ns : "<unset>");
vlib_cli_output (vm, "lcp lcp-auto-subint %s\n",
lcp_lcp_auto_subint () ? "on" : "off");
vlib_cli_output (vm, "lcp lcp-sync %s\n", lcp_lcp_sync () ? "on" : "off");
lcp_auto_subint () ? "on" : "off");
vlib_cli_output (vm, "lcp lcp-sync %s\n", lcp_sync () ? "on" : "off");
if (phy_sw_if_index == ~0)
{
@ -545,9 +545,9 @@ lcp_itf_pair_config (vlib_main_t *vm, unformat_input_t *input)
}
}
else if (unformat (input, "lcp-auto-subint"))
lcp_set_lcp_auto_subint (1 /* is_auto */);
lcp_set_auto_subint (1 /* is_auto */);
else if (unformat (input, "lcp-sync"))
lcp_set_lcp_sync (1 /* is_auto */);
lcp_set_sync (1 /* is_auto */);
else
return clib_error_return (0, "unknown input `%U'",
format_unformat_error, input);
@ -601,7 +601,6 @@ void
lcp_itf_set_link_state (const lcp_itf_pair_t *lip, u8 state)
{
vnet_main_t *vnm = vnet_get_main ();
vnet_sw_interface_t *si;
int curr_ns_fd, vif_ns_fd;
if (!lip) return;
@ -620,21 +619,14 @@ lcp_itf_set_link_state (const lcp_itf_pair_t *lip, u8 state)
*/
if (state)
{
vnet_sw_interface_admin_up (vnm, lip->lip_host_sw_if_index);
vnet_sw_interface_admin_up (vnm, lip->lip_phy_sw_if_index);
}
else
{
vnet_sw_interface_admin_down (vnm, lip->lip_phy_sw_if_index);
vnet_sw_interface_admin_down (vnm, lip->lip_host_sw_if_index);
}
vnet_netlink_set_link_state (lip->lip_vif_index, state);
/* Set carrier (oper link) on the TAP
*/
si = vnet_get_sw_interface_or_null (vnm, lip->lip_host_sw_if_index);
tap_set_carrier (si->hw_if_index, state);
if (vif_ns_fd != -1)
close (vif_ns_fd);
@ -1041,7 +1033,7 @@ lcp_itf_pair_create (u32 phy_sw_if_index, u8 *host_if_name,
* The TAP is shared by many interfaces, always keep it up.
*/
vnet_sw_interface_admin_up (vnm, host_sw_if_index);
if (lcp_lcp_sync ())
if (lcp_sync ())
{
lip = lcp_itf_pair_get (lcp_itf_pair_find_by_vif (vif_index));
lcp_itf_pair_sync_state (lip);
@ -1109,14 +1101,46 @@ lcp_itf_pair_replace_end (void)
return (0);
}
static clib_error_t *
lcp_itf_pair_link_up_down (vnet_main_t *vnm, u32 hw_if_index, u32 flags)
{
vnet_hw_interface_t *hi;
vnet_sw_interface_t *si;
index_t lipi;
lcp_itf_pair_t *lip;
hi = vnet_get_hw_interface_or_null (vnm, hw_if_index);
if (!hi)
return 0;
lipi = lcp_itf_pair_find_by_phy (hi->sw_if_index);
if (lipi == INDEX_INVALID)
return 0;
lip = lcp_itf_pair_get (lipi);
si = vnet_get_sw_interface_or_null (vnm, lip->lip_host_sw_if_index);
if (!si)
return 0;
if (!lcp_main.test_mode)
{
tap_set_carrier (si->hw_if_index,
(flags & VNET_HW_INTERFACE_FLAG_LINK_UP));
if (flags & VNET_HW_INTERFACE_FLAG_LINK_UP)
{
tap_set_speed (si->hw_if_index, hi->link_speed / 1000);
}
}
return 0;
}
VNET_HW_INTERFACE_LINK_UP_DOWN_FUNCTION (lcp_itf_pair_link_up_down);
static clib_error_t *
lcp_itf_pair_init (vlib_main_t *vm)
{
ip4_main_t *im4 = &ip4_main;
ip6_main_t *im6 = &ip6_main;
ip4_add_del_interface_address_callback_t cb4;
ip6_add_del_interface_address_callback_t cb6;
vlib_punt_hdl_t punt_hdl = vlib_punt_client_register("linux-cp");
lcp_itf_pair_logger = vlib_log_register_class ("linux-cp", "if");
@ -1130,14 +1154,6 @@ lcp_itf_pair_init (vlib_main_t *vm)
tcp_punt_unknown (vm, 0, 1);
tcp_punt_unknown (vm, 1, 1);
cb4.function = lcp_itf_ip4_add_del_interface_addr;
cb4.function_opaque = 0;
vec_add1 (im4->add_del_interface_address_callbacks, cb4);
cb6.function = lcp_itf_ip6_add_del_interface_addr;
cb6.function_opaque = 0;
vec_add1 (im6->add_del_interface_address_callbacks, cb6);
return NULL;
}