]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: Geneve add support configure IP don't fragment
authorSusant Sahani <ssahani@gmail.com>
Thu, 9 May 2019 16:07:46 +0000 (21:37 +0530)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 10 May 2019 13:45:26 +0000 (22:45 +0900)
man/systemd.netdev.xml
src/network/netdev/geneve.c
src/network/netdev/geneve.h
src/network/netdev/netdev-gperf.gperf
test/fuzz/fuzz-netdev-parser/directives.netdev

index 416874fbaff84a32a5826dc0858a0b6697c8f950..454878d680ef3e43c4b9c2ab35be9ea2e9f749c0 100644 (file)
         <listitem>
           <para>Specifies the flow label to use in outgoing packets.</para>
         </listitem>
-      </varlistentry>
+    </varlistentry>
+    <varlistentry>
+      <term><varname>IPDoNotFragment=</varname></term>
+        <listitem>
+          <para>Accepts the same key in <literal>[VXLAN]</literal> section.</para>
+        </listitem>
+    </varlistentry>
     </variablelist>
   </refsect1>
   <refsect1>
index 0fb09961d626e55f1a49ae3b04b0359b5edf7a64..fee596e582c0b5b71dbe67fe3a0935e97e1b03b2 100644 (file)
@@ -10,6 +10,7 @@
 #include "geneve.h"
 #include "netlink-util.h"
 #include "parse-util.h"
+#include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
 #include "missing.h"
 #define GENEVE_FLOW_LABEL_MAX_MASK 0xFFFFFU
 #define DEFAULT_GENEVE_DESTINATION_PORT 6081
 
+static const char* const geneve_df_table[_NETDEV_GENEVE_DF_MAX] = {
+        [NETDEV_GENEVE_DF_NO] = "no",
+        [NETDEV_GENEVE_DF_YES] = "yes",
+        [NETDEV_GENEVE_DF_INHERIT] = "inherit",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(geneve_df, GeneveDF, NETDEV_GENEVE_DF_YES);
+DEFINE_CONFIG_PARSE_ENUM(config_parse_geneve_df, geneve_df, GeneveDF, "Failed to parse Geneve IPDoNotFragment= setting");
+
 /* callback for geneve netdev's created without a backing Link */
 static int geneve_netdev_create_handler(sd_netlink *rtnl, sd_netlink_message *m, NetDev *netdev) {
         int r;
@@ -126,6 +136,12 @@ static int netdev_geneve_create(NetDev *netdev) {
                         return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_LABEL attribute: %m");
         }
 
+        if (v->geneve_df != _NETDEV_GENEVE_DF_INVALID) {
+                r = sd_netlink_message_append_u8(m, IFLA_GENEVE_DF, v->geneve_df);
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_DF attribute: %m");
+        }
+
         r = sd_netlink_message_close_container(m);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not append IFLA_INFO_DATA attribute: %m");
@@ -280,6 +296,7 @@ static void geneve_init(NetDev *netdev) {
         assert(v);
 
         v->id = GENEVE_VID_MAX + 1;
+        v->geneve_df = _NETDEV_GENEVE_DF_INVALID;
         v->dest_port = DEFAULT_GENEVE_DESTINATION_PORT;
         v->udpcsum = false;
         v->udp6zerocsumtx = false;
index c201981e02110b62b270c06d5c2c19a73d8baa8c..5f2f27c9bb395f55f64d3cc2fa8b1e909df2a102 100644 (file)
@@ -10,6 +10,14 @@ typedef struct Geneve Geneve;
 
 #define GENEVE_VID_MAX (1u << 24) - 1
 
+typedef enum GeneveDF {
+        NETDEV_GENEVE_DF_NO = GENEVE_DF_UNSET,
+        NETDEV_GENEVE_DF_YES = GENEVE_DF_SET,
+        NETDEV_GENEVE_DF_INHERIT = GENEVE_DF_INHERIT,
+        _NETDEV_GENEVE_DF_MAX,
+        _NETDEV_GENEVE_DF_INVALID = -1
+} GeneveDF;
+
 struct Geneve {
         NetDev meta;
 
@@ -27,12 +35,17 @@ struct Geneve {
         bool udp6zerocsumtx;
         bool udp6zerocsumrx;
 
+        GeneveDF geneve_df;
         union in_addr_union remote;
 };
 
 DEFINE_NETDEV_CAST(GENEVE, Geneve);
 extern const NetDevVTable geneve_vtable;
 
+const char *geneve_df_to_string(GeneveDF d) _const_;
+GeneveDF geneve_df_from_string(const char *d) _pure_;
+
 CONFIG_PARSER_PROTOTYPE(config_parse_geneve_vni);
 CONFIG_PARSER_PROTOTYPE(config_parse_geneve_address);
 CONFIG_PARSER_PROTOTYPE(config_parse_geneve_flow_label);
+CONFIG_PARSER_PROTOTYPE(config_parse_geneve_df);
index e2c994e9717d48fa2ba4864380219ed55fa0138d..2a7ea9692fda22abcba9bbb2ce99cec2f7a21ac3 100644 (file)
@@ -135,6 +135,7 @@ GENEVE.UDP6ZeroChecksumRx,                config_parse_bool,
 GENEVE.UDP6ZeroCheckSumTx,                config_parse_bool,                         0,                             offsetof(Geneve, udp6zerocsumtx)
 GENEVE.UDP6ZeroChecksumTx,                config_parse_bool,                         0,                             offsetof(Geneve, udp6zerocsumtx)
 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
 MACsec.Port,                              config_parse_macsec_port,                  0,                             0
 MACsec.Encrypt,                           config_parse_tristate,                     0,                             offsetof(MACsec, encrypt)
index f2189e1ccf2594cbede71df524fff3d14c7c6652..0b332a6e7a280f07c20b0fc718f817bfe616e17e 100644 (file)
@@ -32,6 +32,7 @@ FlowLabel=
 UDP6ZeroChecksumRx=
 Remote=
 UDP6ZeroCheckSumRx=
+IPDoNotFragment=
 [Bridge]
 ForwardDelaySec=
 HelloTimeSec=