network/netdev: skip processing netdev if it is already detached

No functional change, as currently networkd detaches NetDev objects only
on stop (or invalid .netdev file is loaded).
Preparation for later commits.
This commit is contained in:
Yu Watanabe
2024-10-27 23:36:11 +09:00
parent 3252a1f274
commit 1003093604
10 changed files with 55 additions and 0 deletions

View 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");

View 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");

View 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;

View 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.");

View 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");

View 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;

View File

@@ -103,6 +103,7 @@ static int netdev_create_tuntap(NetDev *netdev) {
int r;
assert(netdev);
assert(netdev->manager);
t = TUNTAP(netdev);
assert(t);

View 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;

View 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);

View 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,