diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index c965ddc..b04bc2d 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -52,9 +52,9 @@
 constexpr auto METHOD_GET = "Get";
 
 template <typename Func>
-inline decltype(std::declval<Func>()())
-    ignoreError(std::string_view msg, stdplus::zstring_view intf,
-                decltype(std::declval<Func>()()) fallback, Func&& func) noexcept
+inline decltype(std::declval<Func>()()) ignoreError(
+    std::string_view msg, stdplus::zstring_view intf,
+    decltype(std::declval<Func>()()) fallback, Func&& func) noexcept
 {
     try
     {
diff --git a/src/ncsi_cmd.cpp b/src/ncsi_cmd.cpp
index 67c30e8..34f5c92 100644
--- a/src/ncsi_cmd.cpp
+++ b/src/ncsi_cmd.cpp
@@ -111,8 +111,8 @@
     // clang-format on
 }
 
-static std::optional<unsigned int>
-    parseUnsigned(const char* str, const char* label)
+static std::optional<unsigned int> parseUnsigned(const char* str,
+                                                 const char* label)
 {
     try
     {
@@ -171,8 +171,8 @@
     return addr;
 }
 
-static std::optional<std::vector<unsigned char>>
-    parsePayload(int argc, const char* const argv[])
+static std::optional<std::vector<unsigned char>> parsePayload(
+    int argc, const char* const argv[])
 {
     /* we have already checked that there are sufficient args in callers */
     assert(argc >= 1);
@@ -243,8 +243,8 @@
     return payload;
 }
 
-static std::optional<std::tuple<GlobalOptions, int>>
-    parseGlobalOptions(int argc, char* const* argv)
+static std::optional<std::tuple<GlobalOptions, int>> parseGlobalOptions(
+    int argc, char* const* argv)
 {
     std::optional<unsigned int> chan, package, interface;
     std::optional<MCTPAddress> mctp;
@@ -453,8 +453,8 @@
     return ncsiCommand(options, oemType, *payload);
 }
 
-static std::array<unsigned char, 12>
-    generateDumpCmdPayload(uint32_t chunkNum, uint32_t dataHandle, bool isAbort)
+static std::array<unsigned char, 12> generateDumpCmdPayload(
+    uint32_t chunkNum, uint32_t dataHandle, bool isAbort)
 {
     std::array<unsigned char, 12> payload = {};
     uint8_t opcode;
diff --git a/src/rtnetlink.cpp b/src/rtnetlink.cpp
index 5229c94..442eae9 100644
--- a/src/rtnetlink.cpp
+++ b/src/rtnetlink.cpp
@@ -88,8 +88,8 @@
 }
 
 template <typename Addr>
-static std::optional<std::tuple<unsigned, stdplus::InAnyAddr>>
-    parse(std::string_view msg)
+static std::optional<std::tuple<unsigned, stdplus::InAnyAddr>> parse(
+    std::string_view msg)
 {
     std::optional<unsigned> ifIdx;
     std::optional<stdplus::InAnyAddr> gw;
@@ -113,8 +113,8 @@
     return std::nullopt;
 }
 
-std::optional<std::tuple<unsigned, stdplus::InAnyAddr>>
-    gatewayFromRtm(std::string_view msg)
+std::optional<std::tuple<unsigned, stdplus::InAnyAddr>> gatewayFromRtm(
+    std::string_view msg)
 {
     const auto& rtm = extractRtData<rtmsg>(msg);
     if (rtm.rtm_table != RT_TABLE_MAIN || rtm.rtm_dst_len != 0)
diff --git a/src/rtnetlink.hpp b/src/rtnetlink.hpp
index f35c25f..821b811 100644
--- a/src/rtnetlink.hpp
+++ b/src/rtnetlink.hpp
@@ -10,8 +10,8 @@
 
 InterfaceInfo intfFromRtm(std::string_view msg);
 
-std::optional<std::tuple<unsigned, stdplus::InAnyAddr>>
-    gatewayFromRtm(std::string_view msg);
+std::optional<std::tuple<unsigned, stdplus::InAnyAddr>> gatewayFromRtm(
+    std::string_view msg);
 
 AddressInfo addrFromRtm(std::string_view msg);
 
diff --git a/src/util.cpp b/src/util.cpp
index ac4d1b4..6fba783 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -88,8 +88,8 @@
 }
 
 /** @brief Parse the comma separated interface names */
-std::unordered_set<std::string_view>
-    parseInterfaces(std::string_view interfaces)
+std::unordered_set<std::string_view> parseInterfaces(
+    std::string_view interfaces)
 {
     std::unordered_set<std::string_view> result;
     while (true)
diff --git a/src/util.hpp b/src/util.hpp
index 1c71eab..ff3b59a 100644
--- a/src/util.hpp
+++ b/src/util.hpp
@@ -90,8 +90,8 @@
 std::string_view getIgnoredInterfacesEnv();
 
 /** @brief Parse the comma separated interface names */
-std::unordered_set<std::string_view>
-    parseInterfaces(std::string_view interfaces);
+std::unordered_set<std::string_view> parseInterfaces(
+    std::string_view interfaces);
 
 /** @brief Get the ignored interfaces */
 const std::unordered_set<std::string_view>& getIgnoredInterfaces();
