rv = self.vapi.sw_interface_dump()
for i in rv:
if i.sw_if_index == sw_if_index:
- return i.link_mtu
+ return i.mtu[0]
return 0
def test_ip4_mtu(self):
""" IP4 MTU test """
- #
- # TODO: Link MTU is 216 bytes 'off'. Fix when L3 MTU patches committed
- #
- mtu_offset = 216
p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
p_ip4 = IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4,
flags='DF')
- # TODO: Re-enable when MTU fixes are committed
current_mtu = self.get_mtu(self.pg1.sw_if_index)
- current_mtu -= mtu_offset
p_payload = UDP(sport=1234, dport=1234) / self.payload(
current_mtu - 20 - 8)
self.validate(p[1], p4_reply)
# MTU
- self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, 576 + mtu_offset)
- self.assertEqual(576, self.get_mtu(self.pg1.sw_if_index) - mtu_offset)
+ self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [576, 0, 0, 0])
+ self.assertEqual(576, self.get_mtu(self.pg1.sw_if_index))
# Should fail. Too large MTU
p_icmp4 = ICMP(type='dest-unreach', code='fragmentation-needed',
# n.show2()
self.validate_bytes(str(p[1]), icmp4_reply)
- '''
# Now with DF off. Expect fragments.
# First go with 1500 byte packets.
p_payload = UDP(sport=1234, dport=1234) / self.payload(
p4 = p_ether / p_ip4 / p_payload
p4.flags = 0
p4_reply = p_ip4 / p_payload
- p4_reply.ttl = 62 # check this
+ p4_reply.ttl = 62 # check this
p4_reply.flags = 0
p4_reply.id = 256
self.pg_enable_capture()
self.pg0.add_stream(p4*1)
self.pg_start()
rx = self.pg1.get_capture(3)
- print('RX', len(rx))
reass_pkt = reassemble(rx)
self.validate(reass_pkt, p4_reply)
+
'''
# Now what happens with a 9K frame
- '''
p_payload = UDP(sport=1234, dport=1234) / self.payload(
current_mtu - 20 - 8)
p4 = p_ether / p_ip4 / p_payload
p4_reply.show2()
self.validate(reass_pkt, p4_reply)
'''
+
# Reset MTU
- self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, current_mtu)
+ self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
+ [current_mtu, 0, 0, 0])
- @unittest.skip("Enable when IPv6 fragmentation is added")
def test_ip6_mtu(self):
""" IP6 MTU test """
+ current_mtu = self.get_mtu(self.pg1.sw_if_index)
+
p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
p_ip6 = IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
- current_mtu = self.get_mtu(self.pg1.sw_if_index)
p_payload = UDP(sport=1234, dport=1234) / self.payload(
current_mtu - 40 - 8)
self.validate(p[1], p6_reply)
# MTU (only checked on encap)
- self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, 1280)
+ self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1280, 0, 0, 0])
self.assertEqual(1280, self.get_mtu(self.pg1.sw_if_index))
# Should fail. Too large MTU
self.validate_bytes(str(p[1]), icmp6_reply)
# Reset MTU
- self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, current_mtu)
+ self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
+ [current_mtu, 0, 0, 0])
if __name__ == '__main__':