diff --git a/include/tins/ipv6_address.h b/include/tins/ipv6_address.h index 553e38e0..75979212 100644 --- a/include/tins/ipv6_address.h +++ b/include/tins/ipv6_address.h @@ -230,6 +230,14 @@ class TINS_API IPv6Address { */ bool is_multicast() const; + /** + * \brief Return true if this is a Link-Local unicast IPv6 address. + * + * This method returns true if this address is in the address range + * fe80::/10, false otherwise + */ + bool is_local_unicast() const; + /** * \brief Returns the size of an IPv6 Address. * diff --git a/src/ipv6_address.cpp b/src/ipv6_address.cpp index cd2d7a3f..82722131 100644 --- a/src/ipv6_address.cpp +++ b/src/ipv6_address.cpp @@ -57,6 +57,7 @@ namespace Tins { const IPv6Address loopback_address = "::1"; const AddressRange multicast_range = IPv6Address("ff00::") / 8; +const AddressRange local_unicast_range = IPv6Address("fe80::") / 10; IPv6Address IPv6Address::from_prefix_length(uint32_t prefix_length) { IPv6Address address; @@ -138,6 +139,10 @@ bool IPv6Address::is_multicast() const { return multicast_range.contains(*this); } +bool IPv6Address::is_local_unicast() const { + return local_unicast_range.contains(*this); +} + ostream& operator<<(ostream& os, const IPv6Address& addr) { return os << addr.to_string(); }