diff options
-rw-r--r-- | man/systemd-networkd.service.xml | 20 | ||||
-rw-r--r-- | man/udev.xml | 9 | ||||
-rw-r--r-- | src/network/networkd-netdev-gperf.gperf | 7 | ||||
-rw-r--r-- | src/network/networkd-netdev.c | 6 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 1 | ||||
-rw-r--r-- | src/network/networkd-network.c | 1 | ||||
-rw-r--r-- | src/network/networkd.h | 8 | ||||
-rw-r--r-- | src/shared/net-util.c | 4 | ||||
-rw-r--r-- | src/shared/net-util.h | 1 | ||||
-rw-r--r-- | src/udev/net/link-config-gperf.gperf | 1 | ||||
-rw-r--r-- | src/udev/net/link-config.c | 6 | ||||
-rw-r--r-- | src/udev/net/link-config.h | 1 |
12 files changed, 53 insertions, 12 deletions
diff --git a/man/systemd-networkd.service.xml b/man/systemd-networkd.service.xml index 69157b13ef..91e1392488 100644 --- a/man/systemd-networkd.service.xml +++ b/man/systemd-networkd.service.xml @@ -133,6 +133,16 @@ </para> </listitem> </varlistentry> + <varlistentry> + <term><varname>Architecture</varname></term> + <listitem> + <para>Checks whether the system is running on a specific + architecture. See <literal>ConditionArchitecture=</literal> in + <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> + for details. + </para> + </listitem> + </varlistentry> </variablelist> <para>The <literal>[NetDev]</literal> section accepts the following @@ -257,6 +267,16 @@ </para> </listitem> </varlistentry> + <varlistentry> + <term><varname>Architecture</varname></term> + <listitem> + <para>Checks whether the system is running on a specific + architecture. See <literal>ConditionArchitecture=</literal> in + <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> + for details. + </para> + </listitem> + </varlistentry> </variablelist> <para>The <literal>[Network]</literal> section accepts the following keys:</para> diff --git a/man/udev.xml b/man/udev.xml index 3dd2b489ff..9e00933e5e 100644 --- a/man/udev.xml +++ b/man/udev.xml @@ -845,6 +845,15 @@ for details.</para> </listitem> </varlistentry> + <varlistentry> + <term><varname>Architecture</varname></term> + <listitem> + <para>Checks whether the system is running on a specific + architecture. See <literal>ConditionArchitecture=</literal> in + <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> + for details.</para> + </listitem> + </varlistentry> </variablelist> <para>The <literal>[Link]</literal> section accepts the following keys:</para> diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf index cdaacb18ae..7dd47f971f 100644 --- a/src/network/networkd-netdev-gperf.gperf +++ b/src/network/networkd-netdev-gperf.gperf @@ -15,9 +15,10 @@ struct ConfigPerfItem; %struct-type %includes %% -Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(NetDev, condition_host) -Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(NetDev, condition_virt) -Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, condition_kernel) +Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(NetDev, match_host) +Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(NetDev, match_virt) +Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, match_kernel) +Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(NetDev, match_arch) NetDev.Description, config_parse_string, 0, offsetof(NetDev, description) NetDev.Name, config_parse_ifname, 0, offsetof(NetDev, name) NetDev.Kind, config_parse_netdev_kind, 0, offsetof(NetDev, kind) diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index 773163d76c..c3bda6da84 100644 --- a/src/network/networkd-netdev.c +++ b/src/network/networkd-netdev.c @@ -364,9 +364,9 @@ static int netdev_load_one(Manager *manager, const char *filename) { return log_oom(); if (net_match_config(NULL, NULL, NULL, NULL, NULL, - netdev->condition_host, netdev->condition_virt, - netdev->condition_kernel, NULL, NULL, NULL, - NULL, NULL) <= 0) + netdev->match_host, netdev->match_virt, + netdev->match_kernel, netdev->match_arch, + NULL, NULL, NULL, NULL, NULL) <= 0) return 0; r = hashmap_put(netdev->manager->netdevs, netdev->name, netdev); diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 011f7e9038..44aeb9c3ae 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -23,6 +23,7 @@ Match.Name, config_parse_ifname, 0, Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(Network, match_host) Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(Network, match_virt) Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, match_kernel) +Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(Network, match_arch) Network.Description, config_parse_string, 0, offsetof(Network, description) Network.Bridge, config_parse_bridge, 0, offsetof(Network, bridge) Network.Bond, config_parse_bond, 0, offsetof(Network, bond) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 3119471fa2..2e68bec2e7 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -177,6 +177,7 @@ int network_get(Manager *manager, struct udev_device *device, Network **ret) { network->match_driver, network->match_type, network->match_name, network->match_host, network->match_virt, network->match_kernel, + network->match_arch, udev_device_get_sysattr_value(device, "address"), udev_device_get_property_value(device, "ID_PATH"), udev_device_get_driver(udev_device_get_parent(device)), diff --git a/src/network/networkd.h b/src/network/networkd.h index 8008df5a79..fb0976491c 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -71,9 +71,10 @@ struct NetDev { char *filename; - Condition *condition_host; - Condition *condition_virt; - Condition *condition_kernel; + Condition *match_host; + Condition *match_virt; + Condition *match_kernel; + Condition *match_arch; char *description; char *name; @@ -100,6 +101,7 @@ struct Network { Condition *match_host; Condition *match_virt; Condition *match_kernel; + Condition *match_arch; char *description; NetDev *bridge; diff --git a/src/shared/net-util.c b/src/shared/net-util.c index 6008a41dae..a8a2c44bae 100644 --- a/src/shared/net-util.c +++ b/src/shared/net-util.c @@ -39,6 +39,7 @@ bool net_match_config(const struct ether_addr *match_mac, Condition *match_host, Condition *match_virt, Condition *match_kernel, + Condition *match_arch, const char *dev_mac, const char *dev_path, const char *dev_driver, @@ -54,6 +55,9 @@ bool net_match_config(const struct ether_addr *match_mac, if (match_kernel && !condition_test_kernel_command_line(match_kernel)) return 0; + if (match_arch && !condition_test_architecture(match_arch)) + return 0; + if (match_mac && (!dev_mac || memcmp(match_mac, ether_aton(dev_mac), ETH_ALEN))) return 0; diff --git a/src/shared/net-util.h b/src/shared/net-util.h index a20b62e052..908fb22ffa 100644 --- a/src/shared/net-util.h +++ b/src/shared/net-util.h @@ -35,6 +35,7 @@ bool net_match_config(const struct ether_addr *match_mac, Condition *match_host, Condition *match_virt, Condition *match_kernel, + Condition *match_arch, const char *dev_mac, const char *dev_path, const char *dev_driver, diff --git a/src/udev/net/link-config-gperf.gperf b/src/udev/net/link-config-gperf.gperf index ffc1b27a1d..277ceb5386 100644 --- a/src/udev/net/link-config-gperf.gperf +++ b/src/udev/net/link-config-gperf.gperf @@ -23,6 +23,7 @@ Match.Type, config_parse_string, 0, Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(link_config, match_host) Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(link_config, match_virt) Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(link_config, match_kernel) +Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(link_config, match_arch) Link.Description, config_parse_string, 0, offsetof(link_config, description) Link.MACAddressPolicy, config_parse_mac_policy, 0, offsetof(link_config, mac_policy) Link.MACAddress, config_parse_hwaddr, 0, offsetof(link_config, mac) diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 15bea4f4ca..e8389c9be0 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -240,9 +240,9 @@ int link_config_get(link_config_ctx *ctx, struct udev_device *device, link_confi LIST_FOREACH(links, link, ctx->links) { - if (net_match_config(link->match_mac, link->match_path, - link->match_driver, link->match_type, NULL, - link->match_host, link->match_virt, link->match_kernel, + if (net_match_config(link->match_mac, link->match_path, link->match_driver, + link->match_type, NULL, link->match_host, + link->match_virt, link->match_kernel, link->match_arch, udev_device_get_sysattr_value(device, "address"), udev_device_get_property_value(device, "ID_PATH"), udev_device_get_driver(udev_device_get_parent(device)), diff --git a/src/udev/net/link-config.h b/src/udev/net/link-config.h index 0dc156d401..9d2eaff37c 100644 --- a/src/udev/net/link-config.h +++ b/src/udev/net/link-config.h @@ -58,6 +58,7 @@ struct link_config { Condition *match_host; Condition *match_virt; Condition *match_kernel; + Condition *match_arch; char *description; struct ether_addr *mac; |