diff mbox series

[net-next,v25,04/23] ovpn: keep carrier always on for MP interfaces

Message ID 20250407-b4-ovpn-v25-4-a04eae86e016@openvpn.net
State New
Headers show
Series Introducing OpenVPN Data Channel Offload | expand

Commit Message

Antonio Quartulli April 7, 2025, 7:46 p.m. UTC
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(+)

Comments

Jakub Kicinski April 11, 2025, 3:03 a.m. UTC | #1
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?
Antonio Quartulli April 11, 2025, 8:38 a.m. UTC | #2
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 mbox series

Patch

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,
 };