diff --git a/thirdparty/lwip/src/apps/snmp/snmp_mib2_system.c b/thirdparty/lwip/src/apps/snmp/snmp_mib2_system.c
index 4aa2926..f725139 100755
--- a/thirdparty/lwip/src/apps/snmp/snmp_mib2_system.c
+++ b/thirdparty/lwip/src/apps/snmp/snmp_mib2_system.c
@@ -43,6 +43,10 @@
 
 #include <string.h>
 
+#ifdef SNMP_SYS_PARAM_FILENAME
+#include SNMP_SYS_PARAM_FILENAME
+#endif
+
 #if LWIP_SNMP && SNMP_LWIP_MIB2
 
 #if SNMP_USE_NETCONN
@@ -240,7 +244,11 @@ system_get_value(const struct snmp_scalar_array_node_def *node, void *value)
     break;
   case 2: /* sysObjectID */
     {
+#ifdef SNMP_GET_SYSOBJECTID_MTS
+      const struct snmp_obj_id* dev_enterprise_oid = SNMP_GET_SYSOBJECTID_MTS();
+#else
       const struct snmp_obj_id* dev_enterprise_oid = snmp_get_device_enterprise_oid();
+#endif
       MEMCPY(value, dev_enterprise_oid->id, dev_enterprise_oid->len * sizeof(u32_t));
       return dev_enterprise_oid->len * sizeof(u32_t);
     }
@@ -284,6 +292,9 @@ system_set_test(const struct snmp_scalar_array_node_def *node, u16_t len, void *
   snmp_err_t ret = SNMP_ERR_WRONGVALUE;
   const u16_t* var_bufsize  = NULL;
   const u16_t* var_wr_len;
+#ifdef SNMP_SYS_PARAM_FILENAME
+  bool check_flag = true;
+#endif
 
   LWIP_UNUSED_ARG(value);
 
@@ -307,13 +318,24 @@ system_set_test(const struct snmp_scalar_array_node_def *node, u16_t len, void *
 
   /* check if value is writable at all */
   if (*var_bufsize > 0) {
+#ifdef SNMP_SYS_PARAM_CHECK
+	  check_flag = SNMP_SYS_PARAM_CHECK(value, len);
+#endif
     if (var_wr_len == NULL) {
       /* we have to take the terminating 0 into account */
-      if (len < *var_bufsize) {
+#ifdef SNMP_SYS_PARAM_CHECK
+      if (len <= *var_bufsize && check_flag) {
+#else
+      if (len <= *var_bufsize) {
+#endif
         ret = SNMP_ERR_NOERROR;
       }
     } else {
+#ifdef SNMP_SYS_PARAM_CHECK
+      if (len <= *var_bufsize && check_flag) {
+#else
       if (len <= *var_bufsize) {
+#endif
         ret = SNMP_ERR_NOERROR;
       }
     }
@@ -358,6 +380,9 @@ system_set_value(const struct snmp_scalar_array_node_def *node, u16_t len, void
   } else {
     *var_wr_len = len;
   }
+#ifdef SNMP_SYS_PARAM_SAVE
+    SNMP_SYS_PARAM_SAVE();
+#endif
 
   return SNMP_ERR_NOERROR;
 }