summaryrefslogtreecommitdiffstats
path: root/src/openvpn/proto.c
diff options
context:
space:
mode:
authorGert Doering <gert@greenie.muc.de>2012-12-02 22:11:12 +0100
committerDavid Sommerseth <davids@redhat.com>2012-12-13 16:46:01 +0100
commit729c8464021ff7c41a7fbb03501465eca55909a3 (patch)
tree03c0625e2c2ddf94f8f4dd2dbb5873ac5ff783d9 /src/openvpn/proto.c
parent34bc52d611deec62e7fe56622771b58921d52176 (diff)
downloadopenvpn-729c8464021ff7c41a7fbb03501465eca55909a3.tar.gz
openvpn-729c8464021ff7c41a7fbb03501465eca55909a3.tar.xz
openvpn-729c8464021ff7c41a7fbb03501465eca55909a3.zip
Implement --mssfix handling for IPv6 packets.
Rename process_ipv4_header() to process_ip_header() and PIPV4_MSSFIX flag to PIP_MSSFIX, to make visible that it's no longer IPv4-only. Inside process_ip_header(), call out to mss_fixup_ipv6() if --mssfix is active and IPv6 packet seen. Rename mss_fixup() to mss_fixup_ipv4(), implement mss_fixup_ipv6(). Signed-off-by: Gert Doering <gert@greenie.muc.de> Acked-by: Arne Schwabe <arne@rfc2549.org> Message-Id: 1354482672-16136-2-git-send-email-gert@greenie.muc.de URL: http://article.gmane.org/gmane.network.openvpn.devel/7173 Signed-off-by: David Sommerseth <davids@redhat.com> (cherry picked from commit f0e8997a874a89b3fe1f82109c443232e8967b01)
Diffstat (limited to 'src/openvpn/proto.c')
-rw-r--r--src/openvpn/proto.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/openvpn/proto.c b/src/openvpn/proto.c
index 2cf8314..b437f1a 100644
--- a/src/openvpn/proto.c
+++ b/src/openvpn/proto.c
@@ -36,11 +36,12 @@
#include "memdbg.h"
/*
- * If raw tunnel packet is IPv4, return true and increment
+ * If raw tunnel packet is IPv<X>, return true and increment
* buffer offset to start of IP header.
*/
+static
bool
-is_ipv4 (int tunnel_type, struct buffer *buf)
+is_ipv_X ( int tunnel_type, struct buffer *buf, int ip_ver )
{
int offset;
const struct openvpn_iphdr *ih;
@@ -68,12 +69,24 @@ is_ipv4 (int tunnel_type, struct buffer *buf)
ih = (const struct openvpn_iphdr *) (BPTR (buf) + offset);
- if (OPENVPN_IPH_GET_VER (ih->version_len) == 4)
+ /* IP version is stored in the same bits for IPv4 or IPv6 header */
+ if (OPENVPN_IPH_GET_VER (ih->version_len) == ip_ver)
return buf_advance (buf, offset);
else
return false;
}
+bool
+is_ipv4 (int tunnel_type, struct buffer *buf)
+{
+ return is_ipv_X( tunnel_type, buf, 4 );
+}
+bool
+is_ipv6 (int tunnel_type, struct buffer *buf)
+{
+ return is_ipv_X( tunnel_type, buf, 6 );
+}
+
#ifdef PACKET_TRUNCATION_CHECK
void