net/addr/ether: Add basic MAC comparison and hashing
Change-Id: I8e6ddb709726326357cad4c583fec38c18d1ea83
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/include/meson.build b/include/meson.build
index 6d02351..50ecdef 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -9,6 +9,7 @@
'stdplus/hash.hpp',
'stdplus/hash/array.hpp',
'stdplus/hash/tuple.hpp',
+ 'stdplus/net/addr/ether.hpp',
'stdplus/net/addr/ip.hpp',
'stdplus/numeric/endian.hpp',
'stdplus/pinned.hpp',
diff --git a/include/stdplus/net/addr/ether.hpp b/include/stdplus/net/addr/ether.hpp
new file mode 100644
index 0000000..91cf031
--- /dev/null
+++ b/include/stdplus/net/addr/ether.hpp
@@ -0,0 +1,30 @@
+#pragma once
+#include <net/ethernet.h>
+
+#include <stdplus/hash.hpp>
+
+#include <algorithm>
+#include <variant>
+
+namespace stdplus
+{
+
+struct EtherAddr : ether_addr
+{
+ constexpr bool operator==(ether_addr rhs) const noexcept
+ {
+ return std::equal(ether_addr_octet, ether_addr_octet + 6,
+ rhs.ether_addr_octet);
+ }
+};
+
+} // namespace stdplus
+
+template <>
+struct std::hash<stdplus::EtherAddr>
+{
+ constexpr std::size_t operator()(ether_addr addr) const noexcept
+ {
+ return stdplus::hashMulti(addr.ether_addr_octet);
+ }
+};