data[i] = a>>(24-i*8);
}
+Address::Address(const in6_addr &a):
+ type(ETH_P_IPV6),
+ length(16),
+ mask_bits(128)
+{
+ copy(a.s6_addr, a.s6_addr+16, data);
+}
+
Address::Address(unsigned short t, const unsigned char *d, unsigned char l):
type(t),
length(l)
char buf[INET_ADDRSTRLEN];
return inet_ntop(AF_INET, data, buf, INET_ADDRSTRLEN);
}
+ else if(type==ETH_P_IPV6)
+ {
+ char buf[INET6_ADDRSTRLEN];
+ return inet_ntop(AF_INET6, data, buf, INET6_ADDRSTRLEN);
+ }
else
return "<unknown>";
}
sa_in.sin_port = 0;
sa_in.sin_addr.s_addr = *(uint32_t *)data;
}
+ else if(type==ETH_P_IPV6)
+ {
+ sockaddr_in6 &sa_in6 = reinterpret_cast<sockaddr_in6 &>(sa);
+ sa_in6.sin6_family = AF_INET6;
+ sa_in6.sin6_port = 0;
+ sa_in6.sin6_flowinfo = 0;
+ copy(data, data+16, sa_in6.sin6_addr.s6_addr);
+ sa_in6.sin6_scope_id = 0;
+ }
else
throw runtime_error("Unknown type");
}