]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: geneve: add InheritInnerProtocol flag
authorJosef Miegl <josef@miegl.cz>
Sat, 4 Mar 2023 21:18:34 +0000 (22:18 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 6 Mar 2023 20:58:30 +0000 (20:58 +0000)
man/systemd.netdev.xml
src/libsystemd/sd-netlink/netlink-types-rtnl.c
src/network/netdev/geneve.c
src/network/netdev/geneve.h
src/network/netdev/netdev-gperf.gperf

index 266ad52df28d1de4261caf6dbe6db7519a8d3d47..b71cedfa269e87ea983e1a021eab5d68ffc18779 100644 (file)
           <para>Accepts the same key as in [VXLAN] section.</para>
         </listitem>
       </varlistentry>
+      <varlistentry>
+        <term><varname>InheritInnerProtocol=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, inner Layer 3 protcol is set as Protocol Type in the GENEVE
+          header instead of Ethernet. Defaults to false.</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
index 919512d11039a2e944e54db67de54f4c18a69190..0153456d9beb9fa87e4482941a39dd2f3f155e3c 100644 (file)
@@ -192,19 +192,20 @@ static const NLAPolicy rtnl_link_info_data_can_policies[] = {
 };
 
 static const NLAPolicy rtnl_link_info_data_geneve_policies[] = {
-        [IFLA_GENEVE_ID]                = BUILD_POLICY(U32),
-        [IFLA_GENEVE_REMOTE]            = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
-        [IFLA_GENEVE_TTL]               = BUILD_POLICY(U8),
-        [IFLA_GENEVE_TOS]               = BUILD_POLICY(U8),
-        [IFLA_GENEVE_PORT]              = BUILD_POLICY(U16),
-        [IFLA_GENEVE_COLLECT_METADATA]  = BUILD_POLICY(FLAG),
-        [IFLA_GENEVE_REMOTE6]           = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
-        [IFLA_GENEVE_UDP_CSUM]          = BUILD_POLICY(U8),
-        [IFLA_GENEVE_UDP_ZERO_CSUM6_TX] = BUILD_POLICY(U8),
-        [IFLA_GENEVE_UDP_ZERO_CSUM6_RX] = BUILD_POLICY(U8),
-        [IFLA_GENEVE_LABEL]             = BUILD_POLICY(U32),
-        [IFLA_GENEVE_TTL_INHERIT]       = BUILD_POLICY(U8),
-        [IFLA_GENEVE_DF]                = BUILD_POLICY(U8),
+        [IFLA_GENEVE_ID]                  = BUILD_POLICY(U32),
+        [IFLA_GENEVE_REMOTE]              = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in_addr)),
+        [IFLA_GENEVE_TTL]                 = BUILD_POLICY(U8),
+        [IFLA_GENEVE_TOS]                 = BUILD_POLICY(U8),
+        [IFLA_GENEVE_PORT]                = BUILD_POLICY(U16),
+        [IFLA_GENEVE_COLLECT_METADATA]    = BUILD_POLICY(FLAG),
+        [IFLA_GENEVE_REMOTE6]             = BUILD_POLICY_WITH_SIZE(IN_ADDR, sizeof(struct in6_addr)),
+        [IFLA_GENEVE_UDP_CSUM]            = BUILD_POLICY(U8),
+        [IFLA_GENEVE_UDP_ZERO_CSUM6_TX]   = BUILD_POLICY(U8),
+        [IFLA_GENEVE_UDP_ZERO_CSUM6_RX]   = BUILD_POLICY(U8),
+        [IFLA_GENEVE_LABEL]               = BUILD_POLICY(U32),
+        [IFLA_GENEVE_TTL_INHERIT]         = BUILD_POLICY(U8),
+        [IFLA_GENEVE_DF]                  = BUILD_POLICY(U8),
+        [IFLA_GENEVE_INNER_PROTO_INHERIT] = BUILD_POLICY(FLAG),
 };
 
 static const NLAPolicy rtnl_link_info_data_gre_policies[] = {
index 777a32d75c5404cb685b3b254db9f312f6cb1521..7d5a8679d1422b8a79b9903b8197e802afafc832 100644 (file)
@@ -89,6 +89,12 @@ static int netdev_geneve_fill_message_create(NetDev *netdev, Link *link, sd_netl
                         return r;
         }
 
+        if (v->inherit_inner_protocol) {
+                r = sd_netlink_message_append_flag(m, IFLA_GENEVE_INNER_PROTO_INHERIT);
+                if (r < 0)
+                        return r;
+        }
+
         if (v->geneve_df != _NETDEV_GENEVE_DF_INVALID) {
                 r = sd_netlink_message_append_u8(m, IFLA_GENEVE_DF, v->geneve_df);
                 if (r < 0)
index 1f0f15c2ad80a4276b01394c5921193874308b55..3cbf694bba24a39bd28d526a891e3ea7af241aa2 100644 (file)
@@ -37,6 +37,8 @@ struct Geneve {
 
         GeneveDF geneve_df;
         union in_addr_union remote;
+
+        bool inherit_inner_protocol;
 };
 
 DEFINE_NETDEV_CAST(GENEVE, Geneve);
index 3cfcd51e63699b1c600a86b1bae6d1e89b9856ad..ade5b1b91940b83d8536977d1d1336c829da316e 100644 (file)
@@ -162,6 +162,7 @@ GENEVE.UDP6ZeroChecksumTx,                config_parse_bool,
 GENEVE.DestinationPort,                   config_parse_ip_port,                      0,                             offsetof(Geneve, dest_port)
 GENEVE.IPDoNotFragment,                   config_parse_geneve_df,                    0,                             offsetof(Geneve, geneve_df)
 GENEVE.FlowLabel,                         config_parse_geneve_flow_label,            0,                             0
+GENEVE.InheritInnerProtocol,              config_parse_bool,                         0,                             offsetof(Geneve, inherit_inner_protocol)
 MACsec.Port,                              config_parse_macsec_port,                  0,                             0
 MACsec.Encrypt,                           config_parse_tristate,                     0,                             offsetof(MACsec, encrypt)
 MACsecReceiveChannel.Port,                config_parse_macsec_port,                  0,                             0