This commit is contained in:
Pim van Pelt
2022-03-31 23:23:36 +00:00
parent 0bc3e01c9b
commit 786530701d

View File

@ -960,6 +960,7 @@ lcp_itf_pair_create (u32 phy_sw_if_index, u8 *host_if_name,
.host_namespace = 0,
};
ethernet_interface_t *ei;
u32 host_sw_mtu_size;
if (host_if_type == LCP_ITF_HOST_TUN)
args.tap_flags |= TAP_FLAG_TUN;
@ -969,26 +970,6 @@ lcp_itf_pair_create (u32 phy_sw_if_index, u8 *host_if_name,
mac_address_copy (&args.host_mac_addr, &ei->address.mac);
}
if (sw->mtu[VNET_MTU_L3])
{
args.host_mtu_set = 1;
args.host_mtu_size = sw->mtu[VNET_MTU_L3];
}
if (ns && ns[0] != 0)
{
args.host_namespace = ns;
}
vm = vlib_get_main ();
tap_create_if (vm, &args);
if (args.rv < 0)
{
LCP_ITF_PAIR_ERR ("pair_create: could not create tap: retval:%d", args.rv);
return args.rv;
}
/*
* The TAP interface does copy forward the host MTU based on the VPP
* interface's L3 MTU, but it should also ensure that the VPP tap
@ -997,17 +978,28 @@ lcp_itf_pair_create (u32 phy_sw_if_index, u8 *host_if_name,
* ensure that the tap MTU is large enough, taking the VPP interface L3
* if it's set, and otherwise a sensible default.
*/
if (sw->mtu[VNET_MTU_L3])
vnet_sw_interface_set_mtu (vnm, args.sw_if_index, sw->mtu[VNET_MTU_L3]);
host_sw_mtu_size = sw->mtu[VNET_MTU_L3];
if (host_sw_mtu_size)
{
args.host_mtu_set = 1;
args.host_mtu_size = host_sw_mtu_size;
}
else
vnet_sw_interface_set_mtu (vnm, args.sw_if_index, ETHERNET_MAX_PACKET_BYTES);
host_sw_mtu_size = ETHERNET_MAX_PACKET_BYTES;
/* TODO(pim) - figure out why we cannot initalize the carrier. Ideally, once
* the first TAP is created, we copy forward the link-carrier from the hardware.
* However, this provokes a crash on interfaces which are carrier down.
*
* tap_set_carrier (args.sw_if_index, (hw->flags & VNET_HW_INTERFACE_FLAG_LINK_UP));
*/
if (ns && ns[0] != 0)
args.host_namespace = ns;
vm = vlib_get_main ();
tap_create_if (vm, &args);
if (args.rv < 0)
{
LCP_ITF_PAIR_ERR ("pair_create: could not create tap, retval:%d",
args.rv);
return args.rv;
}
vnet_sw_interface_set_mtu (vnm, args.sw_if_index, host_sw_mtu_size);
/*
* get the hw and ethernet of the tap