Zodra je een netwerk had toegevoegd, was het blok "gevonden op deze server" leeg
bij een volgende poging. Ik filterde subnetten eruit die al geconfigureerd
waren, met de gedachte "niet nog een keer voorstellen". Dat pakt verkeerd uit:
je kunt prima een tweede netwerk op hetzelfde subnet willen met een andere
range, en de gegevens zijn sowieso handig om te kunnen naslaan. Zonder dat blok
lijkt het formulier bovendien kapot.
- Gedetecteerde netwerken blijven altijd staan; ze krijgen een vlag
'configured' en tonen 'al toegevoegd' in plaats van 'gebruiken'.
- Levert de detectie niets op zonder dat er een fout is, dan staat er nu een
uitleg in plaats van een leeg blok.
- Regressietest die het blok controleert voor en na het aanmaken.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
"Ik wil van 10.0.20.200 tot .254" bestaat niet als CIDR-notatie: 55 adressen,
terwijl Docker alleen uitgelijnde blokken van een macht van twee accepteert.
Dat is niet iets wat een gebruiker zelf hoort uit te rekenen.
- Nieuwe range_options(): vertaalt een gewenst begin- en eindadres naar twee
bruikbare blokken. "Ruim" is het kleinste blok dat de hele wens omvat,
"krap" het grootste blok dat er volledig binnen valt. Met per optie hoeveel
adressen erbij komen of ontbreken.
- Endpoint POST /api/networks/range en een uitklapbare van-tot-hulp onder het
IP-range-veld; klikken op een optie vult het veld.
- Voor 10.0.20.200-254 levert dat 10.0.20.192/26 op: 62 adressen, .193 t/m .254.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
Gemeld met twee screenshots: een foutmelding dat de IP-range buiten het subnet
lag terwijl 10.0.20.240/28 gewoon binnen 10.0.20.0/24 valt, en een geval zonder
melding waarbij aanmaken toch niet lukte. Twee losse oorzaken.
1. Verouderd beoordelingsantwoord
De live beoordeling gaat af bij elke toetsaanslag. Tijdens het typen van
/28 kom je langs /2, en 10.0.20.240/2 normaliseert naar 0.0.0.0/2 - buiten
het subnet. Kwam dat antwoord na het goede binnen, dan bleef die fout staan
en bleef de knop uit.
- Volgnummer op de verzoeken; alleen het antwoord bij de laatste vraag telt.
- Knop niet meer uitgeschakeld op clientstatus; de server beslist bij het
opslaan, zodat een verouderde beoordeling nooit blokkeert.
2. CIDR met hostbits
10.0.20.200/28 leest Python met strict=False als 10.0.20.192/28, maar Docker
weigert het met "has host bits set". We valideerden soepel en stuurden de
ruwe tekst door, dus de interface keurde iets goed dat bij het aanmaken
alsnog strandde.
- normalize() zet subnet en ip_range om naar canonieke vorm voor ze naar
Docker gaan en voor ze worden opgeslagen.
- Waarschuwing die toont wat er van de invoer gemaakt is.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
JSON-parsefout in de browser bij het toevoegen van een netwerk.
De live beoordeling die bij elke toetsaanslag afgaat, bouwde een lijst van alle
bruikbare adressen in het bereik. Tijdens het intypen van 192.168.1.0/24 is de
tussenstand 192.168.1.0/2 een geldig netwerk met 1.073.741.824 adressen; het
verzoek liep daarop vast en de browser kreeg geen JSON terug.
- review() rekent eerste adres, laatste adres en aantal nu uit via
num_addresses in plaats van hosts() te doorlopen. Alle prefixes van /1 tot
/32 antwoorden binnen 0,05 seconde.
- suggest_range() had hetzelfde probleem: die somde alle /28-blokken op, bij
een /8 ruim een miljoen. Rekent nu van achteren naar voren, hoogstens
zestien stappen.
- Waarschuwing bij meer dan 4096 adressen in het bereik; dat is vrijwel altijd
een typefout in het prefix.
- Tests met /1 t/m /32, inclusief een vergelijking van _bruikbaar_bereik() met
de uitkomst van hosts() uit de stdlib, en tijdslimieten zodat een
herintroductie meteen opvalt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
- Automatische detectie van het hostnetwerk: interface, subnet, gateway en een
voorgestelde vrije IP-range worden bovenaan het formulier getoond en vullen
met een klik alles in.
- Detectie gebeurt via een kortstondige container in de netwerknamespace van de
host, die de routetabel uitleest. Dat repareert meteen een fout: de vorige
host_interfaces() las /sys/class/net binnen de container en toonde dus de
bridge-interface van de container in plaats van de netwerkkaart van de host.
- Live beoordeling terwijl je typt (nieuwe endpoint /api/networks/review): laat
zien hoeveel adressen je overhoudt en welke, en legt in gewone taal uit wat er
niet klopt. Onderscheid tussen blokkerende fouten en waarschuwingen.
- Knop die een vrij blok voorstelt op basis van het subnet, met de gateway
ontweken.
- Uitklapbare uitleg in het formulier over hoe subnet, gateway, IP-range en
host-interface samenhangen, met voorbeeld.
- docs/netwerken.md uitgebreid met een schema van de adresverdeling, een tabel
met veelgebruikte ranges, en de nadruk op het punt dat het instellen van de
range in Server Up niets aan de router doet: daar moet het DHCP-bereik zelf
verkleind worden.
- Bijgesteld tijdens het testen: een gateway binnen het subnet is de normale
situatie en gold ten onrechte als fout wanneer er geen eigen range was
opgegeven. Nu alleen een waarschuwing bij een expliciete range.
- 248 tests (21 nieuwe).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb