diff --git a/tools/sdk/lib/liblwip2-1460-feat.a b/tools/sdk/lib/liblwip2-1460-feat.a
index 0dcaa9006f..d212187c42 100644
Binary files a/tools/sdk/lib/liblwip2-1460-feat.a and b/tools/sdk/lib/liblwip2-1460-feat.a differ
diff --git a/tools/sdk/lib/liblwip2-1460.a b/tools/sdk/lib/liblwip2-1460.a
index ab3e6c04d1..e6f5f467d0 100644
Binary files a/tools/sdk/lib/liblwip2-1460.a and b/tools/sdk/lib/liblwip2-1460.a differ
diff --git a/tools/sdk/lib/liblwip2-536-feat.a b/tools/sdk/lib/liblwip2-536-feat.a
index 9b91265e97..c1ee7e67e8 100644
Binary files a/tools/sdk/lib/liblwip2-536-feat.a and b/tools/sdk/lib/liblwip2-536-feat.a differ
diff --git a/tools/sdk/lib/liblwip2-536.a b/tools/sdk/lib/liblwip2-536.a
index 9d822c3473..0cc0c3225a 100644
Binary files a/tools/sdk/lib/liblwip2-536.a and b/tools/sdk/lib/liblwip2-536.a differ
diff --git a/tools/sdk/lwip2/builder b/tools/sdk/lwip2/builder
index a501b5722b..25d5e8186f 160000
--- a/tools/sdk/lwip2/builder
+++ b/tools/sdk/lwip2/builder
@@ -1 +1 @@
-Subproject commit a501b5722bd050f41a9351e69ca75937150ec138
+Subproject commit 25d5e8186f710a230221021cba97727dbfdfd953
diff --git a/tools/sdk/lwip2/include/gluedebug.h b/tools/sdk/lwip2/include/gluedebug.h
index c828f7b8f1..a53099744d 100644
--- a/tools/sdk/lwip2/include/gluedebug.h
+++ b/tools/sdk/lwip2/include/gluedebug.h
@@ -18,7 +18,11 @@
 #define ULWIPDEBUG	0	// 0 or 1 (trigger lwip debug)
 #define ULWIPASSERT	0	// 0 or 1 (trigger lwip self-check, 0 saves flash)
 
+#if ARDUINO
 #define STRING_IN_FLASH 1	// *print("fmt is stored in flash")
+#else
+#define STRING_IN_FLASH 0	// *print("fmt is stored in flash")
+#endif
 
 #define ROTBUFLEN_BIT	11	// (UDEBUGSTORE=1) doprint()'s buffer: 11=2048B
 
@@ -39,7 +43,9 @@ extern "C"
 void (*phy_capture) (int netif_idx, const char* data, size_t len, int out, int success);
 
 /////////////////////////////////////////////////////////////////////////////
+#if ARDUINO
 #include <sys/pgmspace.h>
+#endif
 
 #if UDEBUG && UDEBUGSTORE
 #warning use 'doprint_allow=1' right after Serial is enabled
@@ -94,6 +100,7 @@ int doprint_minus (const char* format, ...) __attribute__ ((format (printf, 1, 2
 #define uprint(x...)		do { (void)0; } while (0)
 #endif
 
+#if ARDUINO
 #define udoassert(assertion...)	\
 do { if ((assertion) == 0) { \
 		static const char assrt[] ICACHE_RODATA_ATTR STORE_ATTR = #assertion " wrong@"; \
@@ -104,6 +111,9 @@ do { if ((assertion) == 0) { \
 		os_printf_plus(assrt_line, __LINE__); \
 		uhalt(); \
 } } while (0)
+#else
+#define udoassert(assertion...)   do { if ((assertion) == 0) { os_printf("assert fail: " #assertion " @%s:%d\n", __FILE__, __LINE__); uhalt(); } } while (0)
+#endif
 
 #if UNDEBUG
 #define uassert(assertion...)	do { (void)0; } while (0)
diff --git a/tools/sdk/lwip2/include/lwip-git-hash.h b/tools/sdk/lwip2/include/lwip-git-hash.h
index 0aaae6f63f..d5424663ea 100644
--- a/tools/sdk/lwip2/include/lwip-git-hash.h
+++ b/tools/sdk/lwip2/include/lwip-git-hash.h
@@ -1,5 +1,5 @@
 // generated by makefiles/make-lwip2-hash
 #ifndef LWIP_HASH_H
 #define LWIP_HASH_H
-#define LWIP_HASH_STR "STABLE-2_1_2_RELEASE/glue:1.1-2-ga501b57"
+#define LWIP_HASH_STR "STABLE-2_1_2_RELEASE/glue:1.1-5-g25d5e81"
 #endif // LWIP_HASH_H
diff --git a/tools/sdk/lwip2/include/lwipopts.h b/tools/sdk/lwip2/include/lwipopts.h
index b644c4d3c1..65a9500145 100644
--- a/tools/sdk/lwip2/include/lwipopts.h
+++ b/tools/sdk/lwip2/include/lwipopts.h
@@ -3534,6 +3534,12 @@
 #error LWIP_FEATURES must be defined
 #endif
 
+
+/**
+ * TCP_RANDOM_PORT: randomize port instead of simply increasing
+ */
+#define TCP_RANDOM_PORT 1
+
 /*
    --------------------------------------------------
    ------------------ SNTP options ------------------