From fbc633f5542be4b0b85963f7dcba9ab143c61d62 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Fri, 18 Mar 2022 13:05:09 +0000 Subject: mpls: Set the MTU field in the frag-needed ICMP when doing MPLS fragmentation Type: fix The reported MTU should include the MPLS label overhead Signed-off-by: Neale Ranns Change-Id: I3df6d2e0b13f49701e187a766a157498dcaafbc0 --- test/test_ip4.py | 1 + test/test_mpls.py | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/test_ip4.py b/test/test_ip4.py index 873a38a22be..fb9b8faa769 100644 --- a/test/test_ip4.py +++ b/test/test_ip4.py @@ -1977,6 +1977,7 @@ class TestIPInput(VppTestCase): self.assertEqual(icmptypes[icmp.type], "dest-unreach") self.assertEqual(icmpcodes[icmp.type][icmp.code], "fragmentation-needed") + self.assertEqual(icmp.nexthopmtu, 1500) self.assertEqual(icmp.src, self.pg0.remote_ip4) self.assertEqual(icmp.dst, self.pg1.remote_ip4) diff --git a/test/test_mpls.py b/test/test_mpls.py index d94676b67da..a568f849aed 100644 --- a/test/test_mpls.py +++ b/test/test_mpls.py @@ -17,7 +17,7 @@ from vpp_papi import VppEnum import scapy.compat from scapy.packet import Raw from scapy.layers.l2 import Ether, ARP -from scapy.layers.inet import IP, UDP, ICMP +from scapy.layers.inet import IP, UDP, ICMP, icmptypes, icmpcodes from scapy.layers.inet6 import IPv6, ICMPv6TimeExceeded, ICMPv6EchoRequest, \ ICMPv6PacketTooBig from scapy.contrib.mpls import MPLS @@ -961,7 +961,11 @@ class TestMPLS(VppTestCase): rxs = self.send_and_expect_some(self.pg0, tx, self.pg0) for rx in rxs: - rx[ICMP].code = "fragmentation-needed" + self.assertEqual(icmptypes[rx[ICMP].type], "dest-unreach") + self.assertEqual(icmpcodes[rx[ICMP].type][rx[ICMP].code], + "fragmentation-needed") + # the link MTU is 9000, the MPLS over head is 4 bytes + self.assertEqual(rx[ICMP].nexthopmtu, 9000 - 4) self.assertEqual(self.statistics.get_err_counter( "/err/mpls-frag/can't fragment this packet"), @@ -976,7 +980,7 @@ class TestMPLS(VppTestCase): rxs = self.send_and_expect_some(self.pg0, tx, self.pg0) for rx in rxs: - rx[ICMPv6PacketTooBig].mtu = 9000 + self.assertEqual(rx[ICMPv6PacketTooBig].mtu, 9000 - 4) # # cleanup -- cgit 1.2.3-korg