|
|
2c8186 |
From 03f95ddaa1d223e1e93788a307dc1b36d86b22b5 Mon Sep 17 00:00:00 2001
|
|
|
2c8186 |
From: Jan Friesse <jfriesse@redhat.com>
|
|
|
2c8186 |
Date: Tue, 30 Sep 2014 17:06:36 +0200
|
|
|
2c8186 |
Subject: [PATCH] Adjust MTU for IPv6 correctly
|
|
|
2c8186 |
|
|
|
2c8186 |
MTU for IPv6 is 20 bytes larger then IPv4. This fact was not taken into
|
|
|
2c8186 |
account so IPv6 packets were larger then MTU resulting in fragmentation.
|
|
|
2c8186 |
|
|
|
2c8186 |
Solution is to substract correct IP header size.
|
|
|
2c8186 |
|
|
|
2c8186 |
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
|
|
|
2c8186 |
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
|
|
|
2c8186 |
---
|
|
|
2c8186 |
exec/totemip.c | 22 ++++++++++++++++++++++
|
|
|
2c8186 |
exec/totemudp.c | 6 ++++--
|
|
|
2c8186 |
exec/totemudpu.c | 6 ++++--
|
|
|
2c8186 |
include/corosync/totem/totemip.h | 2 ++
|
|
|
2c8186 |
4 files changed, 32 insertions(+), 4 deletions(-)
|
|
|
2c8186 |
|
|
|
2c8186 |
diff --git a/exec/totemip.c b/exec/totemip.c
|
|
|
2c8186 |
index 7ba746e..28a8836 100644
|
|
|
2c8186 |
--- a/exec/totemip.c
|
|
|
2c8186 |
+++ b/exec/totemip.c
|
|
|
2c8186 |
@@ -488,3 +488,25 @@ finished:
|
|
|
2c8186 |
totemip_freeifaddrs(&addrs);
|
|
|
2c8186 |
return (res);
|
|
|
2c8186 |
}
|
|
|
2c8186 |
+
|
|
|
2c8186 |
+#define TOTEMIP_UDP_HEADER_SIZE 8
|
|
|
2c8186 |
+#define TOTEMIP_IPV4_HEADER_SIZE 20
|
|
|
2c8186 |
+#define TOTEMIP_IPV6_HEADER_SIZE 40
|
|
|
2c8186 |
+
|
|
|
2c8186 |
+size_t totemip_udpip_header_size(int family)
|
|
|
2c8186 |
+{
|
|
|
2c8186 |
+ size_t header_size;
|
|
|
2c8186 |
+
|
|
|
2c8186 |
+ header_size = 0;
|
|
|
2c8186 |
+
|
|
|
2c8186 |
+ switch (family) {
|
|
|
2c8186 |
+ case AF_INET:
|
|
|
2c8186 |
+ header_size = TOTEMIP_UDP_HEADER_SIZE + TOTEMIP_IPV4_HEADER_SIZE;
|
|
|
2c8186 |
+ break;
|
|
|
2c8186 |
+ case AF_INET6:
|
|
|
2c8186 |
+ header_size = TOTEMIP_UDP_HEADER_SIZE + TOTEMIP_IPV6_HEADER_SIZE;
|
|
|
2c8186 |
+ break;
|
|
|
2c8186 |
+ }
|
|
|
2c8186 |
+
|
|
|
2c8186 |
+ return (header_size);
|
|
|
2c8186 |
+}
|
|
|
2c8186 |
diff --git a/exec/totemudp.c b/exec/totemudp.c
|
|
|
2c8186 |
index 4577107..86059af 100644
|
|
|
2c8186 |
--- a/exec/totemudp.c
|
|
|
2c8186 |
+++ b/exec/totemudp.c
|
|
|
2c8186 |
@@ -1316,10 +1316,12 @@ extern int totemudp_iface_check (void *udp_context)
|
|
|
2c8186 |
|
|
|
2c8186 |
extern void totemudp_net_mtu_adjust (void *udp_context, struct totem_config *totem_config)
|
|
|
2c8186 |
{
|
|
|
2c8186 |
-#define UDPIP_HEADER_SIZE (20 + 8) /* 20 bytes for ip 8 bytes for udp */
|
|
|
2c8186 |
+
|
|
|
2c8186 |
+ assert(totem_config->interface_count > 0);
|
|
|
2c8186 |
+
|
|
|
2c8186 |
totem_config->net_mtu -= crypto_sec_header_size(totem_config->crypto_cipher_type,
|
|
|
2c8186 |
totem_config->crypto_hash_type) +
|
|
|
2c8186 |
- UDPIP_HEADER_SIZE;
|
|
|
2c8186 |
+ totemip_udpip_header_size(totem_config->interfaces[0].bindnet.family);
|
|
|
2c8186 |
}
|
|
|
2c8186 |
|
|
|
2c8186 |
const char *totemudp_iface_print (void *udp_context) {
|
|
|
2c8186 |
diff --git a/exec/totemudpu.c b/exec/totemudpu.c
|
|
|
2c8186 |
index 69837c7..037f82b 100644
|
|
|
2c8186 |
--- a/exec/totemudpu.c
|
|
|
2c8186 |
+++ b/exec/totemudpu.c
|
|
|
2c8186 |
@@ -952,10 +952,12 @@ extern int totemudpu_iface_check (void *udpu_context)
|
|
|
2c8186 |
|
|
|
2c8186 |
extern void totemudpu_net_mtu_adjust (void *udpu_context, struct totem_config *totem_config)
|
|
|
2c8186 |
{
|
|
|
2c8186 |
-#define UDPIP_HEADER_SIZE (20 + 8) /* 20 bytes for ip 8 bytes for udp */
|
|
|
2c8186 |
+
|
|
|
2c8186 |
+ assert(totem_config->interface_count > 0);
|
|
|
2c8186 |
+
|
|
|
2c8186 |
totem_config->net_mtu -= crypto_sec_header_size(totem_config->crypto_cipher_type,
|
|
|
2c8186 |
totem_config->crypto_hash_type) +
|
|
|
2c8186 |
- UDPIP_HEADER_SIZE;
|
|
|
2c8186 |
+ totemip_udpip_header_size(totem_config->interfaces[0].bindnet.family);
|
|
|
2c8186 |
}
|
|
|
2c8186 |
|
|
|
2c8186 |
const char *totemudpu_iface_print (void *udpu_context) {
|
|
|
2c8186 |
diff --git a/include/corosync/totem/totemip.h b/include/corosync/totem/totemip.h
|
|
|
2c8186 |
index 533735a..0168e66 100644
|
|
|
2c8186 |
--- a/include/corosync/totem/totemip.h
|
|
|
2c8186 |
+++ b/include/corosync/totem/totemip.h
|
|
|
2c8186 |
@@ -114,6 +114,8 @@ static inline int totemip_zero_check(const struct totem_ip_address *addr)
|
|
|
2c8186 |
return (addr->family == 0);
|
|
|
2c8186 |
}
|
|
|
2c8186 |
|
|
|
2c8186 |
+extern size_t totemip_udpip_header_size(int family);
|
|
|
2c8186 |
+
|
|
|
2c8186 |
#ifdef __cplusplus
|
|
|
2c8186 |
}
|
|
|
2c8186 |
#endif
|
|
|
2c8186 |
--
|
|
|
2c8186 |
1.7.1
|
|
|
2c8186 |
|