Appendix D - Open decisions and the plan's history¶
This appendix collects everything that is not yet settled, and it is the only place in the course that describes the history of the plan document and the points still open in it. Section D.1 lists the open design decisions with their options, consequences and owners; section D.2 lists the facts that must be confirmed on the devices or on the test bench before the corresponding configuration is used. Section D.3 records how the plan changed from the draft v0.9 (12 October 2026) to v0.91 (13 October 2026), section D.4 lists the points raised against plan v0.91 and their status, and section D.5 records the consolidation from v0.91 to v0.92 (14 October 2026), the version this course follows. The chapters themselves simply present the design.
D.1 Open decisions¶
Open decision: how the firewall test zone is attached - option B (recommended) or option A
The zone (10.9.90.0/24, VIP 10.9.90.1, members .2/.3) is the destination of class L3-ENTFW (VPN-CORE -> sw-rzk-BL -> Vsi40 -> ENT-FW -> TRex zone). The plan recommends option B and uses it as its default in every configuration, profile and address; the decision itself is still pending with the LVR network and firewall teams (plan 2.3 "RE-DECIDE", 4.3.5, open item 11).
| Option | What it means | Consequences |
|---|---|---|
| B - existing transfer VSI 4003 (recommended, the plan's default) | the firewall adds a VLAN 4003 sub-interface with the VIP on its existing inside bond; the free transfer VSI 4003 ("Transfer ENTFW *frei*") is already trunked to both members on BAGG10; TRex reaches it through the Border Leaf APs K-BL and C-BL (service instance 4003 on sw-rzk-BL XGE1/3/6 and sw-rzc-BL XGE1/3/14); zone clients 10.9.90.106 (K-BL) and 10.9.90.113 (C-BL), lab zone client 10.9.90.156 (p6 pinned to FWZ) |
no new firewall ports or optics, existing redundancy, no dependency of the cluster on the TX switches or the TX fibre; not a physical firewall link from the TX switch; the zone leg also crosses the fabric (a few tens of microseconds, identical for all zone streams); VSI 4003 had no gateway and no learned MACs in February 2025 - check that it is still unused |
| A - new physical firewall interface (alternative, the customer's original wish) | one new 10G port per ClusterXL member (CPF-ZV01, CPF-ZV02), cabled to sw-rzk-TX1 XGE1/1/7 and sw-rzc-TX1 XGE1/1/8 - both ports are already configured as option-A ports (PVID 3300, QinQ) but shut down, and S-VLAN 3300 is already defined and permitted on the TX-to-TX link and the monitoring trunks; sub-interface VLAN 1420 with the VIP; AP FW (index 14), zone client 10.9.90.114, lab zone client 10.9.90.164 (p6 re-pinned to PVID 3300, same port MAC) |
matches the original wish for a physical firewall link from the TX switch; on the TX switches only cabling and undo shutdown are missing; ClusterXL monitors the new interface, so a TX switch reboot, a fibre cut, an optic or a TRex port failure can trigger a failover or a loss of redundancy - unless the firewall team makes the interface non-critical for failover (supported way for their Check Point version) or formally accepts the risk; needs two Check Point certified SFP+ SR optics and one more SR optic per TX switch |
Both options use the same subnet, the same address formula, the same firewall objects and rules and the same
profile group (l3-entfw); only the inventory entry of the zone and the TX switch and Border Leaf configuration
differ. Owner: LVR network team together with the LVR firewall team. Needed for: class L3-ENTFW, the DSCP
firewall group dscp-entfw, ASTF firewall tests, the Border Leaf AP ports (option B) or the cabling and
undo shutdown of the pre-configured TX switch ports XGE1/1/7-8 in S-VLAN 3300 (option A), the inventory.
Covered in: Chapter 15,
B.5, B.6.
Open decision: which production VLANs are monitored, and their address pools
| Option | Consequences |
|---|---|
| Start with VLAN 1314/1315 only | no IPAM or firewall changes; class L3-DCFW is not possible (it needs two VLANs with DC-FW gateway) |
| Add 2 test-oriented VLANs (candidates in the configurations: 176 "DC-Testnetz RZ Deutz/RZ-Chorweiler", 171, 724 "Test Server Netz", 1395/1396 "t3_139x_ngfw-test") | low risk; enables L3-DCFW; needs 16-address pools, DHCP exclusions, DC-FW rules and the VLANs on the AP trunks |
| Add 2-4 business VLANs | most representative measurement; more coordination with the application owners |
Each production VLAN adds 34 loss-only flow-stat streams (3 400 pps) to the group l2-coverage-prod of the default
profile, and the VLAN has to be added to the trunk of every AP that should carry it. Owner: LVR network team /
IP address management. Covered in: Chapter 16,
B.7, B.8.
Open decision: approval of the zone subnet 10.9.90.0/24 and the ASTF ranges 10.9.92.0/24 and 10.9.93.0/24
| Option | Consequences |
|---|---|
| Approve as proposed | the zone subnet 10.9.90.0/24 - with the existing VLAN 4003 (option B) or a new VLAN 1420 (option A) - and 10.9.92.0/24 / 10.9.93.0/24 for the routed ASTF variant; the three subnets and VLAN 1420 are unused in all nine configurations of February 2025; zone VIP 10.9.90.1, members .2/.3, TRex monitoring clients .101-.116, lab clients .151-.166 |
| Allocate alternatives | inventory, firewall objects, static routes and the profile change accordingly |
The routed ASTF variant also needs ip route-static vpn-instance VPN-CORE 10.9.92.0 24 10.3.14.151 on sw-rzk-BL and
a firewall route for 10.9.93.0/24 via the zone lab client 10.9.90.156 (option A: 10.9.90.164). Owner: LVR IP
address management with the firewall team. Covered in: Chapter 15,
Chapter 22, B.6.
Open decision: Threat Prevention inspection of TRex traffic
| Option | Consequences |
|---|---|
| Exclude the TRex objects from inspection | the streams measure firewall forwarding; lower firewall load |
| Inspect like production traffic | the streams show what inspected traffic experiences, including inspection delay; more firewall load |
| Exclude for monitoring, separate inspected profile for lab tests | both views, more rules to maintain |
Owner: LVR firewall team. Covered in: Chapter 15.
Open decision: a second monitoring instance if more than 128 latency streams are ever needed
| Option | Consequences |
|---|---|
| Stay with one instance | 74 latency streams used, budget 120; further pairs are monitored with loss-only flow-stat streams |
| Second monitoring instance on p2/p3 with its own 128 latency streams | p2/p3 leave trex_mon.yaml (a NIC port belongs to one instance only); own prefix, ZMQ ports, memory and threads; the EMU helper is a single named service on port 4510 (scripts/dpdk_setup_ports.py), so how EMU is shared must be validated on the bench |
Owner: platform administrator with Secured Networks. Covered in: Chapter 16, Chapter 11.
Open decision: speed and optics of the TX-to-TX link once the distance is known
| Option | Consequences |
|---|---|
| 10G | enough for monitoring (about 26 Mbit/s); shared by monitoring and lab traffic of all RZC APs - lab tests near 10G across it disturb the monitoring |
| 40G or 100G | lab tests above 10 Gbit/s aggregate towards RZC possible; needs matching QSFP optics on both TX switches |
| DWDM channel | depends on the transponder client ports and their MTU |
The DCI between the Border Leafs uses 40G ER4 optics (40 km class), which suggests that the RZK-RZC distance is more than 10 km - choose the reach class from the measured distance. The fibre adds about 5 us per km to every RZC stream. Owner: LVR network team (fibre / DWDM provider). Covered in: Chapter 11, Chapter 14, B.4.
Open decision: host protection of the TRex control ports
Every start of t-rex-64 runs trex-cfg, which stops firewalld on Red Hat-family systems (scripts/trex-cfg). The
TRex control ports (RPC 4501/4601, publisher 4500/4600, EMU 4510, Scapy server 4507) listen on all addresses and
have no authentication: whoever reaches them can start traffic into production VLANs. The plan (4.8, 8.3)
therefore disables and removes firewalld, protects the server with the native nftables service and an allow-list
for the management hosts, and adds ACLs on the management network; this proposal, the ACLs and the list of
management hosts still need the agreement of the LVR Linux and security teams (plan open item 13).
| Option | Consequences |
|---|---|
| nftables service with an allow-list for the management hosts instead of firewalld (the plan's proposal; reference in B.2) | unaffected by TRex starts and upgrades; departs from the RHEL default tooling; the Linux team maintains the ruleset |
| Keep firewalld and start it again after every TRex start (systemd drop-in) | RHEL default tooling; a short unprotected window at every TRex start |
Patch trex-cfg |
minimal change; modifies a vendor file and must be repeated after every TRex upgrade |
| ACLs on the management network | protect independently of the host; useful in addition to any of the options above |
Whatever is chosen, the acceptance test includes "TRex restarted - host protection still active". Owner: LVR
Linux / security team with the platform administrator (ACLs: LVR network team). Needed for: go-live of
trex-rzk-01. Covered in: Chapter 17, Chapter 20,
B.2.
Open decision: ClusterXL virtual MAC or stream rebuild after a firewall failover
In February 2025 sw-rzk-BL resolved 10.9.0.22 (ENT-FW) and 10.9.0.35 (DC-FW) to MACs of the RZC members: the clusters answered with member MACs, no virtual MAC was seen. A stream whose destination MAC is a firewall MAC - all L3-DCFW streams, the zone-side L3-ENTFW and DSCP streams - keeps the old MAC after a failover and loses packets until it is rebuilt with the newly resolved MAC.
| Option | Consequences |
|---|---|
| Member MACs as today; the streams are rebuilt | no firewall change; the gateway-MAC tracker of trexctl polls the resolved gateway MAC (dgw.rmac) every 10 s, rebuilds the affected streams (same pg_ids, counters restart) and writes the event gateway_mac_changed (Grafana alert "Gateway MAC changed"); until trexctl exists this is a manual step (Chapter 23, incident I3); the loss of these streams includes the detection time, which depends on how ClusterXL announces the new MAC - the plan's 15-s target is still to be confirmed (D.2 item 19, D.4 item 1) |
| ClusterXL virtual MAC | the streams survive a failover and every firewall stream measures the failover gap; a configuration change on production firewall clusters, to be assessed by the firewall team for their Check Point version |
Test the behaviour during the first planned failover. Owner: LVR firewall team with the platform administrator (plan open item 12). Needed for: classes L3-DCFW and L3-ENTFW, the DSCP firewall group, convergence measurements of firewall failovers. Covered in: Chapter 15, Chapter 18, Chapter 23, B.6.
Open decision: how the per-stream latency thresholds (baseline) are stored
| Option | Consequences |
|---|---|
Rolling baseline in the alert rule (7-day median from trex_longterm at every evaluation) |
no extra data; new streams are covered after a few days; a lasting degradation becomes the new normal once it covers half of the window; a 7-day query at every evaluation costs CPU |
Frozen baseline stored once (per-stream thresholds written with to() into a small measurement, for example trex_baseline) |
stable, explicit, reviewable, cheap; an extra measurement and a procedure to re-run after accepted changes; new streams have no threshold until it is re-run |
| Fixed thresholds per class and pair type, written into the rules | simplest, fully visible in git; coarse - one threshold for all streams of a class, including the longer intra-RZC paths |
Owner: platform administrator with the LVR network team. Needed for: enabling notifications after the 7-day baseline (scenario S1). Covered in: Chapter 19, Chapter 21.
D.2 Items to confirm on the devices or on the bench¶
confirm on device - each item is plausible and consistent with the documentation, but must be confirmed before the related configuration is applied.
| # | Item and why it matters | How to confirm | Owner |
|---|---|---|---|
| 1 | Free AP ports. sw-rzk-L11 XGE1/3/1, sw-rzk-BL XGE1/3/6, SW-RZC-L21 XGE1/4/4 and sw-rzc-BL XGE1/3/14 were in default state and down on 17/18 Feb 2025; the ports on sw-rzk-L12/L21/L31/L41 and sw-rzc-L11/L12/L13/L22/L23 are unknown (no diag files). An AP needs an unused SFP+ port; the slot 2/4 modules are 10GBASE-T |
display interface brief, display current-configuration interface <port>, on-site check |
LVR network |
| 2 | Module layout of the spare 5950s. The TX switch configuration assumes JH404A with 24 x SFP+ in slot 1 and QSFP28 in slot 2; a JH321A needs the breakout variant | display device, display device manuinfo |
LVR network |
| 3 | ClusterXL behaviour. Evidence for one stretched ENT-FW cluster: single OSPF neighbour 10.9.0.22, Check Point MAC 001c-7f65-8ec8 local on sw-rzk-BL and 001c-7f65-ff14 via sw-rzc-BL in VSI 4002, stretched sync VLAN 123; same assumption for the DC-FW (sync VLAN 196). If option A is chosen, its production risk depends on how the new interface is monitored | Firewall team: cluster status and monitored interfaces for their Check Point version | LVR firewall |
| 4 | Use of VLAN 1314/1315 and the DC-FW mapping. The VLANs (t3_1314_webserv_win, t3_1315_winserv) are mapped to BAGG31 "Vlan-all" on both Border Leafs, so broadcasts and unknown unicast reach the DC firewall; in February 2025 no MACs were learned |
LVR confirms that the VLANs are reserved for tests and that the DC-FW has no interface in them; display l2vpn mac-address vsi VPN-1314 |
LVR network, firewall |
| 5 | DHCP exclusions and lab addresses. Vsi914/915 relay DHCP to 10.10.252.252 and 10.10.254.254, so the scopes must exclude the TRex pools (.101-.116). Lab clients use .151-.166 of every VLAN used for lab tests (lab IP = .151 + AP index - 1 of the pinned AP; their MAC is the fixed lab-port MAC) and need a second reservation and DHCP exclusion | DHCP team checks the scopes; IPAM reserves .101-.116 and .151-.166 | LVR network / IPAM |
| 6 | BPDU handling on the QinQ ports. With STP globally disabled on the TX switch, any BPDU arriving from a Leaf is expected to be flooded inside that S-VLAN to the TRex ports only. The examined Leafs and Border Leafs have spanning tree globally disabled (display stp: "Protocol status: Disabled") and send no BPDUs of their own; a Leaf that runs PVST would send them to 01-00-0c-cc-cc-cd (L2CG p. 272) |
Bench: capture on a TRex port (-f ether dst 01:00:0c:cc:cc:cd or ether dst 01:80:c2:00:00:00), display stp on the Leaf; then decide on bpdu-drop any |
bench (Secured Networks / LVR) |
| 7 | Direction of unicast-suppression. The command limits unknown unicast "on an interface" (L2CR p. 98); it must be known whether it acts on received or sent traffic before it is used on lab ports |
Bench: lab stream to an unknown MAC, rates on the monitoring trunks | bench |
| 8 | Service-mode mask with latency streams. EMU needs filtered service mode; latency and flow-stat streams must still be counted with the chosen mask (NO_TCP_UDP_MASK or service --emu) |
Bench: loopback p2-p3, latency stream plus EMU client, compare stats -l / stats -s per mode |
bench |
| 9 | Fibre distance RZK-RZC and the TX-to-TX path. The DCI uses 40G ER4 optics; the distance decides the TX-to-TX optics and the fibre offset (about 5 us per km) | Fibre or DWDM documentation, OTDR; display transceiver diagnosis interface |
LVR network |
| 10 | X710 optics and DACs. The X710 operates only with Intel SFP+ optics (TRex manual, Table 6); passive DAC usually works | Bench: dpdk_setup_ports.py -t, dmesg | grep i40e while the kernel driver is still bound |
Secured Networks / LVR Linux |
| 11 | Shared helper services. The Scapy server (4507) and the EMU server (4510) are single named daemons per host. An interactive stateless start restarts the Scapy server unless --no-scapy-server is given, so both lab units carry the flag; with it a lab unit neither restarts the helper at its start nor stops it at its exit (should_scapy_server_run(), cleanup_servers() in scripts/dpdk_setup_ports.py). A second instance started with --emu would restart the EMU server of trex-mon, so the lab units never use --emu (the firewalld stop of trex-cfg is part of the host-protection decision in D.1) |
Bench: start and stop trex-lab and trex-lab-astf while trex-mon runs; the process listening on port 4507 keeps its PID (ss -ltnp), and the EMU clients and streams of trex-mon are unaffected |
LVR Linux / Secured Networks |
| 12 | CPU threads of the two instances. services_core on the master thread 4, not on the busy-polling RX thread 5; OS, InfluxDB and Grafana on threads 0-3 and 16-19; isolcpus=4-15,20-31; the layout assumes siblings n and n+16 |
Bench: lscpu -e=CPU,CORE, latency of a loopback stream with and without load on the siblings |
Secured Networks / LVR Linux |
| 13 | Queue mode of trex-mon. In software mode with c: 1 TRex must select ONE_QUE, the mode with accurate latency; MULTI_QUE (with c >= 2) makes the latency values inaccurate (src/trex_modes.h) |
After every start: grep 'queues mode' /var/log/trex/trex-mon.log shows "set dpdk queues mode to ONE_QUE"; record it in the acceptance protocol |
Secured Networks / platform administrator |
| 14 | Gateway ARP from a Leaf AP (centralised gateway). With a centralised EVPN gateway HPE requires ARP flood suppression on the VTEPs, because a gateway with remote ARP learning disabled does not answer ARP requests for its MAC that arrive through tunnels (EVPN Configuration Guide R630x, PDF p. 28). LVR has no arp suppression enable and remote ARP learning at its default; in February 2025 sw-rzk-BL held ARP entries learned through the DCI tunnel, none through the RZK Leaf tunnels |
Rollout phase 3: an EMU client behind K-L11 (and one behind an RZC Leaf AP) resolves 10.3.14.1 (emu_show_client_info, display arp vpn-instance VPN-CORE). If not: decide between arp suppression enable in VSI view on the Leafs (VXCR pp. 5-6, a production change) and the L3 classes from the BL APs |
LVR network / bench |
| 15 | RZK gateway MAC on the RZC Leafs. In February 2025 SW-RZC-L21 had no EVPN MAC entry for ec9b-8b67-37b8 (gateway MAC of Vsi914/915), while sw-rzk-L11 and sw-rzc-BL had one. Without it, routed streams from an RZC AP are flooded as unknown unicast and arrive as duplicates at the other RZC APs |
Commissioning: display l2vpn mac-address vsi VPN-1314 and display evpn route mac on every RZC Leaf with an AP |
LVR network |
| 16 | SW-RZC-L21 XGE1/4/4. The port was down and in default state, but an HPE transceiver is inserted - the port may be reserved |
On-site check with the LVR network team; display transceiver interface Ten-GigabitEthernet1/4/4 (FCR p. 291) |
LVR network |
| 17 | VSI presence per Leaf. Not every VSI exists on every Leaf (VPN-724 and VPN-171 exist on sw-rzk-L11, not on SW-RZC-L21); a VLAN can only be added to an AP whose Leaf has its VSI |
Before every VLAN addition: display l2vpn vsi name VPN-<VLAN> on the Leaf of each AP |
LVR network |
| 18 | TOS bit 0 and UDP checksum 0 through the firewalls. TRex sets bit 0 of the TOS byte of statistics packets (0xB8 leaves as 0xB9, ECN field 01), and latency streams carry UDP checksum 0; the firewalls must forward both | Bench and first firewall tests: capture at the receiving TRex port (TOS, checksum), firewall logs for drops of the TRex objects | bench, LVR firewall |
| 19 | Recovery time after a firewall failover. The plan's acceptance target: the streams towards the firewall MAC recover within 15 s (plan 12.3 item 4). EMU learns a new gateway MAC at once from an ARP request, gratuitous requests included; an ARP reply sent to the broadcast address is dropped (counter pktRxErrNoBroadcast); otherwise the client's next periodic query is needed, every 60 s by default (trex-emu src/emu/plugins/arp/arp.go). How ClusterXL announces the new active member therefore decides whether 15 s are reached; a shorter ARP timer for the tracked VLANs ('arp': {'timer': 10}) or a forced query (emu_arp_cmd_query ... --garp off) shortens the gap, a virtual MAC removes it |
First planned failover, with the firewall team: emu_show_client_info ... --json (dgw.rmac) of the zone client at K-BL (-p 0 --vlan 3110 4003 --mac 02:54:52:06:0f:a3) and emu_arp_show_counters for its namespace before and after; the loss gap of the firewall-class streams in Grafana; the firewall team explains how the cluster announced the change |
LVR firewall / platform administrator |
| 20 | --unbind-unused-ports for the two-port ASTF configuration. trex-lab-astf uses only p4 and p6 of NIC2. If another port of the same X710 is still bound to the Linux i40e driver, TRex stops with an error; with --unbind-unused-ports it unbinds that port instead (src/main_dpdk.cpp help text "i40e only", scripts/dpdk_setup_ports.py) |
Bench, after a reboot: start trex-lab-astf first (log, dpdk_setup_ports.py -s for the drivers of p5 and p7), stop it, then start trex-lab and check that all four lab ports come up |
Secured Networks / bench |
D.3 Changes from plan v0.9 to v0.91¶
Plan v0.91 (13 October 2026) adopted all of the following points of the draft v0.9 (12 October 2026); the list is kept for traceability. Each item names what v0.9 said, what v0.91 and this course say, and where the topic is covered.
-
Latency capacity of
trex-mon- Plan v0.9: up to 1023 latency streams; every monitoring stream a latency stream; budget 600 streams, about 31 kpps / 35 Mbit/s; pg_ids 1-899.
- Plan v0.91 and this course: at most 128 latency streams per instance (
src/trex_defs.h), in addition to the flow-stat streams (1023 with--software); default profile 74 latency + 102 loss-only streams (176 streams, about 20.6 kpps / 22 Mbit/s); budgets 120 / 600; pg_ids latency 1-127, loss-only 1000-1999, lab 2000+. - Covered in: Ch. 5, Ch. 16, B.8.
-
Firewall zone
- Plan v0.9: direct firewall link through the TX switches decided; "a TX switch or fibre failure only affects measurements"; its options A/B meant "stretched zone / two zones".
- Plan v0.91 and this course: the ClusterXL risk of a monitored, non-redundant firewall interface is described; option B (existing transfer VSI 4003) is added, recommended and used as the default, option A (new firewall ports on the TX switches) is the alternative; the decision is reopened.
- Covered in: Ch. 15, B.6, D.1.
-
VLAN 1314/1315
- Plan v0.9: "not mapped to any access port", described as "Performance-Test VLAN 1314/1315".
- Plan v0.91 and this course: also mapped to the DC firewall on BAGG31 "Vlan-all" on both Border Leafs; VLAN names
t3_1314_webserv_win/t3_1315_winserv("Performance-Test" is the description of Vsi-interface914/915); their reservation for tests is to be confirmed. - Covered in: Ch. 10, Ch. 24, D.2.
-
Fibre offset and TX-to-TX optics
- Plan v0.9: "every RZC stream includes the TX-to-TX fibre once"; 10G LR/ER or 40G/100G LR4.
- Plan v0.91 and this course: RZK->RZC once, RZC->RZK once, RZC->RZC twice (intra-RZC minus intra-RZK = 2 x one-way fibre delay); the DCI's 40G ER4 optics suggest more than 10 km, so the TX-to-TX optics follow the measured distance.
- Covered in: Ch. 14, Ch. 16, D.1.
-
Flooding from lab ports
- Plan v0.9: not addressed.
- Plan v0.91 and this course: unknown-unicast flooding of lab traffic into
trex-monand the production VSI; mitigations: pre-learning, static MAC entries on the lab ports, rate ramps, test VLANs (this course also discusses unknown-unicast suppression, to be validated on the bench). - Covered in: Ch. 24, B.3.
-
API and console names
- Plan v0.9:
EMU_MASKin the Python sketch;stats --lsin the self-test, the tests and the acceptance criteria. - Plan v0.91 and this course: no
EMU_MASK- the masks areNO_TCP_UDP_MASK,BGP_MASK,DHCP_MASK,TRANSPORT_MASK,MDNS_MASKandALL_MASK, andservice --emusets DHCP + MDNS + NO_TCP_UDP + TRANSPORT (trex/common/trex_client.py);stats -sandstats -linstead ofstats --ls. - Covered in: Ch. 5, Ch. 6, A.3.
- Plan v0.9:
-
Reachability of the zone
- Plan v0.9: a new subnet becomes reachable once the firewall advertises it.
- Plan v0.91 and this course: VPN-CORE already has a default route 0.0.0.0/0 (O_ASE1) via 10.9.0.22, so the zone is reachable without switch changes; an explicit OSPF advertisement by the firewall is still recommended.
- Covered in: Ch. 10, Ch. 15.
-
Thread comment in
trex_mon.yaml- Plan v0.9: "threads 0-5 and 16-27 remain for the OS".
- Plan v0.91 and this course: threads 4 and 5 are the
trex-monmaster and latency threads; the OS, InfluxDB and Grafana use threads 0-3 and 16-19 (physical cores 0-3);isolcpus=4-15,20-31keeps the TRex threads and their hyper-thread siblings free. - Covered in: Ch. 17, B.1.
-
DCI crossings of inter-DC L2 streams
- Plan v0.9: "intra-DC + 2 x DCI + fibre".
- Plan v0.91 and this course: one DCI crossing per direction; each direction is its own stream.
- Covered in: Ch. 14.
-
Latency statistics
- Plan v0.9: the exporter stores
total_max(aslat_max_us) and the polledlast_max;averageused as the interval average. - Plan v0.91 and this course:
last_maxcovers only the last 0.5 s window andaverageis low-pass filtered;lat_max_usis the interval maximum derived from histogram differences,lat_last_max_uskeepslast_maxfor reference only (TRex STL Python API reference,get_pgid_stats). - Covered in: Ch. 5, Ch. 18, B.10.
- Plan v0.9: the exporter stores
-
Port numbers on the lab console
-
ASTF client and server ports
- Plan v0.9:
trex-lab-astfstarts withtrex_lab.yaml(p4-p7); p4 is the client side and p6 the server side. - Plan v0.91 and this course: ASTF roles are fixed - even TRex ports client side, odd ports server side - so with p4-p7 p6 would be port 2, a client port;
trex-lab-astfuses its owntrex_lab_astf.yamlwith the interface list [p4, p6] (port 0 client, port 1 server) and starts with--unbind-unused-ports(TRex ASTF guide; batch options--astf-server-only,--astf-client-mask). - Covered in: Ch. 7, Ch. 22, B.1, B.2.
- Plan v0.9:
-
Lab client addresses
- Plan v0.9: lab examples with 10.3.14.151 and 10.3.14.160; reservation and DHCP exclusion only for the monitoring pools (.101-.116).
- Plan v0.91 and this course: lab clients use .151-.166 of every VLAN used for lab tests (lab IP = .151 + AP index - 1 of the pinned AP, i.e. index + 50 relative to the monitoring pool); each such VLAN needs a second IPAM reservation and DHCP exclusion. v0.91 also derived a per-AP lab MAC from the same formula; since v0.92 a lab client uses the fixed MAC of its lab port instead (see D.5).
- Covered in: Ch. 22, Ch. 24, D.2.
-
Port selection of
start- Plan v0.9: the lab self-test with "NIC2 p6-p7 looped" runs
start -f stl/imix.py -m 100%without a port list. - Plan v0.91 and this course: the v3.08 console
starthas no-aoption and without-p/--portuses all acquired ports - in this self-test also p4 and p5 - so the port is named explicitly (--port 2= p6 on the lab console;start_line()intrex/stl/trex_stl_client.py). - Covered in: Ch. 4, Ch. 17, A.3.
- Plan v0.9: the lab self-test with "NIC2 p6-p7 looped" runs
-
IPv4 ID of statistics streams
- Plan v0.9: "every stream carries a TRex packet group id (pg_id) in the IPv4 identification field (TRex reserves 0xff00-0xffff)".
- Plan v0.91 and this course: the documentation states 0xff00-0xffff, the v3.x source reserves from
IP_ID_RESERVE_BASE= 0xFC00: a flow-stat stream carries 0xFC00 + an internal hw_id (not the pg_id), every latency stream 0xFFFF (src/stx/stl/trex_stl_fs.cpp). The plan's glossary entry still differs - see D.4 item 2. - Covered in: Ch. 5, A.1.
-
TOS byte on the wire
- Plan v0.9: the DSCP test inspects the TOS byte at the receiving end to detect re-marking.
- Plan v0.91 and this course: TRex sets bit 0 of the TOS byte of every statistics stream (
TOS_GO_TO_CPUinsrc/bp_sim.h): 0xB8 (EF) leaves as 0xB9, the DSCP is unchanged and the ECN field reads 01; received values are compared with this, not with the configured byte. - Covered in: Ch. 5, Ch. 14.
-
UDP checksum of latency streams
- Plan v0.9: latency streams built with the default (computed) UDP checksum.
- Plan v0.91 and this course: latency streams are built with UDP checksum 0, because the TX core writes the signature into every packet without recalculating the checksum; devices that verify UDP checksums (firewalls) would otherwise drop them.
- Covered in: Ch. 5, Ch. 21, B.8.
-
Gateway ARP through VXLAN tunnels
- Plan v0.9: the clients at all APs resolve 10.3.14.1 on sw-rzk-BL.
- Plan v0.91 and this course: with a centralised EVPN gateway HPE requires ARP flood suppression on the VTEPs (EVPN Configuration Guide R630x, PDF p. 28); LVR has none, so the resolution from a Leaf AP is a commissioning check in rollout phase 3, with
arp suppression enableon the Leaf VSIs or L3 classes from the BL APs as fallbacks. - Covered in: Ch. 6, Ch. 21, D.2.
-
Host firewall
- Plan v0.9: firewalld with a management zone protects the server.
- Plan v0.91 and this course:
trex-cfgstops firewalld at every TRex start (scripts/trex-cfg); together with the unauthenticated TRex control ports this makes host protection an explicit part of the design: nftables allow-list instead of firewalld, plus management-network ACLs (details open). - Covered in: Ch. 17, Ch. 20, B.2, D.1.
-
services_coreoftrex-mon -
Firewall failover and the stream MACs
- Plan v0.9: a firewall cluster failover is visible as a latency step, with no loss beyond the failover window.
- Plan v0.91 and this course: the clusters answered with member MACs in February 2025; streams with a firewall destination MAC (L3-DCFW, the zone side of L3-ENTFW and DSCP) lose packets until they are rebuilt with the newly resolved MAC by the gateway-MAC tracker of
trexctl(eventgateway_mac_changed), unless a ClusterXL virtual MAC is used. How fast the rebuild can happen is still open (D.4 item 1). - Covered in: Ch. 15, Ch. 23, B.6, D.1.
-
Address of the zone client
- Plan v0.9: the zone client is 10.9.90.101.
- Plan v0.91 and this course: the zone clients follow the client formula (IP = pool start + AP index - 1): with option B, the default, 10.9.90.106 at K-BL (index 6) and 10.9.90.113 at C-BL (index 13); with option A 10.9.90.114 (AP FW, index 14).
- Covered in: Ch. 14, Ch. 15.
-
Syslog host on the TX switches
-
BE reference in the DSCP group
- Plan v0.9: DSCP copies with EF, AF41 and CS1 (12 streams), while the DSCP test compares EF/AF41/CS1/BE side by side.
- Plan v0.91 and this course: the DSCP groups include a BE (0x00) copy of the same pair, size and rate: 16 DSCP latency streams instead of 12, 74 latency streams in total instead of 70.
- Covered in: Ch. 14, Ch. 16, B.8.
-
--no-ht- Plan v0.9: Hyper-Threading enabled;
--no-htnot discussed. - Plan v0.91 and this course: Hyper-Threading stays enabled; the thread layout is written explicitly into the configuration files and
isolcpuskeeps the siblings of the TRex threads free.--no-htis an option ofdpdk_setup_ports.pythat only affects the configuration files it generates, not at-rex-64flag (TRex manual, Table 12). - Covered in: Ch. 17, A.2.
- Plan v0.9: Hyper-Threading enabled;
-
Queue mode of
trex-mon- Plan v0.9:
c: 2withdual_ifthreads [6, 7] and [8, 9]. - Plan v0.91 and this course:
c: 1with threads [6] and [8]: in stateless software modec: 1selectsONE_QUE(accurate latency),c: 2selectsMULTI_QUE, where "latency won't be accurate" (src/trex_modes.h,choose_mode()); the start-up log line "set dpdk queues mode to ONE_QUE" is an acceptance criterion. - Covered in: Ch. 3, Ch. 17, B.1.
- Plan v0.9:
-
Address of the lab zone client
- Plan v0.9: the ASTF server side and the firewall route for 10.9.93.0/24 use 10.9.90.151.
- Plan v0.91 and this course: the lab zone client follows the lab IP formula (.151 + AP index - 1): on p6, pinned to
FWZ(K-BL, index 6), it is 10.9.90.156; with option A (AP FW, index 14) 10.9.90.164. v0.91 also gave it a per-AP lab MAC (02:54:52:38:0f:a3; option A02:54:52:40:05:8c); v0.92 replaced these with p6's fixed port MAC02:54:52:f0:00:06in both options (see D.5). - Covered in: Ch. 7, Ch. 22, B.1.
-
The bundled NDR tool
- Plan v0.9: not addressed.
- Plan v0.91 and this course: never run the bundled
./ndrtool ontrex-rzk-01: it connects to the default RPC port 4501 (=trex-mon) and resets all ports (trex/examples/stl/stl_ndr_bench_tool.py); no-drop-rate searches use own scripts ortrexctlon port 4601. - Covered in: Ch. 22, Ch. 24.
-
Packet counters in the exporter
Further details of the reference configuration in Appendix B:
| Topic | Plan v0.9 | Plan v0.91 | This course (Appendix B) |
|---|---|---|---|
stp edged-port on AP ports |
configured on every AP port | resolved: still in the AP port blocks, but explained as optional (not used on the existing server ports) | optional; no effect on the examined switches, where spanning tree is globally disabled |
| Downsampling task | aggregates lat_max_us (then the lifetime total_max) and lat_last_max_us with max; no named results |
lat_max_us is now the interval maximum; lat_last_max_us is also kept; the per-interval hist_* counts are not downsampled; still no named results - an open point, see D.4 item 6 |
aggregates only the interval maximum lat_max_us with max (the 1-minute maximum already covers every packet); sums drop_pkts and hist_*, so the long-term bucket keeps the latency distribution; one named yield() per pipeline |
| InfluxDB repository | key fetched by URL | unchanged - a minor difference that remains | official procedure with a check of the key fingerprint (InfluxDB documentation, "Install InfluxDB") |
dpdk_setup_ports.py -i |
after -i the X710 ports show vfio-pci |
resolved: -i only generates the configuration file; the ports are bound at every TRex start or with dpdk_setup_ports.py --cfg <file> |
same |
| BIOS workload profile | "Low Latency (or Custom with the settings below)" | resolved: Custom profile, because the predefined "Low Latency" profile disables VT-d and VT-x | same; the predefined profile also disables SR-IOV and Turbo Boost (UEFI System Utilities User Guide for HPE Compute Gen11 servers, Table 1, PDF p. 65) |
| Grafana version | "12.4.x LTS" | resolved: 12.4.x or 13.x; Grafana has no official LTS label | same |
D.4 Open points raised against plan v0.91¶
The following points were raised against plan v0.91: a target that cannot be guaranteed as written, places where the text does not yet match the design that the plan describes elsewhere or the device data, and small technical details. Item 4 was resolved in plan v0.92 (D.5); the others remain open in v0.92, and this course already teaches the form described under This course. Item 1 matters most - it affects the acceptance test.
-
Recovery within 15 s after a firewall failover
- Plan v0.91: acceptance criterion 12.3 item 4 - the streams towards the firewall MAC are rebuilt automatically (event
gateway_mac_changed) "and recover within 15 s of the failover (or immediately if a virtual MAC is used)". The gateway-MAC tracker (9.5 step 6) pollsdgw.rmacevery 10 s, forces a re-resolution every 60 s and gives the detection time as "worst case ~10 s + rebuild". - This course: the 15 s are a target to be confirmed in the first planned failover confirm on device. EMU learns a new gateway MAC at once from an ARP request, gratuitous requests included; an ARP reply sent to the broadcast address is dropped; otherwise the client's next periodic query is needed, every 60 s by default - and the tracker's re-resolution every 60 s does not bring this below 15 s either. A shorter ARP timer for the clients of the tracked VLANs (
'arp': {'timer': 10}, one ARP request per client every 10 s) and/or a forced query when firewall-class streams lose packets (EMUClient.arp.cmd_query(c_key, garp=False), consoleemu_arp_cmd_query ... --garp off) close the gap; a ClusterXL virtual MAC removes it. - Why: trex-emu
src/emu/plugins/arp/arp.go(HandleRxArpPacket(),onTimerUpdate(),NewArpClient()) andemu_plugin_arp.py(client default{'arp': {'timer': 60, 'timer_disable': False}},cmd_query()). - Covered in: Ch. 6, Ch. 15, Ch. 18, Ch. 23, D.2 item 19.
- Plan v0.91: acceptance criterion 12.3 item 4 - the streams towards the firewall MAC are rebuilt automatically (event
-
Glossary entry for the pg_id
- Plan v0.91: Appendix C, "Flow statistics / pg_id": "TRex per-stream TX/RX counting identified by a packet group id carried in the IPv4 identification field".
- This course: the user-chosen pg_id identifies the statistics of a stream; inside the packets TRex uses an internal hw_id - flow-stat streams carry 0xFC00 + hw_id in the IPv4 ID, latency streams carry 0xFFFF there and the hw_id in their 16-byte signature.
- Why:
src/stx/stl/trex_stl_fs.h,src/stx/stl/trex_stl_fs.cpp; the plan's own section 4.4 describes it the same way. - Covered in: Ch. 5, Appendix C ("hw_id", "IP ID", "pg_id").
-
Open item 6 names VLAN 1420 only
- Plan v0.91: open item 6 asks for the "approval of VLAN 1420 and subnets 10.9.90.0/24 (zone), 10.9.92.0/24 and 10.9.93.0/24 (ASTF) or alternatives".
- This course: the approval covers the zone subnet 10.9.90.0/24 - with the existing VLAN 4003 (option B) or a new VLAN 1420 (option A) - and the ASTF ranges 10.9.92.0/24 and 10.9.93.0/24.
- Why: the plan's default is option B (4.3.5), which needs no new VLAN.
- Covered in: D.1, Ch. 15.
-
TX switch configuration blocks still configure option A - resolved in plan v0.92
- Plan v0.91: the configuration blocks of sections 7.1.2-7.2 configure option A without marking it:
vlan 3300; sw-rzk-TX1XGE1/1/7and sw-rzc-TX1XGE1/1/8as "FW-ZONE" access ports with PVID 3300;3300in the permit lists of the monitoring trunks and of the TX-to-TX trunk; lab port p6 (XGE1/1/11) "pinned [FW-ZONE]" with PVID 3300. Its port tables (6.1, 6.2), the inventory (9.3) andtrex_lab_astf.yaml(8.5) use option B. - Plan v0.92 and this course: the TX switch configurations show option B as the default and pre-provision option A: VLAN 3300 is defined on both switches,
XGE1/1/7(rzk) andXGE1/1/8(rzc) are configured as the option-A firewall ports (PVID 3300, QinQ) andshutdown, the monitoring trunks permit3101 to 3110 3201 to 3210 3300and the TX-to-TX trunk3201 to 3210 3300(harmless with option B, required with option A), and p6 isport access vlan 3110with the descriptionTRX p6 trex-lab pinned [FW-ZONE via K-BL, VLAN 4003]- followed by a marked block of what option A adds (cabling,undo shutdown, re-pin of p6). - Why: a switch built from the unmarked v0.91 blocks put p6 into S-VLAN 3300, which contains no firewall port with option B: the default ASTF run and the zone load test would have found no server side (10.9.90.1 not resolved, no established flows).
- Covered in: Ch. 12, B.3, B.4.
- Plan v0.91: the configuration blocks of sections 7.1.2-7.2 configure option A without marking it:
-
Kinds of
trex_event- Plan v0.91: the data model (9.7) lists the kinds "annotation, apply, stop, test", although the tracker (9.5 step 6) writes
gateway_mac_changedevents and the alert rule "Gateway MAC changed" (10.5) filters on that kind. - This course:
trex_eventkind = annotation, apply, stop, test or gateway_mac_changed. - Why: the data model must contain every value that the alert rules use.
- Covered in: Ch. 8, Ch. 18, Ch. 19.
- Plan v0.91: the data model (9.7) lists the kinds "annotation, apply, stop, test", although the tracker (9.5 step 6) writes
-
Downsampling task without named results
- Plan v0.91: the Flux task of 10.2 contains three
from() ... |> to(bucket: "trex_longterm")pipelines; none ends withyield(). - This course: each pipeline ends with its own named result (
yield(name: "mean"),yield(name: "max"),yield(name: "sum")); afterinflux task create,influx task run listandinflux task log listshow whether the runs succeed. - Why: Flux documentation,
yield(): a script with several results must name each of them, and the names must be unique. - Covered in: Ch. 8, B.10.
- Plan v0.91: the Flux task of 10.2 contains three
-
Values of the
classtag- Plan v0.91: the profile schema (9.4) gives every group
class: L2orclass: L3(the forwarding type) and turns the class name into an InfluxDB tag, while the dashboards, alert rules and procedures (10.4, 10.5, 11.x) filter on L2, L3-BL, L3-DCFW, L3-ENTFW and DSCP. - This course:
class:carries the tag value (L2, L3-BL, L3-DCFW, L3-ENTFW, DSCP), and the DSCP groups addpath: L2|L3-ENTFWfor the forwarding type; Chapter 18 notes that the plan's sketch derives the same tag from the group. Thedc_pairvaluex-fw, which with option A followed from the AP FW ("dc: both"), is defined explicitly: streams to or from the firewall zone (VLAN 4003); with option B their APs alone would give rzk-rzk or rzc-rzc. - Why: with the schema as written, the tag could only take the values L2 and L3.
- Covered in: Ch. 16, Ch. 18, B.8.
- Plan v0.91: the profile schema (9.4) gives every group
-
Spanning tree on the fabric switches
- Plan v0.91: section 3.2 "PVST is enabled; STP is disabled for most server VLANs"; 7.3.1 "
stp edged-port... makes the port forward immediately in the PVST-enabled VLANs ... omit it and accept a 30 s forwarding delay after link-up". - This course: spanning tree is globally disabled on all four examined switches; their
stp mode pvstandundo stp vlan ... enablelines are configured but inactive. A new AP forwards immediately in every VLAN,stp edged-porthas no effect there, and these switches send no BPDUs of their own. For the Leafs without diag files,display stp briefbefore the rollout shows whether they behave the same confirm on device. - Why:
display stpanddisplay stp briefin the diag files of 17/18 February 2025 report "Protocol status: Disabled" onsw-rzk-BL,sw-rzc-BL,sw-rzk-L11andSW-RZC-L21; the configurations contain nostp global enable. - Covered in: Ch. 10, Ch. 12, Ch. 13.
- Plan v0.91: section 3.2 "PVST is enabled; STP is disabled for most server VLANs"; 7.3.1 "
-
ICMPv6 in the nftables ruleset (optional)
- Plan v0.91: the ruleset of 8.3 accepts ICMP for IPv4 only (
ip protocol icmp accept). - This course: if the management network uses IPv6, accept ICMPv6 as well (
meta l4proto ipv6-icmp accept, ormeta l4proto { icmp, ipv6-icmp } acceptfor both); if IPv6 is not used there, a comment saying so is enough. - Why: IPv6 neighbour discovery uses ICMPv6, which the input policy
dropwould otherwise discard. - Covered in: Ch. 17, B.2.
- Plan v0.91: the ruleset of 8.3 accepts ICMP for IPv4 only (
D.5 Changes from plan v0.91 to v0.92 (14 October 2026)¶
Plan v0.92 (14 October 2026) is a consolidation of v0.91 after a full read-through; no section numbers changed. This course teaches v0.92: every configuration, address, pin and procedure in the chapters and in Appendices A-C follows it. The four items below are the plan's own change list (its Appendix D, rows 15-18) in the words of this course; the items of D.3 and the open points of D.4 (except item 4) are unaffected.
-
Firewall-zone option B carried through the TX-switch configuration and the lab pins
- Plan v0.91: the TX-switch configuration blocks still built option A unmarked (D.4 item 4); the lab pin default for p5 was K-BL, so p5 and p6 shared S-VLAN 3110.
- Plan v0.92 and this course: option B is the default everywhere, and option A is pre-provisioned: VLAN 3300 (
name TRX-AP-FW-ZONE-stretched) exists on both TX switches; sw-rzk-TX1XGE1/1/7and sw-rzc-TX1XGE1/1/8are configured as the option-A firewall ports (access, PVID 3300,qinq enable) andshutdown; the monitoring trunks permit3101 to 3110 3201 to 3210 3300, the TX-to-TX trunk3201 to 3210 3300- harmless with option B (no active member port), required with option A, which therefore needs only the firewall cabling andundo shutdown. Lab pin defaults: p4 K-L11 (3101), p5 K-L41 (3105), p6FWZ= K-BL (3110, VLAN 4003; option A 3300), p7 C-L21 (3204); p5 no longer duplicates p6. The inventory aliasFWZ, the profile pairs ofl3-entfwanddscp-entfw, the bill of materials and the optics counts follow option B. - Covered in: Ch. 11, Ch. 12, Ch. 15, Ch. 22, B.3, B.4, B.7.
-
Fixed lab-port MACs
- Plan v0.91: lab clients used the per-AP MAC formula with index + 50 (
02:54:52:33:05:22for the K-L11 lab client in VLAN 1314,02:54:52:38:0f:a3for the zone lab client at K-BL, and so on), so a lab port's MAC changed with every re-pin and with the VLAN. - Plan v0.92 and this course: every lab port has one fixed MAC - p4
02:54:52:f0:00:04, p502:54:52:f0:00:05, p602:54:52:f0:00:06, p702:54:52:f0:00:07- set assrc_macin theport_infooftrex_lab.yaml(four ports) andtrex_lab_astf.yaml(p4, p6) and recorded asmac:in the inventoryports.lab. Only the lab IP follows the pinned AP (lab pool start .151 + AP index - 1). Reason: TRex answers ARP for a lab port and runs ASTF with the port MAC, and pins change; the fixed MAC keeps the static MAC entries on the TX switch (one per lab port in the S-VLAN of its pin) and the firewall objects stable. The monitoring clients (EMU) keep the per-AP formula. - Covered in: Ch. 4, Ch. 7, Ch. 13, Ch. 24, A.1, B.1, B.3.
- Plan v0.91: lab clients used the per-AP MAC formula with index + 50 (
-
Inventory coverage, pin defaults, state files, apply and supervisor
- Plan v0.91: Leaf APs carried only 1314 and 1315 in the inventory;
ports.mon.0was the default for[rzk, fw];pgid-map.jsonlived in/etc/trexctl/; what happens to the running streams at the end oftrexctl applyand after atrex-monrestart was not specified. - Plan v0.92 and this course: every Leaf and Border Leaf AP carries all VLANs under test (
vlans_under_test: &utv [1314, 1315, <PROD-VLAN-A>, <PROD-VLAN-B>], Leaf APsvlans: *utv, K-BL and C-BL the same list plus 4003), as the loss-only coverage groups and L3-DCFW need them at every AP;ports.mon.0 default_for: [rzk],ports.mon.1 default_for: [rzc]; lab pin defaults as in item 1;pgid-map.jsonlives in/data/trexctl/state/withapplied-<profile>.jsonand the exporter state (nightly backup, copy into the configuration repository when it changes);trexctl applyends withdisconnect(stop_traffic=False, release_ports=True), so the streams keep running without an owner and a later apply re-acquires the ports withforce=True; the exporter's supervisor thread detects atrex-monrestart (uptime reset, oractive_streamsat zero while a profile is recorded as active) and re-applies the active profile and restarts the gateway-MAC tracker. The validator also checks that the lab-port MACs are unique and equal to thesrc_macentries of the TRex configuration files. - Covered in: Ch. 16, Ch. 18, Ch. 20, Appendix C ("Supervisor thread"), B.2, B.7.
- Plan v0.91: Leaf APs carried only 1314 and 1315 in the inventory;
-
Cross-references and wording
- Plan v0.91: "two" TRex configuration files and systemd units in places; inconsistent cross-references to the
using tengigebreakout variant and to the stateful test variants ("ASTF option A/B"); the DCI crossings of L3-BL streams were not stated; the second IPAM range per VLAN (lab pool) was missing from 2.3 and 11.11. - Plan v0.92 and this course: three TRex configuration files (
trex_mon.yaml,trex_lab.yaml,trex_lab_astf.yaml) and three systemd units; the breakout variant is section 7.1.6; the stateful tests are "ASTF variant 1" (port addresses only) and "variant 2" (routed ranges); an L3-BL stream between two RZC APs crosses the DCI twice, between an RZC and an RZK AP once (the only 1314/1315 gateway is on sw-rzk-BL); every VLAN used for lab tests needs two 16-address IPAM ranges (monitoring .101-.116, lab .151-.166). The plan's effort estimate fortrexctlrose to 12-14 days because of the gateway-MAC tracker. - Covered in: Ch. 14, Ch. 17, Ch. 22, A.1, B.1, B.2.
- Plan v0.91: "two" TRex configuration files and systemd units in places; inconsistent cross-references to the