2025-04-11, 10:04:10 +0200, Antonio Quartulli wrote:
Hi Jakub,
thanks for taking the time to go through my patchset :)
On 11/04/2025 04:54, Jakub Kicinski wrote:
On Mon, 07 Apr 2025 21:46:09 +0200 Antonio Quartulli wrote:
+static int ovpn_netdev_notifier_call(struct notifier_block *nb,
unsigned long state, void *ptr)
+{
- struct net_device *dev = netdev_notifier_info_to_dev(ptr);
- if (!ovpn_dev_is_valid(dev))
return NOTIFY_DONE;
- switch (state) {
- case NETDEV_REGISTER:
/* add device to internal list for later destruction upon
* unregistration
*/
break;
- case NETDEV_UNREGISTER:
/* can be delivered multiple times, so check registered flag,
* then destroy the interface
*/
break;
- case NETDEV_POST_INIT:
- case NETDEV_GOING_DOWN:
- case NETDEV_DOWN:
- case NETDEV_UP:
- case NETDEV_PRE_UP:
- default:
return NOTIFY_DONE;
- }
Why are you using a notifier to get events for your own device?
My understanding is that this is the standard approach to:
- hook in the middle of registration/deregistration;
- handle events generated by other components/routines.
I see in /drivers/net/ almost every driver registers a notifier for their own device.
I think most of them register a notifier for their lower device (bridge port, real device under a vlan, or similar).
I've mentioned at some point that it would be more usual to replace this notifier with a custom dellink, and that ovpn->registered could likely be replaced with checking for NETREG_REGISTERED. I just thought it could be cleaned up a bit later, but it seems Jakub wants it done before taking the patches :)