icmp4_error_set_vnet_buffer (
p0, ICMP4_destination_unreachable,
ICMP4_destination_unreachable_fragmentation_needed_and_dont_fragment_set,
- vnet_buffer (p0)->ip_frag.mtu);
+ mtu);
next0 = MPLS_FRAG_NEXT_ICMP4_ERROR;
}
else
{
- icmp6_error_set_vnet_buffer (
- p0, ICMP6_packet_too_big, 0,
- adj0->rewrite_header.max_l3_packet_bytes);
+ icmp6_error_set_vnet_buffer (p0, ICMP6_packet_too_big,
+ 0, mtu);
next0 = MPLS_FRAG_NEXT_ICMP6_ERROR;
}
}
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)
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
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"),
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