Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to sdk 2.2 #2269

Merged
merged 2 commits into from
Mar 20, 2018
Merged

Update to sdk 2.2 #2269

merged 2 commits into from
Mar 20, 2018

Conversation

nwf
Copy link
Member

@nwf nwf commented Feb 20, 2018

Initial commit for
#2225 .

Replay patches from Espressif's repository at
https://github.com/espressif/ESP8266_NONOS_SDK between tags v2.1.0 and
v2.2.0:

0001-sync-from-ccca00f2.patch

	Superseded by existing changes, but lines reordered in app/driver/key.c
	to minimize divergences.

0002-sync-from-3f38ad5a.patch

	Upstream files only

0003-Update-links.patch

	Not meaningful to NodeMCU

0004-sync-from-01990ad0.patch
0005-sync-from-cdf6877d.patch

	Upstream files only

0006-sync-from-f29e744c.patch

	Upstream files only, user_interface.h override non-conflicting

0009-feat-lwip-Move-lwip-source-code-to-third_party-folde.patch

	Merged change to lwip/app/espconn_udp.c; rest is just moves or
	appears to not apply.

0010-feat-mbedtls-Add-mbedtls-source-code-in-third_party-.patch

	Does not apply; we use our own mbedtls

0011-added-C-support.patch

	Merged to Makefile

0012-feat-mbedtls-Rebuild-libmbedtls.patch

	Already applied

0013-fix-at-Fix-some-bugs-of-AT.patch

	Upstream files only

0014-feat-err_t-Redefine-err_t-to-s32_t.patch

	Merged to app/include/arch/cc.h and ./app/include/lwip/app/espconn.h;
	the rest is upstream files.

0015-fix-wpa-Fix-wpa-wpa2-ptk-gtk-reinstallation-vulnerab.patch
0016-fix-wifi-Remove-group-key-entry-before-connecting-to.patch
0017-feat-lib-Remove-time-function-in-libmain.patch

	Upstream files only

0018-feat-espconn-Modification-for-espconn.patch

	Merged to app/include/lwip/app/espconn.h,
	app/include/lwip/app/espconn_tcp.h, app/lwip/app/espconn.c,
	app/lwip/app/espconn_tcp.c

0019-feat-at-Use-new-espconn_recv-to-fix-tcp-server-issue.patch
0020-feat-examples-Update-mqtt-demo-and-auto-bin-generate.patch

	Upstream files only

0021-wifi-Add-scan-threshold-and-dwell-time.patch
0022-feat-wifi-Add-country-code-API.patch
0023-feat-wifi-Record-more-information-of-scanned-ap.patch

	Upstream files only, user_interface.h override non-conflicting

0024-fix-example-Fix-IoT_Demo-user-sector-error.patch

	Upstream files only

0025-fix-lwip-Fix-sequence-number-error-of-RST-ACK.patch

	Merged app/lwip/core/tcp_in.c

0026-fix-mbedtls-Fix-memory-leak.patch

	Merged app/mbedtls/app/lwIPSocket.c

0027-fix-mbedtls-Fix-call-send-callback-function-failed.patch

	Merged app/mbedtls/app/espconn_mbedtls.c

0028-feat-Add-USE_OPTIMIZE_PRINTF-in-third_party-Makefile.patch

	Merged app/Makefile

0029-fix-api-Fix-ets_delay_us-declaration.patch

	Upstream files only, osapi.h override non-conflicting

0030-fix-wifi-Remove-max_tx_power-in-wifi_country_t-in-li.patch
0031-fix-wifi-Fix-softAP-wrong-behavior-after-call-system.patch
0032-fix-wifi-bugfix-of-scan-fail-after-connected-if-max-.patch
0033-feat-at-Enable-scan-time-scan-type-and-add-scan-resu.patch
0034-feat-at-Add-command-AT-CWCOUNTRY.patch
0035-fix-at-Fix-that-AT-CIPSTART-causes-busy-if-the-serve.patch

	Upstream files only

0036-feat-mbedtls-Speed-up-mbedtls-handshake-process.patch

	Merged app/mbedtls/app/espconn_mbedtls.c

0037-fix-api-Fix-os_calloc-declaration.patch

	Merged app/include/lwip/mem.h; sdk-overrides/include/mem.h
	non-conflicting.

0038-fix-mbedtls-Fix-disconnect-callback-function-never-b.patch

	Merged app/mbedtls/app/espconn_mbedtls.c; minor revision to logic in
	6576af959b1e704003ae5b93f6d6b89fcf86d429.  Whitespace fixes.

0039-feat-at-Add-country-code-start-channel-in-AT-CWCOUNT.patch
0040-fix-net80211-Fix-Null-pointer-in-ieee80211_rfid_locp.patch

	Upstream files only

0041-feat-wifi-Add-new-esp_init_data_default-v08-bin.patch

	Upstream files only, but impacts Makefile

0042-fix-mbedtls-Fix-load-cert-fail-when-the-private-key-.patch

	Merged app/mbedtls/app/espconn_mbedtls.c

0043-fix-wifi-The-start-channel-can-be-any-valid-channel.patch
0044-fix-wifi-Fix-scan-do-not-start-after-connect.patch
0045-feat-wifi-Add-keep-connection-for-station-to-keep-co.patch
0046-feat-at-Update-AT-version-to-1.6.0.0.patch
0047-fix-at-Fix-GSLP-too-long-time.patch
0048-fix-at-Fix-the-message-is-incorrect-when-creating-UD.patch
0049-feat-at-Add-AT-CIPSERVERMAXCONN.patch

	Upstream files only

0050-feat-system-Add-softap-distributes-station-ip-event.patch

	Upstream files only, user_interface.h override non-conflicting

0051-feat-example-Use-libmbedtls.a-instead-of-libssl.a-in.patch

	Upstream files only

0052-feat-mesh-Remove-mesh-support.patch

	Upstream files only, but go ahead and remove comment from
	ld/nodemcu.ld.

0053-fix-example-Fix-forget-to-add-integer-parameter-when.patch

	Upstream files only

0054-fix-mbedtls-Fix-reconnect_callback-is-not-triggered-.patch

	Merged app/mbedtls/app/espconn_mbedtls.c

0055-feat-at-Add-AT-SYSMSG-to-enable-some-report-informat.patch
0056-fix-at-Fix-the-incorrect-link-id-when-client-connect.patch
0057-fix-at-Fix-the-bug-that-it-should-be-error-when-the-.patch
0058-fix-smartconfig-Fix-the-smartconfig-scan-time-issue.patch
0059-fix-lwip-Fix-the-bug-of-lwip-output.patch

	Upstream files only

0060-fix-lwip-Fix-the-length-of-TCP-data-in-one-packet-is.patch
0061-fix-lwip-Fix-send-TCP-data-with-two-or-more-pbuf.patch

	Merged app/lwip/core/tcp_out.c

0062-fix-wifi-Fix-assert-happen-when-smartconfig-start-th.patch

	Upstream files only

0063-fix-mbedtls-Fix-memory-leak-when-ESP8266-as-SSL-TLS-.patch

	Merged app/mbedtls/app/espconn_mbedtls.c

0064-fix-mbedtls-Fix-already-freed-and-exception-bug-when.patch

	Merged app/mbedtls/app/lwIPSocket.c

0065-fix-at-Fix-bug-that-there-is-no-result-when-sending-.patch
0066-feat-example-Add-AT-bin-version.patch
0067-feat-version-Update-version-to-2.2.0-and-add-version.patch
0068-feat-bin-Update-AT-bin-for-SDK-2.2.0.patch

	Upstream files only

Apply local changes to build:

app/include/lwip/app/espconn.h pulls changes (and license decl) from
upstream SDK.  Makefile is altered to use this file ahead of the
SDK's.

Remove lwip's sntp support, since it was never really wired in anyway.
See https://github.com/nodemcu/nodemcu-firmware/issues/2042 for more
information.  Patch Makefile to strip time.o, the consumer of lwip's
sntp functionality, from libmain.a, resulting in much
easier-to-understand error messages.

This has consequences for mbedtls.  The simplest thing to do, which is,
impressively, not a change in behavior, is to completely disable TLS
certificate time validation; a later patch can optionally couple this to
RTCTIME support.

Similarly, it happens that the sqlite3 import was calling time(), but
this was not going to work out well for it.  Just stub it out to always
return unix timestamp 0, as would have happened anyway.

Changes unprocessed:

0007-sync-from-080c37e1.patch
0008-feat-lib-Compile-some-libraries-with-ffunction-secti.patch

	These two make changes to the linker script; perhaps
	they are worth porting over, but I have not done so
	here.

This is build-tested (ADC, BIT, COLOR_UTILS, CRON, CRYPTO, DHT, ENCODER,
FILE, GPIO, HTTP, I2C, MQTT, NET, NODE, OW, PCM, PERF, PWM, RTCFIFO,
RTCMEM, RTCTIME, SNTP, SPI, SQLITE3, STRUCT, TLS, TMR, UART, WIFI,
WS2812, WS2812_EFFECTS) and boots, but only limited run-time testing has
been performed. Testing done does, however, include having made a few
TLS connections through the HTTP module, so things are not hopelessly
broken, at the very least.

  • This PR is for the dev branch rather than for master.
  • This PR is compliant with the other contributing guidelines as well (if not, please describe why).
  • I have thoroughly tested my contribution.
  • The code changes are reflected in the documentation at docs/en/*.

@marcelstoer marcelstoer added this to the 2.2 milestone Feb 21, 2018
Copy link
Member

@devsaurus devsaurus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks a lot @nwf!

@Code1110
Copy link

Code1110 commented Feb 27, 2018

I have tested the firmware and can confirm, that the issue mentioned in espressif/ESP8266_NONOS_SDK#46 (comment) still exists. I get a lot of connects/disconnects because of BEACON_TIMEOUT.

Hardware: WeMos D1 Mini
Testscript:

sntp.sync()

function logEvent(event)
	print(event)
	local f = file.open("wifievents.log", "a+")
	f:writeline(rtctime.get()..event)
	f:close()
end

wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T)
	logEvent("\tSTA - CONNECTED".."\tSSID: "..T.SSID.."\tBSSID: "..T.BSSID.."\tChannel: "..T.channel)
end)

wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
	logEvent("\tSTA - DISCONNECTED".."\tSSID: "..T.SSID.."\tBSSID: "..T.BSSID.."\treason: "..T.reason)
end)

wifi.eventmon.register(wifi.eventmon.STA_AUTHMODE_CHANGE, function(T)
	logEvent("\tSTA - AUTHMODE CHANGE".."\told_auth_mode: "..T.old_auth_mode.."\tnew_auth_mode: "..T.new_auth_mode)
end)

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
	logEvent("\tSTA - GOT IP".."\tStation IP: "..T.IP.."\tSubnet mask: "..T.netmask.."\tGateway IP: "..T.gateway)
end)

wifi.eventmon.register(wifi.eventmon.STA_DHCP_TIMEOUT, function()
	logEvent("\tSTA - DHCP TIMEOUT")
end)

wifi.eventmon.register(wifi.eventmon.WIFI_MODE_CHANGED, function(T)
	logEvent("\tSTA - WIFI MODE CHANGED".."\told_mode: ".. T.old_mode.."\tnew_mode: "..T.new_mode)
end)

I tested it on the same device with the firmware from nwf:for-upstream-sdk22 and another one built by the cloud build service from 2018-02-08 20:59 (master branch).

The output with the new firmware looks like this:

1519573696	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519573699	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519573700	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519573730	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519573733	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519573734	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519574517	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519574520	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519574520	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519577415	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519577418	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519577419	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519580257	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519580260	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519580261	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519581308	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519581311	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519581312	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519581344	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519581347	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519581348	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519581905	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519581908	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519581909	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519581945	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519581947	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519581948	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519582988	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519582991	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519582991	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519588702	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519588705	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519588706	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519588973	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519588976	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519588977	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519590034	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200
1519590037	STA - CONNECTED	SSID: [SSID]	BSSID: [BSSID]	Channel: 5
1519590038	STA - GOT IP	Station IP: 192.168.1.134	Subnet mask: 255.255.255.0	Gateway IP: 192.168.1.1
1519591353	STA - DISCONNECTED	SSID: [SSID]	BSSID: [BSSID]	reason: 200

This means, there is a disconnect at least one per hour:

25.02.2018 16:48:16
25.02.2018 16:48:50
25.02.2018 17:01:57
25.02.2018 17:50:15
25.02.2018 18:37:37
25.02.2018 18:55:08
25.02.2018 18:55:44
25.02.2018 19:05:05
25.02.2018 19:05:45
25.02.2018 19:23:08
25.02.2018 20:58:22
25.02.2018 21:02:53
25.02.2018 21:20:34
25.02.2018 21:42:33

When I run the same script with the SDK 2.1.0 firmware, I don't get any disconnects.

@devyte
Copy link

devyte commented Feb 27, 2018

There was a connectivity issue fixed post 2.2 release. I believe you have to erase the sdk settings, or erase the entire flash, as the settings bytes have changed order.

@marcelstoer
Copy link
Member

Should we pull in all changes Espressif added to their 2.2.x branch post release?

-> espressif/ESP8266_NONOS_SDK@master...release/v2.2.x

It may be helpful for issues like the one above but traceability will definitely suffer.

@Code1110
Copy link

@devyte: thanks for the hint. I flashed the firmware again and erased the flash (I was using NodeMCU PyFlasher and set Erase flash to yes, wipes all data). I still get a lot of disconnects. Am I missing something?

@devyte
Copy link

devyte commented Feb 28, 2018

I'm not sure, having to forcibly erase the sdk settings was only one of the issues we had at our repo.
If you compare the new user_interface.h against the old, you'll notice that some structs have changed due to additional data members. If you're initializing via member assignment, then you now have to add assignments for the extra members. Unless you're doing a memcpy 0, but in that case you still have to check if zeroing the whole struct is valid.

@devsaurus
Copy link
Member

Should we pull in all changes Espressif added to their 2.2.x branch post release?

We could pull additional commits from the SDK repo with the mechanism which was added to the Makefile to pull Espressif's former patch ZIPs. Should work well for binary blobs like libwifi.a.
But we need to understand first what is required to fix the issue and then decide about a solution.

@devyte
Copy link

devyte commented Feb 28, 2018

Here's an example of something we needed to add over at Arduino for station mode (I'm paracoding):

struct station_config conf;
strcpy(conf.ssid, ssid);
strcpy(conf.password, passphrase);
conf.threshold.rssi = -127; //<----- New member init!! and it's non-zero!!!
conf.threshold.authmode = AUTH_OPEN; //new member init!!

@devyte
Copy link

devyte commented Feb 28, 2018

Also: there is now a country policy api for radio compliance (start channel, number of channels). If you don't set it, it defaults to China.

@devsaurus
Copy link
Member

conf.threshold.rssi = -127; //<----- New member init!! and it's non-zero!!!
conf.threshold.authmode = AUTH_OPEN; //new member init!!

These defaults seem reasonable and I'd support to add them here as well. What happens if they are set to 0?

Also: there is now a country policy api for radio compliance (start channel, number of channels). If you don't set it, it defaults to China.

We'd probably need a Lua API for that at some point. Are there any drawbacks if it remains at CN default for the time being?

struct scan_cfg also got additional elements which might need safe defaults. Currently, they are left uninitialized by wifi.sta.listap(). AP scanning appears to still work, maybe just by pure luck.

@devsaurus
Copy link
Member

For reference: I've raised the question regarding init of new struct members in espressif/ESP8266_NONOS_SDK#103.

@devsaurus
Copy link
Member

@nwf there are two sets of esp_init_default_data since espressif/ESP8266_NONOS_SDK@d62e5a7. What was your reason to use v05 instead of v08?

@nwf
Copy link
Member Author

nwf commented Mar 1, 2018

@devsaurus The commit message for espressif/ESP8266_NONOS_SDK@d62e5a7 says "Rename old bin to v05.bin" and I thought sticking with the old one was the least invasive change.

@devsaurus
Copy link
Member

devsaurus commented Mar 1, 2018

That's a valid point, for sure. I was a bit confused to see that 2.2.0 ships 2 variants of the init data while being unable to find any directions in the SDK docs about differences or intended use cases.

On the other hand I appreciate that Espressif established a version identifier in the 2nd byte with new v08. This enables our user_start_trampoline() to check for up-to-date init data in flash. Up to now it accepts any init data, even if it's outdated. This is a long standing shortcoming IMO and a source for repeated support issues when users upgrade to new firmware versions (the remedy is to erase whole flash). But that's out of scope here.

Copy link
Member

@devsaurus devsaurus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update nodemcu version identifiers in app/include/user_version.h

@devsaurus
Copy link
Member

Stumbled upon an issue where wifi.sta.connect() won't connect to my AP.
Enabled sntp module and executed the following code after reset:

print("Connecting to wifi...")

function connected(info)
     print("connected to station " .. info.SSID)
     wifi.eventmon.unregister(wifi.eventmon.STA_CONNECTED)
     connected=nil
end

function got_ip(info)
     print(string.format("got ip: %s, gw: %s", info.IP, info.gateway))
     wifi.eventmon.unregister(wifi.eventmon.STA_GOT_IP)
     got_ip=nil
end


wifi.setmode(wifi.STATION)
wifi.sta.config({ssid="SSID",
                 pwd="password",
                 connect_cb=connected,
                 got_ip_cb=got_ip,
                 auto=false, save=false})

wifi.sta.connect()

Station does not connect.

Added at the beginning of wifi_station_config():

  memset(&sta_conf.threshold, 0, sizeof(sta_conf.threshold));

Station connects.

Seems there's some randomness involved when threshold is not initialized at all...

@devyte
Copy link

devyte commented Mar 2, 2018

@devsaurus the threshold content is used to filter APs during scan prior to connect. If the values inited there aren't correct, then you get what you just encountered.
The rssi is the minimum signal strength to care. I don't know the unit. If you want to connect to all APs, even weak ones, then set to min possible value (-127).
Tha auth is the the minimum authorization type to care. It's an enum which just happens to start its definition at 0. If you want to connect to an AP with any auth, set to AUTH_OPEN (safer than 0).

@devsaurus
Copy link
Member

Understood that @devyte. The memset wasn't meant to be a solution, rather a demonstration of the failure's sensitivity.
I still think that your proposal makes sense and wonder what Espressif will answer since their IoT_Demo just zeroes the struct.

@devsaurus
Copy link
Member

@Code1110 I can't reproduce the periodic disconnects (after having applied the temporary kludge from #2269 (comment)). Which modules did you select for your test build from nwf:for-upstream-sdk22?

Note that you can get calendar time format with rtctime.epoch2cal().

@Code1110
Copy link

Code1110 commented Mar 3, 2018

@devsaurus I can't tell you exactly atm, because I'm im holidays, but I think, I used the default set of modules and added http, sjson, sntp, rtctime, i2c, si7021. Please note, that I haven't applied any patches/workarounds and just cloned the repo from nwf:for-upstream-sdk22 and built it using the docker image from marcelstoer.

@nwf
Copy link
Member Author

nwf commented Mar 3, 2018

@devsaurus Are node major and minor synchronized to the SDK? That is, should it now be

#define NODE_VERSION_MAJOR		2U
#define NODE_VERSION_MINOR		2U
...
#define NODE_VERSION	"NodeMCU 2.2.0"

Separately, if NODE_VERSION is always so derived from _MAJOR and friends, why not use CPP stringification?

@devsaurus
Copy link
Member

Are node major and minor synchronized to the SDK?

Yes, though I can't provide a reference atm.

Stringification is a good idea 👍

nwf added 2 commits March 13, 2018 19:28
Initial commit for
nodemcu#2225 .

Replay patches from Espressif's repository at
https://github.com/espressif/ESP8266_NONOS_SDK between tags v2.1.0 and
v2.2.0:

	0001-sync-from-ccca00f2.patch

		Superseded by existing changes, but lines reordered in app/driver/key.c
		to minimize divergences.

	0002-sync-from-3f38ad5a.patch

		Upstream files only

	0003-Update-links.patch

		Not meaningful to NodeMCU

	0004-sync-from-01990ad0.patch
	0005-sync-from-cdf6877d.patch

		Upstream files only

	0006-sync-from-f29e744c.patch

		Upstream files only, user_interface.h override non-conflicting

	0009-feat-lwip-Move-lwip-source-code-to-third_party-folde.patch

		Merged change to lwip/app/espconn_udp.c; rest is just moves or
		appears to not apply.

	0010-feat-mbedtls-Add-mbedtls-source-code-in-third_party-.patch

		Does not apply; we use our own mbedtls

	0011-added-C-support.patch

		Merged to Makefile

	0012-feat-mbedtls-Rebuild-libmbedtls.patch

		Already applied

	0013-fix-at-Fix-some-bugs-of-AT.patch

		Upstream files only

	0014-feat-err_t-Redefine-err_t-to-s32_t.patch

		Merged to app/include/arch/cc.h and ./app/include/lwip/app/espconn.h;
		the rest is upstream files.

	0015-fix-wpa-Fix-wpa-wpa2-ptk-gtk-reinstallation-vulnerab.patch
	0016-fix-wifi-Remove-group-key-entry-before-connecting-to.patch
	0017-feat-lib-Remove-time-function-in-libmain.patch

		Upstream files only

	0018-feat-espconn-Modification-for-espconn.patch

		Merged to app/include/lwip/app/espconn.h,
		app/include/lwip/app/espconn_tcp.h, app/lwip/app/espconn.c,
		app/lwip/app/espconn_tcp.c

	0019-feat-at-Use-new-espconn_recv-to-fix-tcp-server-issue.patch
	0020-feat-examples-Update-mqtt-demo-and-auto-bin-generate.patch

		Upstream files only

	0021-wifi-Add-scan-threshold-and-dwell-time.patch
	0022-feat-wifi-Add-country-code-API.patch
	0023-feat-wifi-Record-more-information-of-scanned-ap.patch

		Upstream files only, user_interface.h override non-conflicting

	0024-fix-example-Fix-IoT_Demo-user-sector-error.patch

		Upstream files only

	0025-fix-lwip-Fix-sequence-number-error-of-RST-ACK.patch

		Merged app/lwip/core/tcp_in.c

	0026-fix-mbedtls-Fix-memory-leak.patch

		Merged app/mbedtls/app/lwIPSocket.c

	0027-fix-mbedtls-Fix-call-send-callback-function-failed.patch

		Merged app/mbedtls/app/espconn_mbedtls.c

	0028-feat-Add-USE_OPTIMIZE_PRINTF-in-third_party-Makefile.patch

		Merged app/Makefile

	0029-fix-api-Fix-ets_delay_us-declaration.patch

		Upstream files only, osapi.h override non-conflicting

	0030-fix-wifi-Remove-max_tx_power-in-wifi_country_t-in-li.patch
	0031-fix-wifi-Fix-softAP-wrong-behavior-after-call-system.patch
	0032-fix-wifi-bugfix-of-scan-fail-after-connected-if-max-.patch
	0033-feat-at-Enable-scan-time-scan-type-and-add-scan-resu.patch
	0034-feat-at-Add-command-AT-CWCOUNTRY.patch
	0035-fix-at-Fix-that-AT-CIPSTART-causes-busy-if-the-serve.patch

		Upstream files only

	0036-feat-mbedtls-Speed-up-mbedtls-handshake-process.patch

		Merged app/mbedtls/app/espconn_mbedtls.c

	0037-fix-api-Fix-os_calloc-declaration.patch

		Merged app/include/lwip/mem.h; sdk-overrides/include/mem.h
		non-conflicting.

	0038-fix-mbedtls-Fix-disconnect-callback-function-never-b.patch

		Merged app/mbedtls/app/espconn_mbedtls.c; minor revision to logic in
		6576af9.  Whitespace fixes.

	0039-feat-at-Add-country-code-start-channel-in-AT-CWCOUNT.patch
	0040-fix-net80211-Fix-Null-pointer-in-ieee80211_rfid_locp.patch

		Upstream files only

	0041-feat-wifi-Add-new-esp_init_data_default-v08-bin.patch

		Upstream files only, but impacts Makefile

	0042-fix-mbedtls-Fix-load-cert-fail-when-the-private-key-.patch

		Merged app/mbedtls/app/espconn_mbedtls.c

	0043-fix-wifi-The-start-channel-can-be-any-valid-channel.patch
	0044-fix-wifi-Fix-scan-do-not-start-after-connect.patch
	0045-feat-wifi-Add-keep-connection-for-station-to-keep-co.patch
	0046-feat-at-Update-AT-version-to-1.6.0.0.patch
	0047-fix-at-Fix-GSLP-too-long-time.patch
	0048-fix-at-Fix-the-message-is-incorrect-when-creating-UD.patch
	0049-feat-at-Add-AT-CIPSERVERMAXCONN.patch

		Upstream files only

	0050-feat-system-Add-softap-distributes-station-ip-event.patch

		Upstream files only, user_interface.h override non-conflicting

	0051-feat-example-Use-libmbedtls.a-instead-of-libssl.a-in.patch

		Upstream files only

	0052-feat-mesh-Remove-mesh-support.patch

		Upstream files only, but go ahead and remove comment from
		ld/nodemcu.ld.

	0053-fix-example-Fix-forget-to-add-integer-parameter-when.patch

		Upstream files only

	0054-fix-mbedtls-Fix-reconnect_callback-is-not-triggered-.patch

		Merged app/mbedtls/app/espconn_mbedtls.c

	0055-feat-at-Add-AT-SYSMSG-to-enable-some-report-informat.patch
	0056-fix-at-Fix-the-incorrect-link-id-when-client-connect.patch
	0057-fix-at-Fix-the-bug-that-it-should-be-error-when-the-.patch
	0058-fix-smartconfig-Fix-the-smartconfig-scan-time-issue.patch
	0059-fix-lwip-Fix-the-bug-of-lwip-output.patch

		Upstream files only

	0060-fix-lwip-Fix-the-length-of-TCP-data-in-one-packet-is.patch
	0061-fix-lwip-Fix-send-TCP-data-with-two-or-more-pbuf.patch

		Merged app/lwip/core/tcp_out.c

	0062-fix-wifi-Fix-assert-happen-when-smartconfig-start-th.patch

		Upstream files only

	0063-fix-mbedtls-Fix-memory-leak-when-ESP8266-as-SSL-TLS-.patch

		Merged app/mbedtls/app/espconn_mbedtls.c

	0064-fix-mbedtls-Fix-already-freed-and-exception-bug-when.patch

		Merged app/mbedtls/app/lwIPSocket.c

	0065-fix-at-Fix-bug-that-there-is-no-result-when-sending-.patch
	0066-feat-example-Add-AT-bin-version.patch
	0067-feat-version-Update-version-to-2.2.0-and-add-version.patch
	0068-feat-bin-Update-AT-bin-for-SDK-2.2.0.patch

		Upstream files only

Apply local changes to build:

	app/include/lwip/app/espconn.h pulls changes (and license decl) from
	upstream SDK.  Makefile is altered to use this file ahead of the
	SDK's.

	Remove lwip's sntp support, since it was never really wired in anyway.
	See nodemcu#2042 for more
	information.  Patch Makefile to strip time.o, the consumer of lwip's
	sntp functionality, from libmain.a, resulting in much
	easier-to-understand error messages.

	This has consequences for mbedtls.  The simplest thing to do, which is,
	impressively, not a change in behavior, is to completely disable TLS
	certificate time validation; a later patch can optionally couple this to
	RTCTIME support.

	Similarly, it happens that the sqlite3 import was calling time(), but
	this was not going to work out well for it.  Just stub it out to always
	return unix timestamp 0, as would have happened anyway.

Changes unprocessed:

	0007-sync-from-080c37e1.patch
	0008-feat-lib-Compile-some-libraries-with-ffunction-secti.patch

		These two make changes to the linker script; perhaps
		they are worth porting over, but I have not done so
		here.

This is build-tested (ADC, BIT, COLOR_UTILS, CRON, CRYPTO, DHT, ENCODER,
FILE, GPIO, HTTP, I2C, MQTT, NET, NODE, OW, PCM, PERF, PWM, RTCFIFO,
RTCMEM, RTCTIME, SNTP, SPI, SQLITE3, STRUCT, TLS, TMR, UART, WIFI,
WS2812, WS2812_EFFECTS) and boots, but only limited run-time testing has
been performed.  Testing done does, however, include having made a few
TLS connections through the HTTP module, so things are not hopelessly
broken, at the very least.
Derive NODE_VERSION by concatenating string constants.
@nwf
Copy link
Member Author

nwf commented Mar 13, 2018

New version just pushed, which kicks user_version.h over to being a wrapper around ESP's version.h. The branch has been rebased for ease of pulling, too. :)

nwf added a commit to nwf/docker-nodemcu-build that referenced this pull request Mar 13, 2018
@MarkMartinec
Copy link

MarkMartinec commented Mar 15, 2018

Can I assume that the ESP8266_NONOS_SDK fix 0015-fix-wpa-Fix-wpa-wpa2-ptk-gtk-reinstallation-vulnerab.patch fixed the ‘KRACK’ (Key Reinstallation AttaCK) WiFi Security Weakness? If so, this pull request should be promoted from 'enhancement' to 'fixes a critical security vulnerability'.

Here is a statement from Espressif Systems: Information for VU#228519: https://www.kb.cert.org/vuls/id/CHEU-ARFFHX

ESP8266 which uses RTOS SDK or NONOS SDK after October 13, 2017 will not be affected by this vulnerability. We strongly recommend that users update their ESP-IDF, ESP8266 RTOS SDK and ESP8266 NONOS SDK to the latest version to avoid being affected by this vulnerability.

@nwf
Copy link
Member Author

nwf commented Mar 15, 2018

@MarkMartinec I have no visibility into the upstream .a files (other than a disassembler, I suppose), but assuming that the commit does what it says on the tin, that would seem to be their fix for KRACK, yes.

With luck, this PR will get committed to dev Real Soon Now (TM). I think I have made the changes that @devsaurus requested.

Copy link
Member

@devsaurus devsaurus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for improving the version handling @nwf!

@devsaurus devsaurus dismissed their stale review March 17, 2018 14:21

Requested changes were applied.

@devsaurus
Copy link
Member

I still observe a regression with #2269 (comment)
Anybody else seeing this?

@marcelstoer
Copy link
Member

@devsaurus it failed to connected to the persisted AP after the update. I then ran wifi.sta.config again (for the same AP) and now all is well. I cannot reproduce the problem you're seeing. I tested with lots of resets / reboots.

@devsaurus devsaurus merged commit 96601b6 into nodemcu:dev Mar 20, 2018
@eyaleb
Copy link

eyaleb commented Mar 20, 2018

RE #2269 (comment) "there are two sets of esp_init_default_data"

What are the differences between the two defaults, and when should either be used?

@Code1110
Copy link

I applied the fix mentioned in #2269 (comment), but still get disconnects. Actually, I'm testing with the new patch (#2309).

To confirm, that the issue really exists, I yesterday flashed two factory new nodes. One with the dev-branch from yesterday and the other one with the nwf:for-upstream-sdk22-branch (applying #2269 (comment)). I compiled both firmwares with exactly the same modules using the docker image.

@Code1110
Copy link

I did a lot of testing regarding the disconnect issue and it's hard to spot. It seems, it has something to do with the selected modules.

Got disconnects with these builds:

NodeMCU custom build by frightanic.com
	branch: dev
	commit: 6218b9263b97c73f1ecca71de204ba4d6ee812c0
	SSL: false
	modules: adc,bit,file,gpio,http,i2c,mqtt,net,node,ow,rtctime,sjson,sntp,spi,tmr,uart,wifi
 build 	built on: 2018-03-24 00:05
 powered by Lua 5.1.4 on SDK 2.2.0(f28eaf2)

NodeMCU custom build by frightanic.com
	branch: dev
	commit: 519d6df62c0696f6222411b836328b9b4bb3a6ee
	SSL: false
	modules: adc,bit,file,gpio,http,i2c,mqtt,net,node,ow,rtctime,sjson,sntp,spi,tmr,uart,wifi
 build 	built on: 2018-03-25 16:46
 powered by Lua 5.1.4 on SDK 2.2.1(cfd48f3)

No disconnects with these builds:

NodeMCU custom build by frightanic.com
	branch: dev
	commit: 6218b9263b97c73f1ecca71de204ba4d6ee812c0
	SSL: false
	modules: enduser_setup,file,gpio,http,i2c,mqtt,net,node,ow,rtctime,si7021,sjson,sntp,tmr,tsl2561,uart,wifi
 build 	built on: 2018-03-24 00:20
 powered by Lua 5.1.4 on SDK 2.2.0(f28eaf2)

NodeMCU custom build by frightanic.com
	branch: dev
	commit: 477116f79f9e0274c02c6287ed20e637d7c32d56
	SSL: false
	modules: enduser_setup,file,gpio,http,i2c,mqtt,net,node,ow,rtctime,si7021,sjson,sntp,tmr,tsl2561,uart,wifi
 build 	built on: 2018-03-26 17:50
 powered by Lua 5.1.4 on SDK 2.2.1(cfd48f3)

@nwf nwf deleted the for-upstream-sdk22 branch March 27, 2018 01:53
@devsaurus
Copy link
Member

@Code1110 thanks for the continued testing!
May I ask you to open a new issue? This one here is too crowded IMO.
In the new issue please include your findings and also a minimum code example and instructions to reproduce.

marcelstoer pushed a commit to marcelstoer/docker-nodemcu-build that referenced this pull request Apr 5, 2018
devsaurus added a commit to devsaurus/nodemcu-firmware that referenced this pull request May 8, 2018
…atch in nodemcu#2269

espconn_tcp_reconnect() was removed instead of espconn_list_delete()
@devsaurus devsaurus mentioned this pull request May 8, 2018
3 tasks
marcelstoer pushed a commit that referenced this pull request May 15, 2018
* fix application of patch 0018-feat-espconn-Modification-for-espconn.patch in #2269
espconn_tcp_reconnect() was removed instead of espconn_list_delete()
@devsaurus devsaurus mentioned this pull request May 21, 2018
3 tasks
@nwf nwf mentioned this pull request Sep 21, 2020
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants