]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: add Protocol= to vlan netdev (#17794)
authorwalbit-de <61383730+walbit-de@users.noreply.github.com>
Wed, 2 Dec 2020 13:58:02 +0000 (14:58 +0100)
committerGitHub <noreply@github.com>
Wed, 2 Dec 2020 13:58:02 +0000 (14:58 +0100)
man/systemd.netdev.xml
src/network/netdev/netdev-gperf.gperf
src/network/netdev/vlan.c
src/network/netdev/vlan.h
test/fuzz/fuzz-netdev-parser/directives.netdev

index f8a5c6dc8630a671c56a3192adab4c596f6f2c81..fffef93aa23f3fae5b3d122797207c78bbdd6faa 100644 (file)
           This setting is compulsory.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>Protocol=</varname></term>
+        <listitem>
+          <para>Allows setting the protocol used for the VLAN interface. Takes <literal>802.1q</literal> or,
+          <literal>802.1ad</literal>, and defaults to unset and kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
       <varlistentry>
         <term><varname>GVRP=</varname></term>
         <listitem>
index 35cd01ef0d8757cbb64ea41b2646cf419ff322ba..fc577f493c6eef10c189ef6e752ca7ddfaa330fc 100644 (file)
@@ -48,6 +48,7 @@ NetDev.Kind,                              config_parse_netdev_kind,
 NetDev.MTUBytes,                          config_parse_mtu,                          AF_UNSPEC,                     offsetof(NetDev, mtu)
 NetDev.MACAddress,                        config_parse_hwaddr,                       0,                             offsetof(NetDev, mac)
 VLAN.Id,                                  config_parse_vlanid,                       0,                             offsetof(VLan, id)
+VLAN.Protocol,                            config_parse_vlanprotocol,                 0,                             offsetof(VLan, protocol)
 VLAN.GVRP,                                config_parse_tristate,                     0,                             offsetof(VLan, gvrp)
 VLAN.MVRP,                                config_parse_tristate,                     0,                             offsetof(VLan, mvrp)
 VLAN.LooseBinding,                        config_parse_tristate,                     0,                             offsetof(VLan, loose_binding)
index e7f03f06f0fa5c3c5271d4d7169f338d828c6a36..751a037c91a5b07450ef44e93ccf0f7594951fcd 100644 (file)
@@ -24,6 +24,12 @@ static int netdev_vlan_fill_message_create(NetDev *netdev, Link *link, sd_netlin
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_ID attribute: %m");
 
+        if (v->protocol >= 0) {
+                r = sd_netlink_message_append_u16(req, IFLA_VLAN_PROTOCOL, htobe16(v->protocol));
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_PROTOCOL attribute: %m");
+        }
+
         if (v->gvrp != -1) {
                 flags.mask |= VLAN_FLAG_GVRP;
                 SET_FLAG(flags.flags, VLAN_FLAG_GVRP, v->gvrp);
@@ -76,6 +82,7 @@ static void vlan_init(NetDev *netdev) {
         assert(v);
 
         v->id = VLANID_INVALID;
+        v->protocol = -1;
         v->gvrp = -1;
         v->mvrp = -1;
         v->loose_binding = -1;
index 9dff924cd05db8e9cf80c46610071baf36681d37..fbaad5a538c640cc7e708bcd2e1bdca4b9b801f3 100644 (file)
@@ -9,6 +9,7 @@ struct VLan {
         NetDev meta;
 
         uint16_t id;
+        int protocol;
 
         int gvrp;
         int mvrp;
index a7aa76f4985bfda27a3cddeeafff9434c8fd533b..f1813400738ef4a723ee29d98f8f7eb11f0424df 100644 (file)
@@ -4,6 +4,7 @@ LooseBinding=
 ReorderHeader=
 Id=
 GVRP=
+Protocol=
 [MACVLAN]
 Mode=
 SourceMACAddress=