diff --git a/src/mgmt/nfd/control-command.cpp b/src/mgmt/nfd/control-command.cpp
index 07e8b17..f851bf1 100644
--- a/src/mgmt/nfd/control-command.cpp
+++ b/src/mgmt/nfd/control-command.cpp
@@ -105,6 +105,7 @@
     .optional(CONTROL_PARAMETER_FACE_PERSISTENCY)
     .optional(CONTROL_PARAMETER_BASE_CONGESTION_MARKING_INTERVAL)
     .optional(CONTROL_PARAMETER_DEFAULT_CONGESTION_THRESHOLD)
+    .optional(CONTROL_PARAMETER_MTU)
     .optional(CONTROL_PARAMETER_FLAGS)
     .optional(CONTROL_PARAMETER_MASK);
   m_responseValidator
@@ -114,6 +115,7 @@
     .required(CONTROL_PARAMETER_FACE_PERSISTENCY)
     .optional(CONTROL_PARAMETER_BASE_CONGESTION_MARKING_INTERVAL)
     .optional(CONTROL_PARAMETER_DEFAULT_CONGESTION_THRESHOLD)
+    .optional(CONTROL_PARAMETER_MTU)
     .required(CONTROL_PARAMETER_FLAGS);
 }
 
diff --git a/src/mgmt/nfd/control-parameters.cpp b/src/mgmt/nfd/control-parameters.cpp
index 65360a5..4d826ef 100644
--- a/src/mgmt/nfd/control-parameters.cpp
+++ b/src/mgmt/nfd/control-parameters.cpp
@@ -51,6 +51,9 @@
 {
   size_t totalLength = 0;
 
+  if (this->hasMtu()) {
+    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Mtu, m_mtu);
+  }
   if (this->hasDefaultCongestionThreshold()) {
     totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::DefaultCongestionThreshold,
                                                   m_defaultCongestionThreshold);
@@ -228,6 +231,12 @@
   if (this->hasDefaultCongestionThreshold()) {
     m_defaultCongestionThreshold = readNonNegativeInteger(*val);
   }
+
+  val = m_wire.find(tlv::nfd::Mtu);
+  m_hasFields[CONTROL_PARAMETER_MTU] = val != m_wire.elements_end();
+  if (this->hasMtu()) {
+    m_mtu = readNonNegativeInteger(*val);
+  }
 }
 
 bool
@@ -368,6 +377,10 @@
     os << "DefaultCongestionThreshold: " << parameters.getDefaultCongestionThreshold() << ", ";
   }
 
+  if (parameters.hasMtu()) {
+    os << "Mtu: " << parameters.getMtu() << ", ";
+  }
+
   os << ")";
   return os;
 }
diff --git a/src/mgmt/nfd/control-parameters.hpp b/src/mgmt/nfd/control-parameters.hpp
index c325e0b..2291096 100644
--- a/src/mgmt/nfd/control-parameters.hpp
+++ b/src/mgmt/nfd/control-parameters.hpp
@@ -49,6 +49,7 @@
   CONTROL_PARAMETER_FACE_PERSISTENCY,
   CONTROL_PARAMETER_BASE_CONGESTION_MARKING_INTERVAL,
   CONTROL_PARAMETER_DEFAULT_CONGESTION_THRESHOLD,
+  CONTROL_PARAMETER_MTU,
   CONTROL_PARAMETER_UBOUND
 };
 
@@ -67,7 +68,8 @@
   "ExpirationPeriod",
   "FacePersistency",
   "BaseCongestionMarkingInterval",
-  "DefaultCongestionThreshold"
+  "DefaultCongestionThreshold",
+  "Mtu"
 };
 
 /**
@@ -559,6 +561,44 @@
     return *this;
   }
 
+  bool
+  hasMtu() const
+  {
+    return m_hasFields[CONTROL_PARAMETER_MTU];
+  }
+
+  /** \brief get MTU (measured in bytes)
+   *
+   *  This value is capped at MAX_NDN_PACKET_SIZE, even if the MTU of the face is unlimited.
+   */
+  uint64_t
+  getMtu() const
+  {
+    BOOST_ASSERT(this->hasMtu());
+    return m_mtu;
+  }
+
+  /** \brief set MTU (measured in bytes)
+   *
+   *  This value is capped at MAX_NDN_PACKET_SIZE, even if the MTU of the face is unlimited.
+   */
+  ControlParameters&
+  setMtu(uint64_t mtu)
+  {
+    m_wire.reset();
+    m_mtu = mtu;
+    m_hasFields[CONTROL_PARAMETER_MTU] = true;
+    return *this;
+  }
+
+  ControlParameters&
+  unsetMtu()
+  {
+    m_wire.reset();
+    m_hasFields[CONTROL_PARAMETER_MTU] = false;
+    return *this;
+  }
+
   const std::vector<bool>&
   getPresentFields() const
   {
@@ -615,6 +655,7 @@
   FacePersistency     m_facePersistency;
   time::nanoseconds   m_baseCongestionMarkingInterval;
   uint64_t            m_defaultCongestionThreshold;
+  uint64_t            m_mtu;
 
 private:
   mutable Block m_wire;
diff --git a/src/mgmt/nfd/face-status.cpp b/src/mgmt/nfd/face-status.cpp
index 0c127ae..dc74eb1 100644
--- a/src/mgmt/nfd/face-status.cpp
+++ b/src/mgmt/nfd/face-status.cpp
@@ -63,6 +63,9 @@
   totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInNacks, m_nInNacks);
   totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInData, m_nInData);
   totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInInterests, m_nInInterests);
+  if (m_mtu) {
+    totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Mtu, *m_mtu);
+  }
   if (m_defaultCongestionThreshold) {
     totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::DefaultCongestionThreshold,
                                                   *m_defaultCongestionThreshold);
@@ -187,6 +190,14 @@
     m_defaultCongestionThreshold = nullopt;
   }
 
+  if (val != m_wire.elements_end() && val->type() == tlv::nfd::Mtu) {
+    m_mtu = readNonNegativeInteger(*val);
+    ++val;
+  }
+  else {
+    m_mtu = nullopt;
+  }
+
   if (val != m_wire.elements_end() && val->type() == tlv::nfd::NInInterests) {
     m_nInInterests = readNonNegativeInteger(*val);
     ++val;
@@ -309,6 +320,22 @@
 }
 
 FaceStatus&
+FaceStatus::setMtu(uint64_t mtu)
+{
+  m_wire.reset();
+  m_mtu = mtu;
+  return *this;
+}
+
+FaceStatus&
+FaceStatus::unsetMtu()
+{
+  m_wire.reset();
+  m_mtu = nullopt;
+  return *this;
+}
+
+FaceStatus&
 FaceStatus::setNInInterests(uint64_t nInInterests)
 {
   m_wire.reset();
@@ -390,6 +417,8 @@
       a.hasDefaultCongestionThreshold() == b.hasDefaultCongestionThreshold() &&
       (!a.hasDefaultCongestionThreshold() ||
        a.getDefaultCongestionThreshold() == b.getDefaultCongestionThreshold()) &&
+      a.hasMtu() == b.hasMtu() &&
+      (!a.hasMtu() || a.getMtu() == b.getMtu()) &&
       a.getNInInterests() == b.getNInInterests() &&
       a.getNInData() == b.getNInData() &&
       a.getNInNacks() == b.getNInNacks() &&
@@ -426,6 +455,10 @@
     os << "     DefaultCongestionThreshold: " << status.getDefaultCongestionThreshold() << " bytes,\n";
   }
 
+  if (status.hasMtu()) {
+    os << "     Mtu: " << status.getMtu() << " bytes,\n";
+  }
+
   os << "     Flags: " << AsHex{status.getFlags()} << ",\n"
      << "     Counters: {Interests: {in: " << status.getNInInterests() << ", "
      << "out: " << status.getNOutInterests() << "},\n"
diff --git a/src/mgmt/nfd/face-status.hpp b/src/mgmt/nfd/face-status.hpp
index 30a97f5..3de21fe 100644
--- a/src/mgmt/nfd/face-status.hpp
+++ b/src/mgmt/nfd/face-status.hpp
@@ -119,6 +119,33 @@
   FaceStatus&
   unsetDefaultCongestionThreshold();
 
+  bool
+  hasMtu() const
+  {
+    return !!m_mtu;
+  }
+
+  /** \brief get MTU (measured in bytes)
+   *
+   *  This value is capped at MAX_NDN_PACKET_SIZE, even if the MTU of the face is unlimited.
+   */
+  uint64_t
+  getMtu() const
+  {
+    BOOST_ASSERT(hasMtu());
+    return *m_mtu;
+  }
+
+  /** \brief set MTU (measured in bytes)
+   *
+   *  This value is capped at MAX_NDN_PACKET_SIZE, even if the MTU of the face is unlimited.
+   */
+  FaceStatus&
+  setMtu(uint64_t mtu);
+
+  FaceStatus&
+  unsetMtu();
+
   uint64_t
   getNInInterests() const
   {
@@ -195,6 +222,7 @@
   optional<time::milliseconds> m_expirationPeriod;
   optional<time::nanoseconds> m_baseCongestionMarkingInterval;
   optional<uint64_t> m_defaultCongestionThreshold;
+  optional<uint64_t> m_mtu;
   uint64_t m_nInInterests;
   uint64_t m_nInData;
   uint64_t m_nInNacks;
