summaryrefslogtreecommitdiff
path: root/src/networkAddress.cpp
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2008-04-16 00:01:29 +0000
committerChristian Pointner <equinox@anytun.org>2008-04-16 00:01:29 +0000
commitcec3b44ad7c4f03d7ee8fcd9d35eca083f5d1fe4 (patch)
tree8a11d9c3af478f7d77828578fbffba356049a56f /src/networkAddress.cpp
parentmakefile (diff)
anytun-nosync builds on OpenBSD now
Diffstat (limited to 'src/networkAddress.cpp')
-rw-r--r--src/networkAddress.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/networkAddress.cpp b/src/networkAddress.cpp
index cd93576..dce8054 100644
--- a/src/networkAddress.cpp
+++ b/src/networkAddress.cpp
@@ -125,7 +125,13 @@ bool NetworkAddress::operator<(const NetworkAddress &right) const
return (ipv4_address_.s_addr < right.ipv4_address_.s_addr);
} else if (network_address_type_==ipv6) {
for(int i=0;i<4;i++)
+#if defined(__GNUC__) && defined(__linux__)
if (ipv6_address_.s6_addr32[i]<right.ipv6_address_.s6_addr32[i])
+#elif defined(__GNUC__) && defined(__OpenBSD__)
+ if (ipv6_address_.__u6_addr.__u6_addr32[i]<right.ipv6_address_.__u6_addr.__u6_addr32[i])
+#else
+ #error Target not supported
+#endif
return true;
return false;
} else if (network_address_type_==ethernet) {
@@ -148,9 +154,18 @@ NetworkAddress NetworkAddress::operator<<(uint8_t shift) const
in6_addr new_v6_addr;
for(int i=0;i<4;i++)
{
+#if defined(__GNUC__) && defined(__linux__)
new_v6_addr.s6_addr32[i]=ipv6_address_.s6_addr32[i]<<1;
if (i<3 && ipv6_address_.s6_addr32[i+1] || uint32_t (0x80000000))
new_v6_addr.s6_addr32[i] &=1;
+#elif defined(__GNUC__) && defined(__OpenBSD__)
+ new_v6_addr.__u6_addr.__u6_addr32[i]=ipv6_address_.__u6_addr.__u6_addr32[i]<<1;
+ if (i<3 && ipv6_address_.__u6_addr.__u6_addr32[i+1] || uint32_t (0x80000000))
+ new_v6_addr.__u6_addr.__u6_addr32[i] &=1;
+#else
+ #error Target not supported
+#endif
+
}
return NetworkAddress(new_v6_addr);
} else if (network_address_type_==ethernet) {
@@ -173,7 +188,14 @@ NetworkAddress NetworkAddress::operator&(const NetworkAddress &right) const
} else if (network_address_type_==ipv6) {
in6_addr new_v6_addr;
for(int i=0;i<4;i++)
+#if defined(__GNUC__) && defined(__linux__)
new_v6_addr.s6_addr32[i]=ipv6_address_.s6_addr32[i]&right.ipv6_address_.s6_addr32[i];
+#elif defined(__GNUC__) && defined(__OpenBSD__)
+ new_v6_addr.__u6_addr.__u6_addr32[i]=ipv6_address_.__u6_addr.__u6_addr32[i]&right.ipv6_address_.__u6_addr.__u6_addr32[i];
+#else
+ #error Target not supported
+#endif
+
return NetworkAddress(new_v6_addr);
} else if (network_address_type_==ethernet) {
//TODO
@@ -193,7 +215,14 @@ NetworkAddress NetworkAddress::operator&=(const NetworkAddress &right)
return *this;
} else if (network_address_type_==ipv6) {
for(int i=0;i<4;i++)
+#if defined(__GNUC__) && defined(__linux__)
ipv6_address_.s6_addr32[i]&=right.ipv6_address_.s6_addr32[i];
+#elif defined(__GNUC__) && defined(__OpenBSD__)
+ ipv6_address_.__u6_addr.__u6_addr32[i]&=right.ipv6_address_.__u6_addr.__u6_addr32[i];
+#else
+ #error Target not supported
+#endif
+
return *this;
} else if (network_address_type_==ethernet) {
//TODO