mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 08:56:15 +09:00
network: netdev: add flag to skip kind check
It will be used in later commit.
This commit is contained in:
@@ -352,37 +352,40 @@ int netdev_set_ifindex(NetDev *netdev, sd_netlink_message *message) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
r = sd_netlink_message_enter_container(message, IFLA_LINKINFO);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not get LINKINFO: %m");
|
||||
if (!NETDEV_VTABLE(netdev)->skip_netdev_kind_check) {
|
||||
|
||||
r = sd_netlink_message_read_string(message, IFLA_INFO_KIND, &received_kind);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not get KIND: %m");
|
||||
r = sd_netlink_message_enter_container(message, IFLA_LINKINFO);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not get LINKINFO: %m");
|
||||
|
||||
r = sd_netlink_message_exit_container(message);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not exit container: %m");
|
||||
r = sd_netlink_message_read_string(message, IFLA_INFO_KIND, &received_kind);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not get KIND: %m");
|
||||
|
||||
if (netdev->kind == NETDEV_KIND_TAP)
|
||||
/* the kernel does not distinguish between tun and tap */
|
||||
kind = "tun";
|
||||
else {
|
||||
kind = netdev_kind_to_string(netdev->kind);
|
||||
if (!kind) {
|
||||
log_netdev_error(netdev, "Could not get kind");
|
||||
r = sd_netlink_message_exit_container(message);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not exit container: %m");
|
||||
|
||||
if (netdev->kind == NETDEV_KIND_TAP)
|
||||
/* the kernel does not distinguish between tun and tap */
|
||||
kind = "tun";
|
||||
else {
|
||||
kind = netdev_kind_to_string(netdev->kind);
|
||||
if (!kind) {
|
||||
log_netdev_error(netdev, "Could not get kind");
|
||||
netdev_enter_failed(netdev);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!streq(kind, received_kind)) {
|
||||
log_netdev_error(netdev, "Received newlink with wrong KIND %s, expected %s",
|
||||
received_kind, kind);
|
||||
netdev_enter_failed(netdev);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!streq(kind, received_kind)) {
|
||||
log_netdev_error(netdev, "Received newlink with wrong KIND %s, expected %s",
|
||||
received_kind, kind);
|
||||
netdev_enter_failed(netdev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
netdev->ifindex = ifindex;
|
||||
|
||||
log_netdev_debug(netdev, "netdev has index %d", netdev->ifindex);
|
||||
|
||||
@@ -173,6 +173,9 @@ typedef struct NetDevVTable {
|
||||
|
||||
/* Generate MAC address when MACAddress= is not specified. */
|
||||
bool generate_mac;
|
||||
|
||||
/* When assigning ifindex to the netdev, skip to check if the netdev kind matches. */
|
||||
bool skip_netdev_kind_check;
|
||||
} NetDevVTable;
|
||||
|
||||
extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
|
||||
|
||||
Reference in New Issue
Block a user