chiark / gitweb /
.network/.netdev/.link: allow to match on architecture
authorTom Gundersen <teg@jklm.no>
Fri, 21 Feb 2014 13:51:19 +0000 (14:51 +0100)
committerTom Gundersen <teg@jklm.no>
Fri, 21 Feb 2014 15:05:02 +0000 (16:05 +0100)
12 files changed:
man/systemd-networkd.service.xml
man/udev.xml
src/network/networkd-netdev-gperf.gperf
src/network/networkd-netdev.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd.h
src/shared/net-util.c
src/shared/net-util.h
src/udev/net/link-config-gperf.gperf
src/udev/net/link-config.c
src/udev/net/link-config.h

index 69157b13ef0568a5101af3a69b64fd6f98541dac..91e13924888d95f63d16fa4a162d4227448f61d6 100644 (file)
                                                 </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
                                                 </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>
index 3dd2b489ff84531d9aefe9b739b9eaee251eeaa2..9e00933e5ed408cbd4f080e464c297b42e8957e8 100644 (file)
             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>
index cdaacb18ae191b793920fbfdfab4b25f4c648691..7dd47f971fe137a163a18f1c53220b6030be46be 100644 (file)
@@ -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)
index 773163d76c63a8db232d2d4ea1e84307e4c6fe75..c3bda6da84d56ef491e8183b1727f38276e1e9d5 100644 (file)
@@ -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);
index 011f7e9038da89684c31398b00976840f47d1506..44aeb9c3ae745a36027fd2301c12a54a778c6c78 100644 (file)
@@ -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)
index 3119471fa25a8801bb4b3d4e9ce8dff8d0db1290..2e68bec2e745a520b24aa105e1ade33092d4efa1 100644 (file)
@@ -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)),
index 8008df5a793a9a4155f49999d60071cb8f19fbee..fb0976491c31032b2aba0947a8e952ab5db4c4b0 100644 (file)
@@ -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;
index 6008a41dae847c0a94af59babafb088a096001f1..a8a2c44bae570bae7be5ae985aed3e73ddf59c15 100644 (file)
@@ -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;
 
index a20b62e0521bd33c39d1ae00fa6c43b4b7948dcd..908fb22ffa31bea32b297e04a39913b3ffb9e07b 100644 (file)
@@ -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,
index ffc1b27a1d109b92ac05c49f53e7a0ad9a6838da..277ceb538620595206958dd6d6921f46aff89128 100644 (file)
@@ -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)
index 15bea4f4caa3cd089288bcddc09f67b1586c228c..e8389c9be07df039888bbb7eeb9229db7b33b39e 100644 (file)
@@ -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)),
index 0dc156d40166df70d25a9404f2aee7d2c9f46b78..9d2eaff37cc44884e2f3e512a3b07f22dfc4c132 100644 (file)
@@ -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;