diff --git a/include/stdplus/net/addr/ether.hpp b/include/stdplus/net/addr/ether.hpp
index a2cc377..4e77145 100644
--- a/include/stdplus/net/addr/ether.hpp
+++ b/include/stdplus/net/addr/ether.hpp
@@ -2,8 +2,11 @@
 #include <net/ethernet.h>
 
 #include <stdplus/hash.hpp>
+#include <stdplus/numeric/str.hpp>
+#include <stdplus/str/conv.hpp>
 
 #include <algorithm>
+#include <stdexcept>
 #include <variant>
 
 namespace stdplus
@@ -26,6 +29,39 @@
     }
 };
 
+template <>
+struct FromStr<EtherAddr>
+{
+    template <typename CharT>
+    constexpr EtherAddr operator()(std::basic_string_view<CharT> sv) const
+    {
+        constexpr StrToInt<16, std::uint8_t> sti;
+        EtherAddr ret;
+        if (sv.size() == 12 && sv.find(":") == sv.npos)
+        {
+            for (size_t i = 0; i < 6; ++i)
+            {
+                ret.ether_addr_octet[i] = sti(sv.substr(i * 2, 2));
+            }
+        }
+        else
+        {
+            for (size_t i = 0; i < 5; ++i)
+            {
+                auto loc = sv.find(":");
+                ret.ether_addr_octet[i] = sti(sv.substr(0, loc));
+                sv.remove_prefix(loc == sv.npos ? sv.size() : loc + 1);
+                if (sv.empty())
+                {
+                    throw std::invalid_argument("Missing mac data");
+                }
+            }
+            ret.ether_addr_octet[5] = sti(sv);
+        }
+        return ret;
+    }
+};
+
 } // namespace stdplus
 
 template <>
diff --git a/src/net/addr/ether.cpp b/src/net/addr/ether.cpp
index e50a2ff..5266733 100644
--- a/src/net/addr/ether.cpp
+++ b/src/net/addr/ether.cpp
@@ -1 +1,6 @@
 #include <stdplus/net/addr/ether.hpp>
+
+namespace stdplus
+{
+template EtherAddr FromStr<EtherAddr>::operator()(std::string_view) const;
+}
diff --git a/test/net/addr/ether.cpp b/test/net/addr/ether.cpp
index 73ae5eb..012e1b0 100644
--- a/test/net/addr/ether.cpp
+++ b/test/net/addr/ether.cpp
@@ -13,4 +13,33 @@
     std::hash<EtherAddr>{}(EtherAddr{});
 }
 
+TEST(FromStr, EtherAddr)
+{
+    EXPECT_THROW(fromStr<EtherAddr>("0x:00:00:00:00:00"),
+                 std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00:00"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00:00:"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00::00"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>(":00:00:00:00:00"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("00::00:00:00:00"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>(":::::"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("00:0:0:0:0"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("00:00:00:00:00:00:00"),
+                 std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>(""), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("123456789XYZ"), std::invalid_argument);
+    EXPECT_THROW(fromStr<EtherAddr>("123456789AB"), std::overflow_error);
+    EXPECT_THROW(fromStr<EtherAddr>("123456789ABCD"), std::overflow_error);
+
+    EXPECT_EQ((EtherAddr{}), fromStr<EtherAddr>("00:00:00:00:00:00"));
+    EXPECT_EQ((EtherAddr{0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa}),
+              fromStr<EtherAddr>("FF:EE:DD:cc:bb:aa"));
+    EXPECT_EQ((EtherAddr{0x00, 0x01, 0x02, 0x03, 0x04, 0x05}),
+              fromStr<EtherAddr>("0:1:2:3:4:5"));
+    EXPECT_EQ((EtherAddr{0x01, 0x23, 0x45, 0x67, 0x89, 0xab}),
+              fromStr<EtherAddr>("0123456789AB"));
+    EXPECT_EQ((EtherAddr{0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa}),
+              fromStr<EtherAddr>("FFEEDDccbbaa"));
+}
+
 } // namespace stdplus
