mirror of
https://github.com/systemd/systemd.git
synced 2025-02-01 09:47:35 +03:00
network/netdev: do not try to update if not supported
Some netdevs cannot update there properties after created. Let's skip requests in that case.
This commit is contained in:
parent
0cd35fdce5
commit
cc3592f055
@ -72,4 +72,5 @@ const NetDevVTable bare_udp_vtable = {
|
||||
.fill_message_create = netdev_bare_udp_fill_message_create,
|
||||
.create_type = NETDEV_CREATE_INDEPENDENT,
|
||||
.iftype = ARPHRD_NONE,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
@ -60,6 +60,7 @@ const NetDevVTable ipvlan_vtable = {
|
||||
.can_set_mac = ipvlan_can_set_mac,
|
||||
.iftype = ARPHRD_ETHER,
|
||||
.generate_mac = true,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
||||
const NetDevVTable ipvtap_vtable = {
|
||||
@ -71,6 +72,7 @@ const NetDevVTable ipvtap_vtable = {
|
||||
.can_set_mac = ipvlan_can_set_mac,
|
||||
.iftype = ARPHRD_ETHER,
|
||||
.generate_mac = true,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
||||
IPVlanMode link_get_ipvlan_mode(Link *link) {
|
||||
|
@ -178,6 +178,7 @@ const NetDevVTable macvtap_vtable = {
|
||||
.create_type = NETDEV_CREATE_STACKED,
|
||||
.iftype = ARPHRD_ETHER,
|
||||
.generate_mac = true,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
||||
const NetDevVTable macvlan_vtable = {
|
||||
@ -189,4 +190,5 @@ const NetDevVTable macvlan_vtable = {
|
||||
.create_type = NETDEV_CREATE_STACKED,
|
||||
.iftype = ARPHRD_ETHER,
|
||||
.generate_mac = true,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
@ -400,7 +400,7 @@ int netdev_enter_ready(NetDev *netdev) {
|
||||
assert(netdev);
|
||||
assert(netdev->ifname);
|
||||
|
||||
if (netdev->state != NETDEV_STATE_CREATING)
|
||||
if (!IN_SET(netdev->state, NETDEV_STATE_LOADING, NETDEV_STATE_CREATING))
|
||||
return 0;
|
||||
|
||||
netdev->state = NETDEV_STATE_READY;
|
||||
@ -847,6 +847,15 @@ static int stacked_netdev_process_request(Request *req, Link *link, void *userda
|
||||
if (!netdev_is_managed(netdev))
|
||||
goto cancelled; /* Already detached, due to e.g. reloading .netdev files, cancelling the request. */
|
||||
|
||||
if (NETDEV_VTABLE(netdev)->keep_existing && netdev->ifindex > 0) {
|
||||
/* Already exists, and the netdev does not support updating, entering the ready state. */
|
||||
r = netdev_enter_ready(netdev);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
goto cancelled;
|
||||
}
|
||||
|
||||
r = netdev_is_ready_to_create(netdev, link);
|
||||
if (r <= 0)
|
||||
return r;
|
||||
@ -939,6 +948,15 @@ static int independent_netdev_process_request(Request *req, Link *link, void *us
|
||||
if (!netdev_is_managed(netdev))
|
||||
return 1; /* Already detached, due to e.g. reloading .netdev files, cancelling the request. */
|
||||
|
||||
if (NETDEV_VTABLE(netdev)->keep_existing && netdev->ifindex > 0) {
|
||||
/* Already exists, and the netdev does not support updating, entering the ready state. */
|
||||
r = netdev_enter_ready(netdev);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 1; /* Skip this request. */
|
||||
}
|
||||
|
||||
r = netdev_is_ready_to_create(netdev, NULL);
|
||||
if (r <= 0)
|
||||
return r;
|
||||
|
@ -199,6 +199,10 @@ typedef struct NetDevVTable {
|
||||
|
||||
/* When assigning ifindex to the netdev, skip to check if the netdev kind matches. */
|
||||
bool skip_netdev_kind_check;
|
||||
|
||||
/* Provides if the netdev can be updated, that is, whether RTM_NEWLINK with existing ifindex is supported or not.
|
||||
* If this is true, the netdev does not support updating. */
|
||||
bool keep_existing;
|
||||
} NetDevVTable;
|
||||
|
||||
extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
|
||||
|
@ -150,4 +150,5 @@ const NetDevVTable veth_vtable = {
|
||||
.get_ifindex = netdev_veth_get_ifindex,
|
||||
.iftype = ARPHRD_ETHER,
|
||||
.generate_mac = true,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
@ -33,4 +33,5 @@ const NetDevVTable vrf_vtable = {
|
||||
.can_set_mac = vrf_can_set_mac,
|
||||
.iftype = ARPHRD_ETHER,
|
||||
.generate_mac = true,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
@ -124,4 +124,5 @@ const NetDevVTable vxcan_vtable = {
|
||||
.set_ifindex = netdev_vxcan_set_ifindex,
|
||||
.get_ifindex = netdev_vxcan_get_ifindex,
|
||||
.iftype = ARPHRD_CAN,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
@ -1265,4 +1265,5 @@ const NetDevVTable wireguard_vtable = {
|
||||
.create_type = NETDEV_CREATE_INDEPENDENT,
|
||||
.config_verify = wireguard_verify,
|
||||
.iftype = ARPHRD_NONE,
|
||||
.keep_existing = true,
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user