ip6: during icmp to icmp6 translation truncate error messages 88/28288/3
authorAlexander Chernavin <achernavin@netgate.com>
Wed, 15 Jan 2020 11:45:47 +0000 (06:45 -0500)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Wed, 12 Aug 2020 15:59:46 +0000 (15:59 +0000)
All translated ICMPv6 packets that exceed the minimal IPv6 MTU get
truncated but according to RFC 4443 2.4 only ICMPv6 error messages
(type < 128) need to be truncated.

With this commit, truncate only ICMPv6 error messages.

Type: fix

Change-Id: Ic455352de2ff4ff6aa3421b46a2a54923f2d3f80
Signed-off-by: Alexander Chernavin <achernavin@netgate.com>
(cherry picked from commit 180210f99b74b97b127b7800bdc7bd243713cbf4)

src/vnet/ip/ip4_to_ip6.h

index b1905e4..e806c50 100644 (file)
@@ -414,8 +414,8 @@ icmp_to_icmp6 (vlib_buffer_t * p, ip4_to_ip6_set_fn_t fn, void *ctx,
   if ((rv = fn (ip4, ip6, ctx)) != 0)
     return rv;
 
-  //Truncate when the packet exceeds the minimal IPv6 MTU
-  if (p->current_length > 1280)
+  //Truncate when ICMPv6 error message exceeds the minimal IPv6 MTU
+  if (p->current_length > 1280 && icmp->type < 128)
     {
       ip6->payload_length = clib_host_to_net_u16 (1280 - sizeof (*ip6));
       p->current_length = 1280;        //Looks too simple to be correct...