diff --git a/ndn-cxx/net/impl/netlink-message.hpp b/ndn-cxx/net/impl/netlink-message.hpp
index 4f0a74b..913c164 100644
--- a/ndn-cxx/net/impl/netlink-message.hpp
+++ b/ndn-cxx/net/impl/netlink-message.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2018 Regents of the University of California.
+ * Copyright (c) 2013-2020 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -275,10 +275,10 @@
   convertAttrValue(const uint8_t* val, size_t len, AttrValueTypeTag<std::string>)
   {
     auto str = reinterpret_cast<const char*>(val);
-    if (::strnlen(str, len) < len)
-      return std::string(str);
-    else
+    if (::strnlen(str, len) >= len)
       return nullopt;
+
+    return std::string(str);
   }
 
   static optional<ethernet::Address>
@@ -292,7 +292,8 @@
 
   template<typename IpAddress>
   static std::enable_if_t<std::is_same<IpAddress, boost::asio::ip::address_v4>::value ||
-                          std::is_same<IpAddress, boost::asio::ip::address_v6>::value, optional<IpAddress>>
+                          std::is_same<IpAddress, boost::asio::ip::address_v6>::value,
+                          optional<IpAddress>>
   convertAttrValue(const uint8_t* val, size_t len, AttrValueTypeTag<IpAddress>)
   {
     typename IpAddress::bytes_type bytes;
diff --git a/ndn-cxx/net/impl/netlink-socket.cpp b/ndn-cxx/net/impl/netlink-socket.cpp
index 0b00c50..52b37fa 100644
--- a/ndn-cxx/net/impl/netlink-socket.cpp
+++ b/ndn-cxx/net/impl/netlink-socket.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2019 Regents of the University of California.
+ * Copyright (c) 2013-2020 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -531,7 +531,7 @@
   auto attr = make_shared<FamilyNameAttribute>();
   attr->nla.nla_type = CTRL_ATTR_FAMILY_NAME;
   attr->nla.nla_len = NLA_HDRLEN + m_family.size() + 1;
-  ::strncpy(attr->name, m_family.data(), GENL_NAMSIZ);
+  std::strncpy(attr->name, m_family.data(), GENL_NAMSIZ - 1);
 
   m_sock.sendRequest(GENL_ID_CTRL, CTRL_CMD_GETFAMILY, attr.get(), attr->nla.nla_len,
                      // capture 'attr' to prevent its premature deallocation
diff --git a/ndn-cxx/net/impl/network-monitor-impl-netlink.cpp b/ndn-cxx/net/impl/network-monitor-impl-netlink.cpp
index 39e6505..4fcdabd 100644
--- a/ndn-cxx/net/impl/network-monitor-impl-netlink.cpp
+++ b/ndn-cxx/net/impl/network-monitor-impl-netlink.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2019 Regents of the University of California.
+ * Copyright (c) 2013-2020 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -305,7 +305,7 @@
     interface->setMtu(*mtu);
 
   auto state = attrs.getAttributeByType<uint8_t>(IFLA_OPERSTATE);
-  updateInterfaceState(*interface, state ? *state : linux_if::OPER_STATE_UNKNOWN);
+  updateInterfaceState(*interface, state.value_or(linux_if::OPER_STATE_UNKNOWN));
 
   if (it == m_interfaces.end()) {
     NDN_LOG_DEBUG("  adding interface " << interface->getName());
