diff --git a/src/types.cpp b/src/types.cpp
index 12a4363..55c6d10 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -1,8 +1,5 @@
 #include "types.hpp"
 
-#include <arpa/inet.h>
-#include <byteswap.h>
-
 #include <charconv>
 
 namespace phosphor::network::detail
@@ -29,7 +26,7 @@
 
 std::string_view AddrBufMaker<in_addr>::operator()(in_addr val) noexcept
 {
-    auto v = bswap_32(ntohl(val.s_addr));
+    auto v = bswap(ntoh(val.s_addr));
     char* ptr = buf.begin();
     for (size_t i = 0; i < 3; ++i)
     {
@@ -84,7 +81,7 @@
             continue;
         }
         const auto res =
-            std::to_chars(ptr, buf.end(), ntohs(val.s6_addr16[i]), 16);
+            std::to_chars(ptr, buf.end(), ntoh(val.s6_addr16[i]), 16);
         ptr = res.ptr;
         if (i < 7)
         {
diff --git a/src/types.hpp b/src/types.hpp
index 79f1be4..75db6a4 100644
--- a/src/types.hpp
+++ b/src/types.hpp
@@ -6,6 +6,7 @@
 #include <algorithm>
 #include <array>
 #include <chrono>
+#include <numeric>
 #include <sdeventplus/clock.hpp>
 #include <sdeventplus/utility/timer.hpp>
 #include <string>
@@ -59,6 +60,91 @@
 namespace detail
 {
 
+template <typename T, uint8_t size = sizeof(T)>
+struct BswapAlign
+{
+    using type = T;
+};
+
+template <typename T>
+struct BswapAlign<T, 2>
+{
+    using type alignas(uint16_t) = T;
+};
+
+template <typename T>
+struct BswapAlign<T, 4>
+{
+    using type alignas(uint32_t) = T;
+};
+
+template <typename T>
+struct BswapAlign<T, 8>
+{
+    using type alignas(uint64_t) = T;
+};
+
+template <typename T>
+constexpr T bswapInt(typename BswapAlign<T>::type n) noexcept
+{
+    static_assert(std::is_trivially_copyable_v<T>);
+    if constexpr (sizeof(T) == 2)
+    {
+        reinterpret_cast<uint16_t&>(n) =
+            __builtin_bswap16(reinterpret_cast<uint16_t&>(n));
+    }
+    else if constexpr (sizeof(T) == 4)
+    {
+        reinterpret_cast<uint32_t&>(n) =
+            __builtin_bswap32(reinterpret_cast<uint32_t&>(n));
+    }
+    else if constexpr (sizeof(T) == 8)
+    {
+        reinterpret_cast<uint64_t&>(n) =
+            __builtin_bswap64(reinterpret_cast<uint64_t&>(n));
+    }
+    else
+    {
+        auto b = reinterpret_cast<std::byte*>(&n);
+        std::reverse(b, b + sizeof(n));
+    }
+    return n;
+}
+
+} // namespace detail
+
+template <typename T>
+constexpr T bswap(T n) noexcept
+{
+    return detail::bswapInt<T>(n);
+}
+
+template <typename T>
+constexpr T hton(T n) noexcept
+{
+    if constexpr (std::endian::native == std::endian::big)
+    {
+        return n;
+    }
+    else if constexpr (std::endian::native == std::endian::little)
+    {
+        return bswap(n);
+    }
+    else
+    {
+        static_assert(std::is_same_v<T, void>);
+    }
+}
+
+template <typename T>
+constexpr T ntoh(T n) noexcept
+{
+    return hton(n);
+}
+
+namespace detail
+{
+
 template <typename T>
 constexpr bool vcontains() noexcept
 {
diff --git a/test/test_types.cpp b/test/test_types.cpp
index 1f34144..8150555 100644
--- a/test/test_types.cpp
+++ b/test/test_types.cpp
@@ -4,6 +4,7 @@
 #include <fmt/chrono.h>
 #include <fmt/format.h>
 
+#include <array>
 #include <sstream>
 #include <string_view>
 
@@ -37,6 +38,19 @@
 namespace phosphor::network
 {
 
+TEST(Byteswap, Swap)
+{
+    EXPECT_EQ(38, bswap(uint8_t{38}));
+    EXPECT_EQ(38 << 8, bswap(uint16_t{38}));
+    EXPECT_EQ(0x240082fe, bswap(uint32_t{0xfe820024}));
+    EXPECT_EQ(0x240082fe00000000, bswap(uint64_t{0xfe820024}));
+    struct
+    {
+        std::array<char, 4> a = {1, 2, 3, 4};
+    } s;
+    EXPECT_EQ((std::array<char, 4>{4, 3, 2, 1}), bswap(s).a);
+}
+
 TEST(EqualOperator, InAddrAny)
 {
     EXPECT_EQ(InAddrAny(in6_addr{0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
