From 2c390ae5125e306d91f505562b6b177c26c90341 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Wed, 8 Sep 2021 21:14:25 +0000 Subject: [PATCH] Also set TAP carrier on netlink messages --- lcpng_nl_sync.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lcpng_nl_sync.c b/lcpng_nl_sync.c index 650c744..dd76cb0 100644 --- a/lcpng_nl_sync.c +++ b/lcpng_nl_sync.c @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -793,6 +794,7 @@ lcp_nl_link_add (struct rtnl_link *rl, void *ctx) { vnet_main_t *vnm = vnet_get_main (); lcp_itf_pair_t *lip; + vnet_sw_interface_t *si; int admin_state; NL_DBG ("link_add: netlink %U", format_nl_object, rl); @@ -809,6 +811,8 @@ lcp_nl_link_add (struct rtnl_link *rl, void *ctx) } admin_state = (IFF_UP & rtnl_link_get_flags (rl)); + // Note: cannot use lcp_itf_set_link_state() here because it creates a loop + // by sending a netlink message. if (admin_state) { vnet_sw_interface_admin_up (vnm, lip->lip_host_sw_if_index); @@ -819,6 +823,10 @@ lcp_nl_link_add (struct rtnl_link *rl, void *ctx) vnet_sw_interface_admin_down (vnm, lip->lip_phy_sw_if_index); vnet_sw_interface_admin_down (vnm, lip->lip_host_sw_if_index); } + /* 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, admin_state); lcp_nl_link_set_mtu (rl, lip); lcp_nl_link_set_lladdr (rl, lip);