Message ID | 20250407-b4-ovpn-v25-4-a04eae86e016@openvpn.net |
---|---|
State | New |
Headers | show |
Series | Introducing OpenVPN Data Channel Offload | expand |
On Mon, 07 Apr 2025 21:46:12 +0200 Antonio Quartulli wrote: > + /* carrier for P2P interfaces is switched on and off when > + * the peer is added or deleted. > + * > + * in case of P2MP interfaces we just keep the carrier always on > + */ > + if (ovpn->mode == OVPN_MODE_MP) > + netif_carrier_on(dev); Any reason why you turn it during open rather than leaving it be before registration? Now the link is down until first open, then it stays up even if user closes?
On 11/04/2025 05:03, Jakub Kicinski wrote: > On Mon, 07 Apr 2025 21:46:12 +0200 Antonio Quartulli wrote: >> + /* carrier for P2P interfaces is switched on and off when >> + * the peer is added or deleted. >> + * >> + * in case of P2MP interfaces we just keep the carrier always on >> + */ >> + if (ovpn->mode == OVPN_MODE_MP) >> + netif_carrier_on(dev); > > Any reason why you turn it during open rather than leaving it be before > registration? Now the link is down until first open, then it stays up > even if user closes? Mh your concern makes sense. Originally Andrew suggested adding the carrier_on() to _probe(), which I interpreted as _open() (I don't think virtual drivers have any _probe() hook). Being the goal to keep the carrier always on for MP ifaces, I'd say I should move the carrier_on() call to newlink(). There I can set the carrier on if MP or off if P2P. Regards,
diff --git a/drivers/net/ovpn/main.c b/drivers/net/ovpn/main.c index b19f1406d87d5a1ed45b00133d642b1ad9f4f6f7..15802dfd26fcbcad42c387d42f665b8b47604e8a 100644 --- a/drivers/net/ovpn/main.c +++ b/drivers/net/ovpn/main.c @@ -21,7 +21,22 @@ #include "io.h" #include "proto.h" +static int ovpn_net_open(struct net_device *dev) +{ + struct ovpn_priv *ovpn = netdev_priv(dev); + + /* carrier for P2P interfaces is switched on and off when + * the peer is added or deleted. + * + * in case of P2MP interfaces we just keep the carrier always on + */ + if (ovpn->mode == OVPN_MODE_MP) + netif_carrier_on(dev); + return 0; +} + static const struct net_device_ops ovpn_netdev_ops = { + .ndo_open = ovpn_net_open, .ndo_start_xmit = ovpn_net_xmit, };
An ovpn interface configured in MP mode will keep carrier always on and let the user decide when to bring it administratively up and down. This way a MP node (i.e. a server) will keep its interface always up and running, even when no peer is connected. Signed-off-by: Antonio Quartulli <antonio@openvpn.net> --- drivers/net/ovpn/main.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)