]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/netdev: skip processing netdev if it is already detached 34935/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 27 Oct 2024 14:36:11 +0000 (23:36 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 29 Oct 2024 18:07:32 +0000 (03:07 +0900)
No functional change, as currently networkd detaches NetDev objects only
on stop (or invalid .netdev file is loaded).
Preparation for later commits.

src/network/netdev/batadv.c
src/network/netdev/bridge.c
src/network/netdev/fou-tunnel.c
src/network/netdev/l2tp-tunnel.c
src/network/netdev/macsec.c
src/network/netdev/netdev.c
src/network/netdev/tuntap.c
src/network/netdev/wireguard.c
src/network/netdev/wlan.c
src/network/networkd-queue.c

index e600727c20095a6f0536367c2bec0f8a38a57000..9806d8eb7c3aae12dab7a29df59dee76ec738948 100644 (file)
@@ -163,6 +163,9 @@ static int netdev_batadv_post_create(NetDev *netdev, Link *link) {
 
         assert(netdev);
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = sd_genl_message_new(netdev->manager->genl, BATADV_NL_NAME, BATADV_CMD_SET_MESH, &message);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not allocate netlink message: %m");
index 25b0f81aa07b42f5a824475cd99b3da2eda100e7..4dfc393830667f2ba984c99627adbb0025ef628c 100644 (file)
@@ -159,6 +159,9 @@ static int netdev_bridge_post_create(NetDev *netdev, Link *link) {
 
         assert(netdev);
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = sd_rtnl_message_new_link(netdev->manager->rtnl, &req, RTM_NEWLINK, netdev->ifindex);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not allocate netlink message: %m");
index e962c6c64beb0456b2a3c74025fe6527ec43bc42..a85aff2e6d394eed8e6a27e7fdb40583d5f0a531 100644 (file)
@@ -89,6 +89,7 @@ static int netdev_create_fou_tunnel_message(NetDev *netdev, sd_netlink_message *
         int r;
 
         assert(netdev);
+        assert(netdev->manager);
 
         r = sd_genl_message_new(netdev->manager->genl, FOU_GENL_NAME, FOU_CMD_ADD, &m);
         if (r < 0)
@@ -128,6 +129,9 @@ static int netdev_fou_tunnel_create(NetDev *netdev) {
 
         assert(FOU(netdev));
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = netdev_create_fou_tunnel_message(netdev, &m);
         if (r < 0)
                 return r;
index c1372bb1e07d2fb01c84c3a5972f96f85e700dc6..c87e44797baac945083f317a8791b2494a591599 100644 (file)
@@ -94,6 +94,8 @@ static int l2tp_session_new_static(L2tpTunnel *t, const char *filename, unsigned
 
 static int netdev_l2tp_create_message_tunnel(NetDev *netdev, union in_addr_union *local_address, sd_netlink_message **ret) {
         assert(local_address);
+        assert(netdev);
+        assert(netdev->manager);
 
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         uint16_t encap_type;
@@ -188,6 +190,7 @@ static int netdev_l2tp_create_message_session(NetDev *netdev, L2tpSession *sessi
         int r;
 
         assert(netdev);
+        assert(netdev->manager);
         assert(session);
         assert(session->tunnel);
 
@@ -385,6 +388,11 @@ static int l2tp_create_session(NetDev *netdev, L2tpSession *session) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *n = NULL;
         int r;
 
+        assert(netdev);
+
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = netdev_l2tp_create_message_session(netdev, session, &n);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
@@ -429,6 +437,9 @@ static int l2tp_create_tunnel(NetDev *netdev) {
         L2tpTunnel *t = L2TP(netdev);
         int r;
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = l2tp_get_local_address(netdev, &local_address);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not find local address.");
index 187da4134411331cd2cd39e9ad32f67be44c6f82..15d79906f7737776dd1dbb7769a52628a246f735 100644 (file)
@@ -224,6 +224,7 @@ static int netdev_macsec_create_message(NetDev *netdev, int command, sd_netlink_
 
         assert(netdev);
         assert(netdev->ifindex > 0);
+        assert(netdev->manager);
 
         r = sd_genl_message_new(netdev->manager->genl, MACSEC_GENL_NAME, command, &m);
         if (r < 0)
@@ -334,6 +335,9 @@ static int netdev_macsec_configure_receive_association(NetDev *netdev, ReceiveAs
         assert(netdev);
         assert(a);
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = netdev_macsec_create_message(netdev, MACSEC_CMD_ADD_RXSA, &m);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
@@ -406,6 +410,9 @@ static int netdev_macsec_configure_receive_channel(NetDev *netdev, ReceiveChanne
         assert(netdev);
         assert(c);
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = netdev_macsec_create_message(netdev, MACSEC_CMD_ADD_RXSC, &m);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
@@ -454,6 +461,9 @@ static int netdev_macsec_configure_transmit_association(NetDev *netdev, Transmit
         assert(netdev);
         assert(a);
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = netdev_macsec_create_message(netdev, MACSEC_CMD_ADD_TXSA, &m);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Failed to create netlink message: %m");
index 965b218a068093d946b13e0c04d0cd427d3f1548..f7598dc7eac151beda03e8a884b2b6e9e5dc4a41 100644 (file)
@@ -676,6 +676,7 @@ static int independent_netdev_create(NetDev *netdev) {
         int r;
 
         assert(netdev);
+        assert(netdev->manager);
 
         /* create netdev */
         if (NETDEV_VTABLE(netdev)->create) {
@@ -780,6 +781,9 @@ static int stacked_netdev_process_request(Request *req, Link *link, void *userda
         assert(req);
         assert(link);
 
+        if (!netdev_is_managed(netdev))
+                return 1; /* Already detached, due to e.g. reloading .netdev files, cancelling the request. */
+
         r = netdev_is_ready_to_create(netdev, link);
         if (r <= 0)
                 return r;
@@ -825,6 +829,9 @@ int link_request_stacked_netdev(Link *link, NetDev *netdev) {
         if (!IN_SET(netdev->state, NETDEV_STATE_LOADING, NETDEV_STATE_FAILED) || netdev->ifindex > 0)
                 return 0; /* Already created. */
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         link->stacked_netdevs_created = false;
         r = link_queue_request_full(link, REQUEST_TYPE_NETDEV_STACKED,
                                     netdev, (mfree_func_t) netdev_unref,
@@ -849,6 +856,9 @@ static int independent_netdev_process_request(Request *req, Link *link, void *us
 
         assert(!link);
 
+        if (!netdev_is_managed(netdev))
+                return 1; /* Already detached, due to e.g. reloading .netdev files, cancelling the request. */
+
         r = netdev_is_ready_to_create(netdev, NULL);
         if (r <= 0)
                 return r;
@@ -872,6 +882,9 @@ static int netdev_request_to_create(NetDev *netdev) {
         if (netdev_is_stacked(netdev))
                 return 0;
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         r = netdev_is_ready_to_create(netdev, NULL);
         if (r < 0)
                 return r;
index f5be31ed9438e09ca06028609cd8a0cf72136029..c012bc15916f99cd6f735ec281cd7a04812188a7 100644 (file)
@@ -103,6 +103,7 @@ static int netdev_create_tuntap(NetDev *netdev) {
         int r;
 
         assert(netdev);
+        assert(netdev->manager);
         t = TUNTAP(netdev);
         assert(t);
 
index 9715cf4034c3892152cebcc88d4e50cfa2b2f085..9e8dfb259a95157b3379005804e0c62e2f92dccc 100644 (file)
@@ -234,6 +234,9 @@ static int wireguard_set_interface(NetDev *netdev) {
         Wireguard *w = WIREGUARD(netdev);
         int r;
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         for (WireguardPeer *peer_start = w->peers; peer_start || !sent_once; ) {
                 uint16_t i = 0;
 
@@ -399,6 +402,9 @@ static int peer_resolve_endpoint(WireguardPeer *peer) {
 
         netdev = NETDEV(peer->wireguard);
 
+        if (!netdev_is_managed(netdev))
+                return 0; /* Already detached, due to e.g. reloading .netdev files. */
+
         if (!peer->endpoint_host || !peer->endpoint_port)
                 /* Not necessary to resolve the endpoint. */
                 return 0;
index 904e40fe81c552f972e57ee784a6e6c1e8fa1972..5b9db8b219ba90eeee0a5506cb5433bed51a0c0b 100644 (file)
@@ -27,6 +27,9 @@ static void wlan_init(NetDev *netdev) {
 static int wlan_get_wiphy(NetDev *netdev, Wiphy **ret) {
         WLan *w = WLAN(netdev);
 
+        if (!netdev_is_managed(netdev))
+                return -ENOENT; /* Already detached, due to e.g. reloading .netdev files. */
+
         if (w->wiphy_name)
                 return wiphy_get_by_name(netdev->manager, w->wiphy_name, ret);
 
index dcb9bd0549fb618eee5790a9968697f493f29ec6..e898ea6e85406ab8422d7c2069f77faf4a41a430 100644 (file)
@@ -193,6 +193,7 @@ int netdev_queue_request(
         int r;
 
         assert(netdev);
+        assert(netdev->manager);
 
         r = request_new(netdev->manager, NULL, REQUEST_TYPE_NETDEV_INDEPENDENT,
                         netdev, (mfree_func_t) netdev_unref,