mirror of
https://github.com/mfontanini/libtins
synced 2026-01-29 04:54:28 +01:00
Allow masking IPv4/6 and HW addresses
This commit is contained in:
@@ -443,19 +443,5 @@ IPv6Address last_address_from_mask(IPv6Address addr, const IPv6Address& mask) {
|
||||
return addr;
|
||||
}
|
||||
|
||||
IPv4Address first_address_from_mask(IPv4Address addr, IPv4Address mask) {
|
||||
uint32_t addr_int = Endian::be_to_host<uint32_t>(addr),
|
||||
mask_int = Endian::be_to_host<uint32_t>(mask);
|
||||
return IPv4Address(Endian::host_to_be(addr_int & mask_int));
|
||||
}
|
||||
|
||||
IPv6Address first_address_from_mask(IPv6Address addr, const IPv6Address& mask) {
|
||||
IPv6Address::iterator addr_iter = addr.begin();
|
||||
for (IPv6Address::const_iterator it = mask.begin(); it != mask.end(); ++it, ++addr_iter) {
|
||||
*addr_iter = *addr_iter & *it;
|
||||
}
|
||||
return addr;
|
||||
}
|
||||
|
||||
} // namespace Internals
|
||||
} // namespace Tins
|
||||
|
||||
@@ -139,4 +139,8 @@ bool IPv4Address::is_broadcast() const {
|
||||
return* this == broadcast;
|
||||
}
|
||||
|
||||
IPv4Address IPv4Address::operator&(const IPv4Address& mask) const {
|
||||
return IPv4Address(Endian::be_to_host(ip_addr_ & mask.ip_addr_));
|
||||
}
|
||||
|
||||
} // Tins
|
||||
|
||||
@@ -132,4 +132,13 @@ bool IPv6Address::is_multicast() const {
|
||||
return multicast_range.contains(*this);
|
||||
}
|
||||
|
||||
IPv6Address operator&(const IPv6Address& lhs, const IPv6Address& rhs) {
|
||||
IPv6Address output = lhs;
|
||||
IPv6Address::iterator addr_iter = output.begin();
|
||||
for (IPv6Address::const_iterator it = rhs.begin(); it != rhs.end(); ++it, ++addr_iter) {
|
||||
*addr_iter = *addr_iter & *it;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
} // Tins
|
||||
|
||||
Reference in New Issue
Block a user