Appendix E - Sources and further reading¶
This appendix lists every source the course is based on, with the exact location of the information used: the official TRex documentation and the trex-core and trex-emu source files, the HPE FlexFabric 5950 Release 630x documentation with the PDF pages that were checked, the LVR documents (diagnostic files, topology, switch analysis, the platform plan v0.92, reference design), the InfluxDB and Grafana documentation, the relevant standards and the HPE server documentation. PDF page numbers are the page numbers of the PDF file (not the printed page numbers); web sources were checked in October 2026.
E.1 TRex documentation¶
| Document | URL | Sections used |
|---|---|---|
| TRex manual | https://trex-tgn.cisco.com/trex/doc/trex_manual.html | 2.1 "Hardware recommendations" (Table 6 "SFP+ support": X710 only with Intel SFP+); 3.2 "Script for creating config file" (Table 12, dpdk_setup_ports.py -c, --no-ht, --prefix); 6.2 "Platform YAML (--cfg argument)" with 6.2.1 "Basic Configuration" and 6.2.3 "Platform section configuration"; 6.3 "Command line options"; 4.11 "Clients/Servers IP allocation scheme" (example ranges 16.0.0.0 / 48.0.0.0, dual_port_mask) |
| TRex stateless support guide | https://trex-tgn.cisco.com/trex/doc/trex_stateless.html | 2.3 "RPC Architecture" (port ownership, read-only clients); 2.8 "Port service mode" (service, filtered modes); 2.9 "Packet capturing" (BPF filtering, capture monitor and record); 2.11.20 "Tutorial: Per stream statistics" (limitations, Table 14 "Maximum concurrent streams for collecting flow statistics", reserved IPv4 ID range); 2.11.21 "Tutorial: flow_stats object structure"; 2.11.22 "Tutorial: Per stream latency/jitter/packet errors" (limitations: 128 latency streams, 16-byte signature, the multiplier does not apply - to change the rate the stream is re-created, 5 Mpps); 2.12 "Dynamic multiple profiles" (<port>.<profile id>, pg_id unique across profiles); 2.7.2 "Tutorial: Load TRex server, Simple IPv4 UDP" (example addresses 16.0.0.1 / 48.0.0.1 and the DUT static routes) |
| TRex advanced stateful (ASTF) guide | https://trex-tgn.cisco.com/trex/doc/trex_astf.html | "Running TRex with this profile interactive" (t-rex-64 -i --astf, start, tui, ASTF counters); 2.7 "Client clustering configuration", 2.7.2 "Interactive mode" (topology with topo load, topo show, topo resolve) and 2.7.3 "TRex emulation client clustering"; profile examples with ASTFIPGenDist (clients 16.0.0.0-16.0.0.255, servers 48.0.0.0-48.0.255.255) |
| TRex EMU guide | https://trex-tgn.cisco.com/trex/doc/trex_emu.html | "Start TRex as a server" (--emu); "Start the Console with EMU support" (console commands); "Load profile" (emu_load_profile -t last, emu_show_all, promiscuous and multicast); client and namespace plugin vectors |
| TRex stateless Python API | https://trex-tgn.cisco.com/trex/doc/cp_stl_docs/index.html, client: https://trex-tgn.cisco.com/trex/doc/cp_stl_docs/api/client_code.html | reset, acquire, set_service_mode, add_streams, start, stop, update, wait_on_traffic, get_stats, clear_stats, get_active_pgids, get_pgid_stats (dictionary keys, low-pass average, last_max 0.5 s window, histogram, error counters), set_l3_mode, set_vlan, start_capture |
| TRex EMU Python API | https://trex-tgn.cisco.com/trex/doc/cp_emu_docs/index.html | EMUClient, EMUNamespaceKey, EMUNamespaceObj, EMUClientObj, EMUProfile (further reading) |
| TRex ASTF Python API | https://trex-tgn.cisco.com/trex/doc/cp_astf_docs/index.html | ASTF profile classes (further reading) |
| TRex release notes | https://trex-tgn.cisco.com/trex/doc/release_notes.html | Release 3.08 "Python 3.12 support (client side), older python might not work"; 3.07 DPDK 25.07, E810 hardware mode (not in regression); 3.06 net_bonding fix, libarchive |
| TRex v3.08 package | https://trex-tgn.cisco.com/trex/release/v3.08.tar.gz | release installed on trex-rzk-01 |
E.2 trex-core and trex-emu source files¶
Repositories: https://github.com/cisco-system-traffic-generator/trex-core and
https://github.com/cisco-system-traffic-generator/trex-emu, branch master, read in October 2026. Paths of the
Python client files are relative to scripts/automation/trex_control_plane/interactive/trex/.
| File | What was verified |
|---|---|
src/trex_defs.h |
MAX_FLOW_STATS 1023, MAX_FLOW_STATS_X710 127, MAX_FLOW_STATS_XL710 255, MAX_FLOW_STATS_PAYLOAD 128 |
src/trex_modes.h, src/trex_modes.cpp |
queue modes ONE_QUE (one data-plane thread per port pair: the RX core reads the receive queue itself), MULTI_QUE ("latency won't be accurate in this mode -- both latency Tx and Rx are indirect"), DROP_QUE_FILTER (hardware filter steers latency packets to the RX core); choose_mode() with the driver capabilities: stateless with --software (force_software_mode() in src/main_dpdk.cpp) gives ONE_QUE for c = 1 and MULTI_QUE for c >= 2, hardware mode on X710 DROP_QUE_FILTER; start-up log line "set dpdk queues mode to ..." |
src/stx/stl/trex_stl_fs.h |
reserved IPv4 ID range: IP_ID_RESERVE_BASE (0xffff - MAX_FLOW_STATS) = 0xFC00 |
src/stx/stl/trex_stl_fs.cpp |
flow-stat streams: IPv4 ID = reserve base + internal hw_id; latency streams: IPv4 ID FLOW_STAT_PAYLOAD_IP_ID = 0xFFFF and the payload signature; set_tos_to_cpu() called for flow-stat and latency streams |
src/bp_sim.h |
TOS_GO_TO_CPU 0x1: bit 0 of the TOS byte (IPv6 traffic class) set on statistics packets |
src/stx/common/trex_rx_core.cpp |
RX core "hot" state with busy polling while latency (or capture) is active: should_be_hot(), hot_state_loop() |
src/main_dpdk.cpp |
server option table: -i, --cfg, -c, --iom, --software, --emu, --astf, --no-hw-flow-stat, --prefix, --no-scapy-server, --unbind-unused-ports; help texts "Disable Scapy server implicit start at stateless" and "Automatically unbind all unused bound ports in same NIC instead of exiting with error (i40e only)" |
scripts/t-rex-64 |
wrapper: must run as root, calls ./trex-cfg at every call (also with --help), then _t-rex-64; cleanup of helper servers at exit (trap cleanup EXIT runs dpdk_setup_ports.py --cleanup-servers) |
scripts/trex-cfg |
calls dpdk_setup_ports.py --parent; runs systemctl stop firewalld.service on Red Hat-family systems |
scripts/dpdk_setup_ports.py |
options -s, -t, -m, -i, -c, -o, --no-ht, --prefix, --zmq-pub-port, --zmq-rpc-port, -l, --cfg; -i only generates a configuration file; config_hugepages(); driver binding order in do_run() (pre-built igb_uio, vfio-pci only with iommu=, uio_pci_generic, compiled igb_uio); with --unbind-unused-ports, unused ports of the same i40e NIC that are still bound to the Linux driver are unbound instead of ending the start with an error; helper services and get_core_for_services(); should_scapy_server_run() (the Scapy server runs for interactive starts unless --no-scapy-server, for ASTF only with --scapy-server); run_servers() (general_daemon_server restart -n Scapy: one named daemon per host); cleanup_servers() (stops the Scapy server at exit only if should_scapy_server_run()) |
scripts/general_daemon_server |
default ports Scapy 4507, PyBird 4509, Emu 4510; taskset -c <core>; "Advised to set on free core or TRex master thread core" |
scripts/stl/udp_1pkt_simple.py, flow_stats.py, flow_stats_latency.py, imix.py; scripts/astf/http_simple.py; scripts/emu/simple_ipv4.py |
example profiles shipped with TRex |
utils/parsing_opts.py |
console options: stats (-g, -p, --ps, -s, -l, --lh, -c, -m, -x, --xz; ASTF -a), start/update/pause/resume arguments (start has no -a; -t takes the rest of the line, argparse.REMAINDER), multiplier and duration formats, service flags (--bgp, --dhcp, --tran, --mdns, --emu, --no-tcp-udp, --all), capture and BPF arguments, EMU arguments (-p, --vlan, --tpid, --mac, --json) |
common/trex_client.py |
masks NO_MASK 0, NO_TCP_UDP_MASK 1, BGP_MASK 2, DHCP_MASK 4, TRANSPORT_MASK 8, MDNS_MASK 16, ALL_MASK 255; _get_service_params() (mask of service --emu); set_service_mode_base(); disconnect(stop_traffic=True, release_ports=True); portattr; clear (local statistics cache) |
stl/trex_stl_client.py |
console commands start (start_line(): default ports = all acquired ports), stop, pause, resume, update, stats, service, streams, profiles, reset, acquire; display limits _show_streams_stats() (4 pg_ids, latency first), _show_flow_latency_stats() and _show_flow_latency_histogram() (5 pg_ids); add_profile(), get_active_pgids(), get_pgid_stats() (1024 pg_ids per call), set_service_mode(), clear_stats() |
stl/api.py |
names exported by trex.stl.api (Scapy Ether, IP, TCP, UDP; not Dot1Q, not the service masks) |
stl/trex_stl_streams.py |
STLStream, STLTXCont, STLTXSingleBurst, STLFlowStats, STLFlowLatencyStats |
console/trex_console.py |
console command-line options (-s, -p, --async_port, --emu, --emu-server-port, -r, -a, -f, --batch, -t, -q) |
console/trex_tui.py |
TUI keys; the streams and latency views call _show_streams_stats() / _show_flow_latency_stats() (same display limits as stats -s / stats -l) |
console/trex_capture.py |
capture sub-commands (monitor, record, show, clear) |
astf/trex_astf_client.py |
ASTF console start, stop, update, stats, service, topo |
emu/trex_emu_client.py, emu/trex_emu_profile.py, emu/emu_plugins/emu_plugin_icmp.py |
EMU API (EMUClient(sync_port=4510), load_profile - _start_profile() calls remove_profile() first, so all namespaces and clients are removed - add_ns, add_clients, remove_ns, get_info_clients, EMUNamespaceKey, EMUClientObj) and EMU console commands (show_client_info with dgw) |
emu/emu_plugins/emu_plugin_arp.py |
client defaults INIT_JSON_CLIENT = {'arp': {'timer': 60, 'timer_disable': False}} (the client queries its gateway every 60 s); cmd_query(c_key, garp) (RPC arp_c_cmd_query: an immediate ARP query, or a gratuitous ARP with garp=True) and the console commands emu_arp_cmd_query, emu_arp_show_cache, emu_arp_show_counters |
trex-emu src/emu/core/parser.go |
VLAN tags are parsed in frame order: index 0 = first (outer) tag; at most two tags |
trex-emu src/emu/core/ns_ctx.go |
GetL2Header() writes the tags in key order |
trex-emu src/emu/core/thread_ctx.go |
DEF_TPID = 0x8100, used when a tag is given without TPID |
trex-emu src/emu/plugins/arp/arp.go |
HandleRxArpPacket(): an ARP request (also a gratuitous one) is learned at once (ArpLearn()), an ARP reply sent to the Ethernet broadcast address is dropped (counter pktRxErrNoBroadcast); onTimerUpdate() sends the client's query for its default gateway (SendQuery()) every timerSec seconds, 60 unless set in the client's init JSON (NewArpClient()); defaultCompleteTimer = 10 minutes; RPC handler arp_c_cmd_query |
E.3 HPE FlexFabric 5950 documentation, Release 630x¶
Folder Product Guides/Switches/Comware/5950/. File names begin with "HPE FlexFabric 5950 Switch Series".
| Document (PDF file) | PDF pages used | Topic |
|---|---|---|
| Layer 2—LAN Switching CG Configuration Guide-Release 630x | 37-38 | splitting a 100-GE interface (using tengige), no reboot needed |
| 41 | jumboframe enable, default 9416 bytes |
|
| 220 | a QinQ-enabled port tags all incoming frames with its PVID | |
| 221-222 | QinQ standards (IEEE 802.1Q, 802.1ad), restrictions, qinq enable procedure, qinq transparent-vlan |
|
| 223 | TPID 0x8100 by default | |
| 224 | S-tag 802.1p copied from the C-tag only with qos trust dot1p |
|
| 272 | PVST BPDUs are sent to 01-00-0c-cc-cc-cd and carry a VLAN tag | |
| 294 | stp edged-port |
|
| 306 | undo stp global enable; initial settings vs factory defaults |
|
| 308 | stp bpdu-protection |
|
| 334 | lldp global enable |
|
| Layer 2—LAN Switching Command Reference-Release 630x | 11, 14, 16-17, 24-25, 28 | display mac-address, display mac-address mac-move, mac-address (interface view, static entries), mac-address notification mac-move, mac-address timer |
| 34-35, 38, 41-43, 47-50, 56 | interface range, broadcast-suppression, default, description, display counters, display counters rate, display interface (example of display interface brief on p. 56) |
|
| 73, 76, 96, 98 | multicast-suppression, port link-mode, shutdown, unicast-suppression |
|
| 127-128 | display link-aggregation verbose |
|
| 193, 197, 200 | display vlan, name, vlan |
|
| 202, 204-205, 205-206 | port access vlan, port link-type, port trunk permit vlan |
|
| 277-281 | QinQ commands: display qinq (277), qinq enable (278), qinq ethernet-type (279-280), qinq transparent-vlan (281) |
|
| 292-294 | bpdu-drop any, display stp |
|
| 313, 318, 321 | stp bpdu-protection, stp edged-port, stp global enable |
|
| 355, 377 | display lldp neighbor-information, lldp global enable |
|
| VXLAN Configuration Guide-Release 630x | 13 | access modes of VSIs (VLAN access mode removes and adds the tag) |
| VXLAN Command Reference-Release 630x | 5-6 | arp suppression enable (VSI view; ARP flood suppression, disabled by default) |
| 13, 15, 17, 21 | display l2vpn mac-address, display l2vpn service-instance, display l2vpn vsi, display vxlan tunnel |
|
| 24, 42, 54-55, 59 | encapsulation, service-instance, xconnect vsi (default access mode VLAN), display interface vsi-interface |
|
| EVPN Configuration Guide-Release 630x | 28 | centralised EVPN gateway: ARP or ND flood suppression must be enabled on the VTEPs, because with remote ARP learning disabled the gateway does not answer ARP requests for its MAC that arrive through VXLAN tunnels |
| EVPN Command Reference-Release 630x | 23 | display evpn route mac |
| Layer 3—IP Services Command Reference-Release 630x | 33 | display arp vpn-instance |
| Layer 3—IP Routing Command Reference-Release 630x | 25-26, 84-85, 181 | display ip routing-table ... ip-address mask-length, ip route-static (incl. VPN instance), display ospf peer |
| Fundamentals Command Reference-Release 630x | 179, 189, 244, 272-273, 289-291 | display current-configuration, save, display version, display device, display device manuinfo, display transceiver alarm, display transceiver diagnosis, display transceiver interface |
| Fundamentals Configuration Guide-Release 630x | 105, 209 | configuration file format (# separates sections); document conventions (# lines are comments) |
| Network Management and Monitoring Command Reference-Release 630x | 140, 423, 440 | ntp-service unicast-server, display logbuffer, info-center loghost (syntax info-center loghost [ vpn-instance vpn-instance-name ] { hostname \| ipv4-address } - the keyword vpn-instance stands before the address) |
Further reading in the same folder: HPE5950CMW710R6301P03RN.pdf (release notes of R6301P03, the release of the Border
Leafs and the recommended release for the spare units) and HPE_a00038185en_us_5950_7.10.R6205P03 Consolidated Release
Notes.pdf (release of SW-RZC-L21).
E.4 LVR documents¶
| Document | Content used |
|---|---|
diag_sw-rzk-S1_20250217-164112.txt, diag_sw-rzk-S2_20250217-164139.txt |
spine configuration and state RZK (17 Feb 2025) |
diag_sw-rzk-L11_20250217-164257.txt |
Leaf sw-rzk-L11: access model (Ten-GigabitEthernet1/3/3 "-> ESH-ZV12 Trunk"), management VRF, NTP, STP settings, free port XGE1/3/1 |
diag_sw-rzk-BL_20250217-163816.txt |
Border Leaf RZK: VPN-CORE gateways (Vsi-interface914/915, gateway MAC ec9b-8b67-37b8), transfer VSIs 4000-4004, BAGG10/BAGG31, VPN-CORE static routes and OSPF 1, default route via 10.9.0.22, DCI RAGG1 with 40G ER4 optics, free port XGE1/3/6; ARP table: 10.9.0.22 and 10.9.0.35 resolved to MACs of the RZC firewall members via Tunnel5, dynamic entries learned through the DCI tunnel but none through the RZK Leaf tunnels; display logbuffer with ARP_DUPLICATE_IPADDR_DETECT for 10.9.0.22 |
diag_SW-RZC-S1_20250217-164016.txt, diag_SW-RZC-S2_20250217-164048.txt |
spine configuration and state RZC |
diag_SW-RZC-L21_20250218-075107.txt |
Leaf SW-RZC-L21 (R6205P03), free port XGE1/4/4 with an HPE transceiver inserted; no EVPN MAC entry for the gateway MAC ec9b-8b67-37b8; VSIs present (no VPN-724 and VPN-171, which exist on sw-rzk-L11) |
diag_sw-rzc-BL_20250217-163904.txt |
Border Leaf RZC: transfer Vsi-interfaces only, BAGG10 to CPF-ZV02, sync VLAN 123, free port XGE1/3/14 |
diag_sw-rzd-BL_20250217-163940.txt |
Border Leaf RZD (out of scope; VLAN usage across all configurations) |
Big Picture-Rechenzentren-RZKC.pdf |
topology of RZK/RZC (one A3 page, drawing dated 15.05.2024): Leaf names, loopbacks, management addresses |
LVR-InfoKom - Comware Switch Analysis v1.0.xlsx |
models, releases, recommendations; end of support life 28.02.2026 (JH321A) and 31.10.2026 (JH404A) |
artifacts/trex-plan/LVR_TRex_Monitoring_Platform_Plan_v0.92.html |
plan document v0.92 (14 October 2026), the basis of this course; sections 7, 8, 9.3, 9.4 and 10 are the basis of Appendix B; the changes from v0.91 are listed in Appendix D.5, the points still open in it in Appendix D.4 |
artifacts/trex-plan/LVR_TRex_Monitoring_Platform_Plan_v0.91.html |
plan v0.91 (13 October 2026), superseded by v0.92; the points raised against it are listed in Appendix D.4 |
artifacts/trex-plan/LVR_TRex_Monitoring_Platform_Plan_v0.9.html |
draft v0.9 (12 October 2026), superseded by v0.91 and v0.92; the changes from v0.9 to v0.91 are listed in Appendix D.3 |
man_trex_documentation_v1.3.docx |
MAN Truck & Bus TRex documentation v1.3 (German): reference design with a TRex switch and dot1q tunnels |
simplified trex topology.png |
the customer's target picture |
E.5 InfluxDB and Grafana documentation¶
Versions in scope (October 2026): InfluxDB OSS 2.9.1 (current 2.x release; InfluxDB 3 is a separate product), Grafana
12.4.x or 13.x (latest 12.4.12 and 13.2.3 of 29 September 2026; Grafana has no official LTS label), from the GitHub
release lists of influxdata/influxdb and grafana/grafana.
E.6 Standards¶
| Standard | Title | Relevance |
|---|---|---|
| IEEE 802.1Q-2022 | IEEE Standard for Local and Metropolitan Area Networks - Bridges and Bridged Networks | VLAN tagging and bridging, including the service VLAN (S-VLAN) |
| IEEE 802.1ad-2005 | Virtual Bridged Local Area Networks - Amendment 4: Provider Bridges | origin of the S-VLAN tag (QinQ); cited in the 5950 QinQ chapter (L2CG PDF p. 221) |
| RFC 2544 (March 1999) | Benchmarking Methodology for Network Interconnect Devices | throughput test (section 26.1) behind the no-drop-rate search |
| RFC 2889 (August 2000) | Benchmarking Methodology for LAN Switching Devices | switch benchmarking (forwarding, flooding, address handling) |
| RFC 3550 (July 2003) | RTP: A Transport Protocol for Real-Time Applications | appendix A.8 "Estimating the Interarrival Jitter" - the jitter computation used by TRex |
| RFC 5481 (March 2009) | Packet Delay Variation Applicability Statement | meaning and use of delay-variation metrics |
| RFC 7348 (August 2014) | Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks | VXLAN data plane |
| RFC 7432 (February 2015) | BGP MPLS-Based Ethernet VPN | EVPN control plane |
RFC titles and dates were checked against the RFC Editor (https://www.rfc-editor.org/). Registration of the TRex example ranges: ARIN RDAP lookups https://rdap.arin.net/registry/ip/16.0.0.1 (16.0.0.0-16.2.255.255, Hewlett Packard Enterprise) and https://rdap.arin.net/registry/ip/48.0.0.1 (48.0.0.0-48.43.255.255, Prudential Insurance), October 2026. Further reading: RFC 8365 (March 2018) "A Network Virtualization Overlay Solution Using Ethernet VPN (EVPN)" - EVPN with VXLAN; RFC 7679 and RFC 7680 (January 2016) "A One-Way Delay Metric for IP Performance Metrics (IPPM)" and "A One-Way Loss Metric for IP Performance Metrics (IPPM)"; RFC 1242 (July 1991) "Benchmarking Terminology for Network Interconnection Devices"; RFC 6349 (August 2011) "Framework for TCP Throughput Testing".
E.7 HPE server documentation¶
| Document | Location | Content used |
|---|---|---|
| UEFI System Utilities User Guide for HPE Compute Gen11 servers, part number 30-163527A4-001e, edition 6 (December 2024) | HPE Support Center, document ID sd00003788en_us, section "Workload profiles and performance options" (https://support.hpe.com/hpesc/public/docDisplay?docId=sd00003788en_us) | "Workload profile dependencies for Intel Xeon Scalable processors", Table 1 (PDF p. 65): the predefined Low Latency profile sets SR-IOV, VT-d and VT-x to Disabled, Intel Turbo Boost to Disabled and the C-states to "No C-states" - hence the Custom profile with the low-latency settings and VT-d enabled (needed by vfio-pci) |