ethernet: configure system default ethernet MTU 73/25473/3
authorDave Barach <dave@barachs.net>
Wed, 26 Feb 2020 15:27:08 +0000 (10:27 -0500)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 26 Feb 2020 18:50:35 +0000 (18:50 +0000)
Type: feature
Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I9c2081c56cfbf61df7e5170002f5f65902f49942

src/vnet/ethernet/ethernet.h
src/vnet/ethernet/init.c
src/vnet/ethernet/interface.c

index 2e5209c..2f544bb 100644 (file)
@@ -315,6 +315,9 @@ typedef struct ethernet_main_t_
   /** Functions to call when interface hw address changes. */
   ethernet_address_change_ctx_t *address_change_callbacks;
 
+  /** Default interface MTU */
+  u32 default_mtu;
+
 } ethernet_main_t;
 
 extern ethernet_main_t ethernet_main;
index 9fd95f1..f78b65c 100644 (file)
@@ -88,6 +88,11 @@ ethernet_init (vlib_main_t * vm)
 
   em->type_info_by_name = hash_create_string (0, sizeof (uword));
   em->type_info_by_type = hash_create (0, sizeof (uword));
+  /*
+   * System default ethernet interface MTU, configure via ethernet_config in
+   * interface.c if desired.
+   */
+  em->default_mtu = 9000;
 
 #define ethernet_type(n,s) add_type (em, ETHERNET_TYPE_##s, #s);
 #include "types.def"
index 39e5cfb..3b9093c 100644 (file)
@@ -359,8 +359,8 @@ ethernet_register_interface (vnet_main_t * vnm,
   hi->max_packet_bytes = hi->max_supported_packet_bytes =
     ETHERNET_MAX_PACKET_BYTES;
 
-  /* Standard default ethernet MTU. */
-  vnet_sw_interface_set_mtu (vnm, hi->sw_if_index, 9000);
+  /* Default ethernet MTU, 9000 unless set by ethernet_config see below */
+  vnet_sw_interface_set_mtu (vnm, hi->sw_if_index, em->default_mtu);
 
   clib_memcpy (ei->address, address, sizeof (ei->address));
   vec_add (hi->hw_address, address, sizeof (ei->address));
@@ -1192,6 +1192,29 @@ VLIB_CLI_COMMAND (delete_sub_interface_command, static) = {
 };
 /* *INDENT-ON* */
 
+static clib_error_t *
+ethernet_config (vlib_main_t * vm, unformat_input_t * input)
+{
+  ethernet_main_t *em = &ethernet_main;
+
+  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (input, "default-mtu %u", &em->default_mtu))
+       {
+         if (em->default_mtu < 64 || em->default_mtu > 9000)
+           return clib_error_return (0, "default MTU must be >=64, <=9000");
+       }
+      else
+       {
+         return clib_error_return (0, "unknown input '%U'",
+                                   format_unformat_error, input);
+       }
+    }
+  return 0;
+}
+
+VLIB_CONFIG_FUNCTION (ethernet_config, "ethernet");
+
 /*
  * fd.io coding-style-patch-verification: ON
  *