Fire firmwareversioner, én tabel pr. emne: hvad de kan, hvordan de håndterer 17 forskellige fejl i netværkschippen, hvordan de kommer sig, når linket, gatewayen eller modtageren svigter, hvor mange krav fra netværksstandarderne de opfylder, og hvordan de opfører sig i daglig drift. Alt er målt på den samme rigtige EPS-boks med de samme forhåndsregistrerede værktøjer; hvor en version ikke er testet, står det i tabellen.
English version: EPS firmware: every version compared
v3.3 er den mest robuste af de fire på alle de målinger, vi har, og det er den, vi anbefaler som officiel. v2.2 skal slukkes og tændes efter de fleste netværksfejl. v3.1 kommer sig efter mange, men dør på fire chipfejl, heriblandt den, der matcher symptomet fra felten. v3.2 kommer sig efter dem, men er død, når PHY'en (chippens fysiske netværksdel) holdes i reset, og dens tjek af modtageren holder op med at teste noget, så snart gatewayen har svaret én gang. v3.3 kommer sig efter alle 17 fejl, tester reelt sin modtager hvert minut og registrerer forsyningsspændingen ved hver chipfejl. Ingen af dem er bevist i felten endnu, og den mest sandsynlige udløser i felten (et dyk i strømforsyningen) mangler stadig at blive testet manuelt.
Ben, udgange, sekvenstiming, indgange, LED'en, TCP-styringsprotokollen og de gemte indstillinger er de samme i alle fire; kun netværksdelen er forskellig. v3.1 → v3.2 → v3.3 er små skridt på den samme omskrevne driver.
| Område | v2.2 (felt) | v3.1 | v3.2 | v3.3 |
|---|---|---|---|---|
| Netværksdriver | Arduino Ethernet 2.0.2 | egen W5500-driver | samme | samme |
| Forbindelser | 4 sockets delt af alt, én optaget af keepalive; ledige eller halvåbne forbindelser lukkes aldrig | 8 sockets, faste pr. tjeneste; ledige webforbindelser lukkes efter 5 s, ældste styringsforbindelse smides ud | samme | samme |
| Websidens output | ét TCP-segment pr. byte (~3.600 pr. visning) | bufferet, 2–3 segmenter | samme | samme |
| DHCP | bibliotek: blokerer op til 60 s, strander på sin reserveadresse | RFC 2131, blokerer aldrig, bliver ved med at spørge | samme | samme |
| Detektering af adressekonflikt | ingen | RFC 5227 | samme | samme |
| TCP-opgivelsestid | 18,4 s (biblioteket skriver W5100'ens registeradresser) | 102 s (RFC 1122) | samme | samme |
| Selvtjek af chippen hvert 5. s | intet | version, IP, MAC, maske, gateway | + mode, genforsøg, PHY-konfigurationsbits | + PHY-reset-bit |
| PHY stopper med linket nede | genoprettes aldrig | genoprettes aldrig | kun hvis en konfigurationsbit er ændret | PHY-reset efter 30 s, med stigende interval op til ~32 min |
| Modtageren bliver døv (link oppe, hører intet) | opdages aldrig | gateway-probe, kun hvis gatewayen har svaret siden sidste link-up | samme | gateway eller seneste klient; overlever et link-up; tæller kun, når der slet intet høres |
| ARP-forespørgsler til en gateway, der er væk | 9 hvert 30. s | 20 på 4 s, hvert minut | samme | 1 pr. minut (RFC 1122) |
| For lang webforespørgsel | intet svar | 400 | 400 | 414 (RFC 9112) |
| Hændelseslog (overlever strømafbrydelse) | ingen | 96 hændelser | samme | + forsyningsspænding ved hver geninitialisering af chippen |
| Udlæsning af forsyning og brown-out | ingen | ingen | ingen | VCC, VCC_MIN, BOD i NET_STATUS |
| Syslog | ingen | RFC 5424, valgfri | samme | samme |
| Flash brugt (af 32.256 B) / RAM-globaler (af 2.048 B) | 29.876 / 736 | 31.120 / 1.364 | 31.238 / 1.364 | 32.094 / 1.407 |
Hvorfor hver ændring blev lavet (engelsk): why v3.3 · why v3.2 · mekanismer (findings) · fuld rapport · kort på dansk: hvorfor v3.3
Hver fejl skrives ind i den rigtige boks' egen W5500 af firmwaren (kun testbuilds); pc'en sender kun ping, en styringskommando og en webforespørgsel og overvåger alle tjenester i 120 s. Tre forsøg pr. fejl og firmware, forhåndsregistrerede kriterier. F1–F14 for v2.2/v3.1/v3.2 blev kørt 11. okt.; F15–F17 og hele v3.3 natten til 12. okt.
| Fejl (ét W5500-register) | v2.2 | v3.1 | v3.2 | v3.3 |
|---|---|---|---|---|
| F1 Chip-softreset (alle indstillinger tabt) | død 3/3 | ok 2/3, ok* 1/3 (6–10 s) | ok 2/3, ok* 1/3 (6–10 s) | genoprettet (4–10 s) 3/3 |
| F2 IP-adresse ændret | død 3/3 | ok 2/3, ok* 1/3 (10 s) | genoprettet (5–10 s) 3/3 | genoprettet (3–5 s) 3/3 |
| F3 MAC-adresse ændret | latent 3/3 | ok 2/3, ok* 1/3 (5–10 s) | genoprettet (6–10 s) 3/3 | genoprettet (4–6 s) 3/3 |
| F4 Gateway ændret | ok* 2/3, latent 1/3 | genoprettet (6 s) 3/3 | genoprettet (3–7 s) 3/3 | genoprettet (6–7 s) 3/3 |
| F5 Netmaske ændret | død 3/3 | genoprettet (4–7 s) 3/3 | ok 1/3, ok* 2/3 (5 s) | genoprettet (3–7 s) 3/3 |
| F6 Ping blokeret (mode-registret) | død 3/3 | død 3/3 | ok 2/3, ok* 1/3 (4–7 s) | genoprettet (3–7 s) 3/3 |
| F7 PHY slukket (matcher felt-symptomet) | død 3/3 | død 3/3 | ok 2/3, ok* 1/3 (11–12 s) | genoprettet (4–6 s) 3/3 |
| F8 PHY tvunget til 10 Mbps halv duplex | latent 3/3 | latent 3/3 | genoprettet (4–10 s) 3/3 | genoprettet (6–10 s) 3/3 |
| F9 Antal genforsøg 0 | død 3/3 | død 3/3 | genoprettet (3–5 s) 3/3 | ok 2/3, ok* 1/3 (10 s) |
| F10 Styringsportens lyttere lukket | ingen effekt 3/3 | ingen effekt 3/3 | ok 1/3, ok* 2/3 | ingen effekt 3/3 |
| F11 Styringsportens portnummer ændret | død 3/3 | ingen effekt 3/3 | ingen effekt 3/3 | ingen effekt 3/3 |
| F12 Webportens lyttere lukket | ok 2/3, ok* 1/3 | ingen effekt 3/3 | ok 2/3, ok* 1/3 | ok 2/3, ok* 1/3 |
| F13 Webportens portnummer ændret | død 3/3 | ok 2/3, ok* 1/3 | ingen effekt 3/3 | ok 2/3, ok* 1/3 |
| F14 Styringsportens modtagebuffer 0 | ingen effekt 3/3 | ingen effekt 3/3 | ingen effekt 3/3 | ingen effekt 3/3 |
| F15 PHY holdt i reset (ny) | død 3/3 | død 3/3 | død 3/3 | genoprettet (3–6 s) 3/3 |
| F17 PHY slukket, skrevet én gang (ny) | ok* 1/3, latent 2/3 | ok* 2/3, latent 1/3 | ok 2/3, ok* 1/3 (5–26 s) | ok 2/3, ok* 1/3 (6–7 s) |
| F16 F15 med kun link-nede-genopretningen (v3.3-build uden tjek af bit 7) | — | — | — | genoprettet (40 s) 3/3 |
| Scenarie | v2.2 | v3.1 | v3.2 | v3.3 |
|---|---|---|---|---|
| Netværkschippen mister alle sine indstillinger (chip-reset via kommando) | død indtil sluk/tænd (4/4) | kom sig på 2–7 s, udgange bevaret (30/30) | kom sig (fejlmatrix F1, 3/3) | kom sig på 2–8 s (38/40); to gange kom chippen tilbage døv i 38 s / ~3,5 min og kom sig selv |
| DHCP-server væk under en fornyelse | strandet indtil sluk/tænd | bliver ved med at spørge, kommer sig selv | som v3.1 | DHCP-sekvens A–E bestået |
| PHY holdt i reset (link nede, ny fejl F15) | død 3/3 | død 3/3 | død 3/3 | kom sig på 3–6 s (3/3) |
| PHY hænger med linket nede, registrene ser rigtige ud (F16) | ingen genopretning (koden) | ingen genopretning (koden) | ingen genopretning (koden) | PHY-reset efter 30 s: tilbage efter 40 s (3/3) |
| Gatewayen forsvinder (router-genstart), overvåget i 12 min | keepalive bruger den cachede adresse: ingen ARP, efter den forsvandt (ingen genopretningslogik at udløse) | som v3.2: 1 ARP, mens den var der, ingen bagefter; tjekket bliver ved med at "lykkes" | ingen ARP, efter den forsvandt: tjekket bliver ved med at "lykkes" på en cachet adresse | 1 ARP-forespørgsel pr. tjek; ingen falsk PHY-reset |
| Modtageren bliver døv med linket oppe | opdages aldrig | kan ikke opdages, når gatewayen har svaret (cachet adresse), og heller ikke uden gateway | som v3.1 | 3 tavse tjek → PHY-reset (emuleret: én gang, efter 6 min); to rigtige episoder efter geninitialiseringer forsvandt af sig selv inden (38 s, ~3,5 min) |
| Link nede i 180 s (kabel eller switch) | tilbage, når linket kommer igen (switchport-flaps, 9. okt.) | tilbage, når linket kommer igen (16/16 linkfald, 11. okt.) | ikke kørt | tilbage 8,3–8,6 s efter linket kom igen (2/2); 2 harmløse PHY-resets pr. udfald |
| Hovedløkken hænger | watchdog-genstart (udgange slukket) | watchdog-genstart ~25 s (3/3) | som v3.1 | watchdog-genstart 25 s (3/3 uden for udfaldet kl. 03:48) |
| Opstart efter USB-reset (nulstiller også netværkschippen) | 200/200 | 200/200 | ikke kørt | 50/50, median 9,2 s |
Detaljer (engelsk): DHCP-strandingen · kodeanalyse og v3.3 · fuld rapport §5.20–5.26
Beståkriterierne blev skrevet ned, før nogen firmware blev kørt; samme værktøj, samme boks. En standard er kun bestået, hvis alle dens krav er bestået. v3.2 blev ikke kørt gennem testsuiten: dens eneste ændring i forhold til v3.1 er selvtjekket, som intet i suiten måler, så dens kolonne gentager v3.1's.
| Standard | v2.2 | v3.1 | v3.2 | v3.3 |
|---|---|---|---|---|
| IEEE 802.3 Ethernet | bestået | bestået | bestået (som v3.1) | bestået |
| IEEE 802 MAC-adressering | bestået | bestået | bestået (som v3.1) | bestået |
| RFC 826 ARP | bestået | bestået | bestået (som v3.1) | bestået |
| IEEE 802.1D/Q-endestation | bestået | bestået | bestået (som v3.1) | bestået |
| RFC 5227 detektering af adressekonflikt | ikke bestået: 6 krav | bestået | bestået (som v3.1) | bestået (2 kan ikke verificeres uden forfalsket trafik) |
| RFC 5424/5426 syslog | findes ikke | bestået | bestået (som v3.1) | bestået |
| RFC 2131/2132 DHCP-klient | ikke bestået: 7 krav | ikke bestået: 1 krav | ikke bestået: 1 krav (som v3.1) | ikke bestået: 1 krav (bevidst: spørger fra sin reserveadresse) |
| HTTP (RFC 9110/9112) | ikke bestået: 7 krav | ikke bestået: 3 krav | ikke bestået: 3 krav (som v3.1) | ikke bestået: 2 krav (bevidst: tænd/sluk via GET, intet Host-tjek) |
| TCP (RFC 9293/1122) | ikke bestået: 2 krav | ikke bestået: 1 krav | ikke bestået: 1 krav (som v3.1) | ikke bestået: 1 krav (bevidst: 2 s sendetimeout) |
| RFC 1122 værtskrav | ikke bestået: 3 krav | ikke bestået: 3 krav | ikke bestået: 3 krav (som v3.1) | ikke bestået: 2 krav, begge chipbegrænsninger (ARP-raten rettet) |
| Beståede krav, af 56 | 26 | 46 | 46 | 48 |
Pr. krav (engelsk): findings · executive summary
| Test | v2.2 | v3.1 | v3.2 | v3.3 |
|---|---|---|---|---|
| Strøm og udgangssekvens (21 tjek) | referenceadfærd | 21/21 | som v3.1 | 21/21 |
| Belastningstest, kort (ledige forbindelser, derefter Companion + eXcontrol + browser) | styringsporten død med 2 ledige webforbindelser (1 af 30 besvaret) | 541/541 | som v3.1 | 541/541 |
| Ledige forbindelser holdt åbne, op til 5 pr. port | styringsporten død fra 2 | 800/800 besvaret | som v3.1 | alle besvaret |
| Vedvarende forbindelser fra styresystemer | understøttes ikke | 6/6 | som v3.1 | 6/6 |
| Skrald og forkert formateret input | — | 16/16 | som v3.1 | 16/16 |
| HTTP-metoder og forkert formaterede forespørgsler | alle metoder behandles som GET | 21/21 | som v3.1 | 21/21 plus 414 |
| DHCP-sekvens (ingen server, lease, server væk, adresse i brug) | strander efter et udfald, genstarter ved fornyelser | bestået | som v3.1 | bestået |
| 10 Mbps halv duplex | — | bestået (belastning 543/544) | som v3.1 | bestået (belastning 543/543) |
| millis()-overløb efter 49,7 dage (simuleret) | — | bestået | som v3.1 | bestået |
| Laveste frie stak set | ~0,45 KB (beregnet) | 243 B | som v3.1 | 190 B |