diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c index f9d774eee9e38..db88e5bf90f48 100644 --- a/src/network/networkd-setlink.c +++ b/src/network/networkd-setlink.c @@ -543,6 +543,12 @@ static int link_is_ready_to_set_link(Link *link, Request *req) { m = link->network->vrf->ifindex; } + if (m == (uint32_t) link->master_ifindex) { + /* The requested master is already set. */ + link->master_set = true; + return -ENOANO; /* indicate to cancel the request. */ + } + req->userdata = UINT32_TO_PTR(m); break; } @@ -568,6 +574,8 @@ static int link_process_set_link(Request *req, Link *link, void *userdata) { assert(link); r = link_is_ready_to_set_link(link, req); + if (r == -ENOANO) + return 1; /* Cancel the request. */ if (r <= 0) return r;