feat(core): packet capture per card after Java's Lauscher, measured card by card
The engine keeps Java's packet capture (capture.ts): per network card every frame it sent (when it leaves on the cable) or received (also one for another card), once, with time and number; switches log nothing; frames the packet loss dropped are kept apart; the capture outlives a stop and a new start, as in Java, until clearCapture. Per port instead of per MAC, at most 10,000 frames a card. expectSameCaptures compares each card's capture with Java's list of that card in the ARP, WLAN, DNS, TCP, NAT, RIP and single-client DHCP runs. It found that ScenarioNetwork ignored a switch's learning time (Java ran 300 s, the core the scenarios' 5 s); the oracle sets it now, and the TCP and DHCP runs are recorded again. A core test found that a new start numbers frames from 1 again and the capture took them as seen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -144,10 +144,14 @@ public class ScenarioNetwork {
|
||||
cable.setAnschluesse(new Port[] { ports.get(link.get("sourcePort")), ports.get(link.get("targetPort")) });
|
||||
cable.setWireless(Boolean.TRUE.equals(link.get("wireless")));
|
||||
}
|
||||
// A switch's SSID, a host's wireless card and the SSID it joins: what the
|
||||
// editor reads to lay a wireless cable; the simulation does not ask.
|
||||
// A switch's SSID and learning time; a host's wireless card and the SSID
|
||||
// it joins. The SSIDs only the editor reads, to lay a wireless cable.
|
||||
for (Map.Entry<String, Object> entry : map(scenario.getOrDefault("switches", new HashMap<>())).entrySet()) {
|
||||
((SwitchFirmware) nodes.get(entry.getKey()).getSystemSoftware()).setSSID((String) map(entry.getValue()).get("ssid"));
|
||||
Map<String, Object> config = map(entry.getValue());
|
||||
SwitchFirmware firmware = (SwitchFirmware) nodes.get(entry.getKey()).getSystemSoftware();
|
||||
firmware.setSSID((String) config.get("ssid"));
|
||||
// How long the switch keeps a learned MAC address (Java's default 300 s).
|
||||
if (config.containsKey("retention")) firmware.setRetentionTime(((Number) config.get("retention")).longValue());
|
||||
}
|
||||
for (Map.Entry<String, Object> entry : map(scenario.getOrDefault("wireless", new HashMap<>())).entrySet()) {
|
||||
Betriebssystem os = (Betriebssystem) system(nodes.get(entry.getKey()));
|
||||
|
||||
Reference in New Issue
Block a user