summaryrefslogtreecommitdiffstats
path: root/src/vnet/interface.c
diff options
context:
space:
mode:
authorNeale Ranns <neale.ranns@cisco.com>2018-02-09 06:05:16 -0800
committerDamjan Marion <dmarion.lists@gmail.com>2018-02-12 11:23:33 +0000
commitffd78d1ef8fe80d1b756a71d42d5eadda60ae996 (patch)
tree99770e8773a7c3dd27c8b9b116edb6a39ace09ea /src/vnet/interface.c
parent2d6f66e1748be190664cbd72c826db32616d759a (diff)
Improve MTU handling
- setting MTU on an interface updates the L3 max bytes too - value cached in the adjacency is also updated - MTU exceeded generates ICMP to sender Change-Id: I343ec71d8e903b529594c4bd0543f04bc7f370b3 Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
Diffstat (limited to 'src/vnet/interface.c')
-rw-r--r--src/vnet/interface.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/vnet/interface.c b/src/vnet/interface.c
index a34bb7931ae..7516aec0e71 100644
--- a/src/vnet/interface.c
+++ b/src/vnet/interface.c
@@ -122,6 +122,22 @@ unserialize_vnet_sw_interface_set_flags (serialize_main_t * m, va_list * va)
/* helper_flags no redistribution */ 0);
}
+void
+vnet_hw_interface_set_mtu (vnet_main_t * vnm, u32 hw_if_index, u32 mtu)
+{
+ vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, hw_if_index);
+
+ if (hi->max_packet_bytes != mtu)
+ {
+ u16 l3_pad = hi->max_packet_bytes - hi->max_l3_packet_bytes[VLIB_TX];
+ hi->max_packet_bytes = mtu;
+ hi->max_l3_packet_bytes[VLIB_TX] =
+ hi->max_l3_packet_bytes[VLIB_RX] = mtu - l3_pad;
+ ethernet_set_flags (vnm, hw_if_index, ETHERNET_INTERFACE_FLAG_MTU);
+ adj_mtu_update (hw_if_index);
+ }
+}
+
static void
unserialize_vnet_hw_interface_set_flags (serialize_main_t * m, va_list * va)
{