Support tunneling IPv6 on Solaris.
authorGuus Sliepen <guus@tinc-vpn.org>
Wed, 10 Nov 2004 21:14:08 +0000 (21:14 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Wed, 10 Nov 2004 21:14:08 +0000 (21:14 +0000)
lib/ipv4.h
src/solaris/device.c

index 060f8ae92a501a74a221aca9180bfab75a6b0974..7f1e15929a7efb5155eff85fea4b75cb236f9f5f 100644 (file)
@@ -67,7 +67,6 @@ struct ip {
 #define IP_RF 0x8000
 #define IP_DF 0x4000
 #define IP_MF 0x2000
-#define IP_OFFMASK 0x1fff
        uint8_t ip_ttl;
        uint8_t ip_p;
        uint16_t ip_sum;
@@ -75,6 +74,10 @@ struct ip {
 } __attribute__ ((__packed__));
 #endif
 
+#ifndef IP_OFFMASK
+#define IP_OFFMASK 0x1fff
+#endif
+
 #ifndef HAVE_STRUCT_ICMP
 struct icmp {
        uint8_t icmp_type;
index 4bd88d73474ab1f75738174a48bd81f46c17b8c5..9a6cfb65aae64e193b06c146006883bbd86be90e 100644 (file)
@@ -127,8 +127,21 @@ bool read_packet(vpn_packet_t *packet)
                return false;
        }
 
-       packet->data[12] = 0x08;
-       packet->data[13] = 0x00;
+       switch(packet->data[14] >> 4) {
+               case 4:
+                       packet->data[12] = 0x08;
+                       packet->data[13] = 0x00;
+                       break;
+               case 6:
+                       packet->data[12] = 0x86;
+                       packet->data[13] = 0xDD;
+                       break;
+               default:
+                       ifdebug(TRAFFIC) logger(LOG_ERR,
+                                          _ ("Unknown IP version %d while reading packet from %s %s"),
+                                          packet->data[14] >> 4, device_info, device);
+                       return false;
+       }
 
        packet->len = lenin + 14;