diff --git a/netlink_msg.c b/netlink_msg.c
index 13906f4..be76ecd 100644
--- a/netlink_msg.c
+++ b/netlink_msg.c
@@ -16,29 +16,29 @@
  * netlink_msg.c - send an ifaddrmsg/ifinfomsg/rtmsg via netlink
  */
 
-#include <netinet/in.h>
+#include <errno.h>
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
+#include <netinet/in.h>
 #include <string.h>
-#include <errno.h>
 
 #include <netlink-private/object-api.h>
 #include <netlink-private/types.h>
-#include <netlink/socket.h>
-#include <netlink/netlink.h>
 #include <netlink/msg.h>
+#include <netlink/netlink.h>
+#include <netlink/socket.h>
 
-#include "netlink_msg.h"
 #include "netlink_callbacks.h"
+#include "netlink_msg.h"
 
 /* function: family_size
  * returns the size of the address structure for the given family, or 0 on error
  * family - AF_INET or AF_INET6
  */
 size_t inet_family_size(int family) {
-  if(family == AF_INET) {
+  if (family == AF_INET) {
     return sizeof(struct in_addr);
-  } else if(family == AF_INET6) {
+  } else if (family == AF_INET6) {
     return sizeof(struct in6_addr);
   } else {
     return 0;
@@ -52,11 +52,12 @@
  * payload_struct - pointer to a struct to add to netlink message
  * payload_len    - bytelength of structure
  */
-struct nl_msg *nlmsg_alloc_generic(uint16_t type, uint16_t flags, void *payload_struct, size_t payload_len) {
+struct nl_msg *nlmsg_alloc_generic(uint16_t type, uint16_t flags, void *payload_struct,
+                                   size_t payload_len) {
   struct nl_msg *msg;
 
   msg = nlmsg_alloc();
-  if(!msg) {
+  if (!msg) {
     return NULL;
   }
 
@@ -65,9 +66,9 @@
     return NULL;
   }
 
-  msg->nm_nlh->nlmsg_len = NLMSG_LENGTH(payload_len);
+  msg->nm_nlh->nlmsg_len   = NLMSG_LENGTH(payload_len);
   msg->nm_nlh->nlmsg_flags = flags;
-  msg->nm_nlh->nlmsg_type = type;
+  msg->nm_nlh->nlmsg_type  = type;
 
   memcpy(nlmsg_data(msg->nm_nlh), payload_struct, payload_len);
 
@@ -116,7 +117,7 @@
   }
 
   int sockfd = nl_socket_get_fd(nl_sk);
-  return connect(sockfd, (struct sockaddr *) &addr, sizeof(addr));
+  return connect(sockfd, (struct sockaddr *)&addr, sizeof(addr));
 }
 
 /* function: send_netlink_msg
@@ -128,23 +129,18 @@
   struct nl_sock *nl_sk;
 
   nl_sk = nl_socket_alloc();
-  if(!nl_sk)
-    goto cleanup;
+  if (!nl_sk) goto cleanup;
 
-  if(nl_connect(nl_sk, NETLINK_ROUTE) != 0)
-    goto cleanup;
+  if (nl_connect(nl_sk, NETLINK_ROUTE) != 0) goto cleanup;
 
-  if(nl_send_auto_complete(nl_sk, msg) < 0)
-    goto cleanup;
+  if (nl_send_auto_complete(nl_sk, msg) < 0) goto cleanup;
 
-  if(netlink_set_kernel_only(nl_sk) < 0)
-    goto cleanup;
+  if (netlink_set_kernel_only(nl_sk) < 0) goto cleanup;
 
   nl_recvmsgs(nl_sk, callbacks);
 
 cleanup:
-  if(nl_sk)
-    nl_socket_free(nl_sk);
+  if (nl_sk) nl_socket_free(nl_sk);
 }
 
 /* function: send_ifaddrmsg
@@ -158,8 +154,7 @@
   struct nl_msg *msg = NULL;
 
   msg = nlmsg_alloc_ifaddr(type, flags, ifa);
-  if(!msg)
-    return;
+  if (!msg) return;
 
   send_netlink_msg(msg, callbacks);
 
@@ -172,10 +167,10 @@
  */
 int netlink_sendrecv(struct nl_msg *msg) {
   struct nl_cb *callbacks = NULL;
-  int retval = -EIO;
+  int retval              = -EIO;
 
   callbacks = alloc_ack_callbacks(&retval);
-  if(!callbacks) {
+  if (!callbacks) {
     return -ENOMEM;
   }
 
