Skip to main content

Ethernet Test

dev.io.t1s.eth_test - wire path i\r\t - generated from fwMenuEthTest.

eth_test_start_periodic​

Start Periodic. Starts the test-frame generator sending one frame every Period us (see setting u). Frames use the current Frame Size/Type/CRC settings and the destination MAC from command m. Refused while Loopback is on or on a build without the NCM stack

Wire command: i\r\t\p

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_start_periodic() -> Result
ow_status ow_io_t1s_eth_test_eth_test_start_periodic(ow_device* dev);
dev.io().t1s().eth_test().eth_test_start_periodic() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_start_periodic() # check dev.ok

eth_test_start_flood​

Start Flood. Starts the test-frame generator sending as fast as the USB link accepts (natural NTB backpressure paces it; submit failures are counted, not lost sequence numbers). Refused while Loopback is on

Wire command: i\r\t\f

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_start_flood() -> Result
ow_status ow_io_t1s_eth_test_eth_test_start_flood(ow_device* dev);
dev.io().t1s().eth_test().eth_test_start_flood() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_start_flood() # check dev.ok

eth_test_start_line_rate​

Start Line Rate. Starts the test-frame generator at Line Rate % (setting e) of a 10 Mbit/s reference wire, using a token bucket that charges each frame its size plus 24 bytes of preamble/FCS/gap overhead. Refused while Loopback is on

Wire command: i\r\t\r

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_start_line_rate() -> Result
ow_status ow_io_t1s_eth_test_eth_test_start_line_rate(ow_device* dev);
dev.io().t1s().eth_test().eth_test_start_line_rate() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_start_line_rate() # check dev.ok

eth_test_start_burst​

Start Burst. Starts the test-frame generator releasing Burst Count frames (setting n) every second, the first burst immediately. Refused while Loopback is on

Wire command: i\r\t\b

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_start_burst() -> Result
ow_status ow_io_t1s_eth_test_eth_test_start_burst(ow_device* dev);
dev.io().t1s().eth_test().eth_test_start_burst() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_start_burst() # check dev.ok

eth_test_send_count​

Send N Frames. Sends exactly Count test frames as fast as the link accepts, then stops by itself (Count 1 = one transmit). Counters keep running so the result can be read with Show Stats afterwards. Refused while Loopback is on

Wire command: i\r\t\o

ArgWire type
countdec

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_send_count(count: int) -> Result
ow_status ow_io_t1s_eth_test_eth_test_send_count(ow_device* dev, int32_t count);
dev.io().t1s().eth_test().eth_test_send_count(count: i32) -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_send_count(count) # check dev.ok

eth_test_stop​

Stop. Stops the test-frame generator. Counters are kept (use Clear Stats to zero them); the responder and loopback settings are unaffected

Wire command: i\r\t\x

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_stop() -> Result
ow_status ow_io_t1s_eth_test_eth_test_stop(ow_device* dev);
dev.io().t1s().eth_test().eth_test_stop() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_stop() # check dev.ok

eth_test_show_stats​

Show Stats. Prints one line of key=value counters: mode link TXf TXb TXfail TXfps TXkbps RXf RXb RXfps RXkbps gap lost crc under over other echoq echos echod. The fps/kbps values are 1 Hz rates; RXf counts received FWET test frames, other counts everything else (host OS chatter)

Wire command: i\r\t\s

Returns: stats (string)

dev.io.t1s.eth_test.eth_test_show_stats() -> Result
ow_status ow_io_t1s_eth_test_eth_test_show_stats(ow_device* dev, char* stats, size_t stats_cap);
dev.io().t1s().eth_test().eth_test_show_stats() -> Result<String, OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_show_stats() # returns value; check dev.ok

eth_test_clear_stats​

Clear Stats. Zeros every TX/RX/echo counter and restarts sequence-gap tracking. The generator, responder and link state are unaffected

Wire command: i\r\t\c

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_clear_stats() -> Result
ow_status ow_io_t1s_eth_test_eth_test_clear_stats(ow_device* dev);
dev.io().t1s().eth_test().eth_test_clear_stats() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_clear_stats() # check dev.ok

eth_test_set_dest_mac​

Set Dest MAC. Sets the destination MAC for generated test frames (default FF FF FF FF FF FF broadcast). Takes effect at the next generator start. Not persisted across reboot

Wire command: i\r\t\m

ArgWire type
dest_machexbytes

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.eth_test_set_dest_mac(dest_mac: bytes | bytearray) -> Result
ow_status ow_io_t1s_eth_test_eth_test_set_dest_mac(ow_device* dev, const uint8_t* dest_mac, size_t dest_mac_len);
dev.io().t1s().eth_test().eth_test_set_dest_mac(dest_mac: &[u8]) -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_set_dest_mac(dest_mac) # check dev.ok

Link Status. Reports whether the USB network adapter is up (host selected the NCM data interface) plus the host-side MAC, device-side MAC and the device's static IP 10.55.0.2

Wire command: i\r\t\k

Returns: info (string)

dev.io.t1s.eth_test.eth_test_link_status() -> Result
ow_status ow_io_t1s_eth_test_eth_test_link_status(ow_device* dev, char* info, size_t info_cap);
dev.io().t1s().eth_test().eth_test_link_status() -> Result<String, OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.eth_test_link_status() # returns value; check dev.ok

frame_size​

Frame Size. Total Ethernet frame size in bytes for generated test frames (headers included, FCS excluded). The udp frame type needs at least 66 bytes for its headers and is raised to that silently

Wire command: i\r\t\i

ArgWire type
value

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.frame_size(value: int) -> Result
ow_status ow_io_t1s_eth_test_frame_size(ow_device* dev, int32_t value);
dev.io().t1s().eth_test().frame_size(value: i32) -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.frame_size(value) # check dev.ok

period_us​

Period us. Microseconds between frames in Periodic mode (10000 = 100 frames per second)

Wire command: i\r\t\u

ArgWire type
value

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.period_us(value: int) -> Result
ow_status ow_io_t1s_eth_test_period_us(ow_device* dev, int32_t value);
dev.io().t1s().eth_test().period_us(value: i32) -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.period_us(value) # check dev.ok

burst_count​

Burst Count. Frames released in each one-second burst in Burst mode

Wire command: i\r\t\n

ArgWire type
value

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.burst_count(value: int) -> Result
ow_status ow_io_t1s_eth_test_burst_count(ow_device* dev, int32_t value);
dev.io().t1s().eth_test().burst_count(value: i32) -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.burst_count(value) # check dev.ok

line_rate_percent​

Line Rate Percent. Percentage of the 10 Mbit/s reference wire rate for Line Rate mode

Wire command: i\r\t\e

ArgWire type
value

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.line_rate_percent(value: int) -> Result
ow_status ow_io_t1s_eth_test_line_rate_percent(ow_device* dev, int32_t value);
dev.io().t1s().eth_test().line_rate_percent(value: i32) -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.line_rate_percent(value) # check dev.ok

payload_crc​

Payload CRC. When on, each generated frame carries a CRC32 over its sequence/timestamp/fill so the host can prove payload integrity; costs a CRC pass per frame at high rates

Wire command: i\r\t\v

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.payload_crc() -> Result
ow_status ow_io_t1s_eth_test_payload_crc(ow_device* dev);
dev.io().t1s().eth_test().payload_crc() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.payload_crc() # check dev.ok

responder​

Responder. When on, the device answers as 10.55.0.2: ARP requests, ICMP echo (ping) and UDP echo on port 5556. Turn off to measure pure generator/counter behavior. (Served by lwIP when compiled in -- FW2MAIN_LWIP builds answer through the Network (TCP/IP) menu's stack and this toggle only drives the legacy mini-responder on non-lwIP builds)

Wire command: i\r\t\a

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.responder() -> Result
ow_status ow_io_t1s_eth_test_responder(ow_device* dev);
dev.io().t1s().eth_test().responder() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.responder() # check dev.ok

loopback​

Loopback. When on, EVERY received frame is echoed back with its MAC addresses swapped and the generator/responder are disabled (mutually exclusive). Always off after a reboot

Wire command: i\r\t\l

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.loopback() -> Result
ow_status ow_io_t1s_eth_test_loopback(ow_device* dev);
dev.io().t1s().eth_test().loopback() -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.loopback() # check dev.ok

frame_type​

Frame Type. Carrier for generated test frames: raw = ethertype 0x88B5 (needs npcap/scapy on the host), udp = IPv4 broadcast 10.55.0.255 port 5555 (a plain host socket receives it)

Wire command: i\r\t\t

ArgWire type
value

Returns: none (Ok/Err only)

dev.io.t1s.eth_test.frame_type(value: int) -> Result
ow_status ow_io_t1s_eth_test_frame_type(ow_device* dev, int32_t value);
dev.io().t1s().eth_test().frame_type(value: i32) -> Result<(), OwError>

The C and Rust signatures above are also the WASM guest signatures - the device API surface is identical; only the transport differs (ow_open_wasm(&dev) in C, OneWili::open() in Rust).

dev.io.t1s.eth_test.frame_type(value) # check dev.ok