Log Entry Types¶
The reference C and Python code define a number of log entry types. Each entry type is defined by a set of named fields where each field has a specific data type. The log entry types are defined in wlan_exp/log/entry_types.py
. The documentation below is generated from these log entry type definitions.
NODE_INFO
¶
Details about the node hardware and its configuration. Node info values are static after boot.
Entry type ID: 1
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when log entry created |
wlan_mac_addr | uint64 | MAC address of station |
high_sw_id | uint8 | ID of CPU_HIGH project Constants defined for this field:
|
low_sw_id | uint8 | ID of CPU_LOW project Constants defined for this field:
|
padding | uint16 | padding for alignment |
high_sw_config | uint32 | Configuration of CPU_HIGH |
low_sw_config | uint32 | Configuration of CPU_LOW |
node_id | uint32 | Node ID, as set during wlan_exp init |
platform_id | uint32 | Platform ID |
serial_num | uint32 | Node serial number |
wlan_exp_version | uint32 | Version of wlan_exp |
max_tx_power_dbm | int16 | Maximum transmit power |
min_tx_power_dbm | int16 | Minimum transmit power |
cpu_high_compilation_date | 12S | CPU High Compilation Date string |
cpu_high_compilation_time | 12S | CPU High Compilation Time string |
cpu_low_compilation_date | 12S | CPU Low Compilation Date string |
cpu_low_compilation_time | 12S | CPU Low Compilation Time string |
EXP_INFO
¶
Header for generic experiment info entries created by the user application. The payload of the EXP_INFO entry is not described by the Python entry type. User code must access the payload in the binary log data directly.
Entry type ID: 2
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when log entry created |
info_type | uint32 | Exp info type - arbitrary value supplied by application |
msg_len | uint32 | Message length in bytes |
NODE_TEMPERATURE
¶
Record of the FPGA system monitor die temperature. This entry is only created when directed by a wlan_exp command. Temperature values are stored as 32-bit unsigned integers. To convert to degrees Celcius, apply (((float)temp_u32)/(65536.0*0.00198421639)) - 273.15
Entry type ID: 4
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when log entry created |
temp_current | uint32 | Current FPGA die temperature (deg C) |
temp_min | uint32 | Minimum FPGA die temperature (deg C) since FPGA configuration or sysmon reset |
temp_max | uint32 | Maximum FPGA die temperature (deg C) since FPGA configuration or sysmon reset |
TIME_INFO
¶
Record of a time base event at the node. This log entry is used to enable parsing of log data recorded before and after changes to the node’s microsecond MAC timer. This entry also allows a wlan_exp controler to write the current host time to the node log without affecting the node’s MAC timer value. This enables adjustment of log entry timestamps to real timestamps in post-proessing.
Entry type ID: 6
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when log entry created (before any time change is applied) |
time_id | uint32 | Random ID value included in wlan_exp TIME_INFO command; used to find common entries across nodes |
reason | uint32 | Reason code for TIME_INFO log entry creation Constants defined for this field:
|
mac_timestamp | uint64 | New value of MAC Time in microseconds |
system_timestamp | uint64 | Value of System Time in microseconds |
host_timestamp | uint64 | Host time in microseconds-since-epoch; 0xFFFFFFFFFFFFFFFF if unknown |
RX_OFDM
¶
Rx events from OFDM PHY. These log entries will only be created for packets that are passed to the high-level MAC code in CPU High. If the low-level MAC filter drops the packet, it will not be logged. For full “monitor mode” ensure the low-level MAC filter is configured to pass all receptions up to CPU High.
Entry type ID: 10
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds at PHY RX_START |
timestamp_frac | uint8 | Fractional part of timestamp (units of 6.25ns) |
phy_samp_rate | uint8 | PHY sampling rate in MSps |
length | uint16 | Length of payload in bytes |
cfo_est | int32 | Time-domain CFO estimate from Rx PHY; Fix32_31 value, CFO as fraction of sampling frequency |
mcs | uint8 | MCS index, in [0:7] |
phy_mode | uint8 | PHY mode index, in [0:2] Constants defined for this field:
|
ant_mode | uint8 | Antenna mode: [1,2,3,4] for SISO Rx on RF [A,B,C,D] Constants defined for this field:
|
power | int8 | Rx power in dBm |
padding0 | uint8 | |
pkt_type | uint8 | Packet type, first frame control byte of 802.11 header Constants defined for this field:
|
channel | uint8 | Channel (center frequency) index |
padding1 | uint8 | |
rx_gain_index | uint8 | Radio Rx gain index; larger values mean larger Rx gains, mapping to absolute dB is radio-dependent |
padding2 | uint8 | |
flags | uint16 | 1-bit flags Constants defined for this field:
|
chan_est | (64,2)i2 | OFDM Rx channel estimates, packed as [(uint16)I (uint16)Q] values, one per subcarrier |
mac_payload_len | uint32 | Length in bytes of MAC payload recorded in log for this packet |
mac_payload | 24uint8 | First 24 bytes of MAC payload, typically the 802.11 MAC header |
The following fields are populated when the log entry is part of a numpy array generated via the {{{generate_numpy_array}}} method. These fields are calculated from the underlying bytes in the raw log entries and are stored in more convenient formats tha the raw log fields. For example, these MAC address fields are 48-bit values stored in 64-bit integers. These integer addresses are much easier to use when filtering Tx/Rx log entries using numpy and pandas.
Field | Data Type | Description |
---|---|---|
addr1 | uint64 | MAC Header Address 1 |
addr2 | uint64 | MAC Header Address 2 |
addr3 | uint64 | MAC Header Address 3 |
mac_seq | uint16 | MAC Header Sequence Number |
RX_OFDM_LTG
¶
LTG Rx events from OFDM PHY. These log entries will only be created for packets that are passed to the high-level MAC code in CPU High. If the low-level MAC filter drops the packet, it will not be logged. For full “monitor mode” ensure the low-level MAC filter is configured to pass all receptions up to CPU High.
Entry type ID: 11
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds at PHY RX_START |
timestamp_frac | uint8 | Fractional part of timestamp (units of 6.25ns) |
phy_samp_rate | uint8 | PHY sampling rate in MSps |
length | uint16 | Length of payload in bytes |
cfo_est | int32 | Time-domain CFO estimate from Rx PHY; Fix32_31 value, CFO as fraction of sampling frequency |
mcs | uint8 | MCS index, in [0:7] |
phy_mode | uint8 | PHY mode index, in [0:2] Constants defined for this field:
|
ant_mode | uint8 | Antenna mode: [1,2,3,4] for SISO Rx on RF [A,B,C,D] Constants defined for this field:
|
power | int8 | Rx power in dBm |
padding0 | uint8 | |
pkt_type | uint8 | Packet type, first frame control byte of 802.11 header Constants defined for this field:
|
channel | uint8 | Channel (center frequency) index |
padding1 | uint8 | |
rx_gain_index | uint8 | Radio Rx gain index; larger values mean larger Rx gains, mapping to absolute dB is radio-dependent |
padding2 | uint8 | |
flags | uint16 | 1-bit flags Constants defined for this field:
|
chan_est | (64,2)i2 | OFDM Rx channel estimates, packed as [(uint16)I (uint16)Q] values, one per subcarrier |
mac_payload_len | uint32 | Length in bytes of MAC payload recorded in log for this packet |
mac_payload | 44uint8 | First 44 bytes of MAC payload: the 802.11 MAC header, LLC header, Packet ID, LTG ID |
The following fields are populated when the log entry is part of a numpy array generated via the {{{generate_numpy_array}}} method. These fields are calculated from the underlying bytes in the raw log entries and are stored in more convenient formats tha the raw log fields. For example, these MAC address fields are 48-bit values stored in 64-bit integers. These integer addresses are much easier to use when filtering Tx/Rx log entries using numpy and pandas.
Field | Data Type | Description |
---|---|---|
addr1 | uint64 | MAC Header Address 1 |
addr2 | uint64 | MAC Header Address 2 |
addr3 | uint64 | MAC Header Address 3 |
mac_seq | uint16 | MAC Header Sequence Number |
ltg_uniq_seq | uint64 | Unique sequence number for LTG packet |
ltg_flow_id | uint64 | LTG Flow ID, calculated as: 16LSB: LTG instance ID 48MSB: Destination MAC address |
RX_DSSS
¶
Rx events from DSSS PHY. These log entries will only be created for packets that are passed to the high-level MAC code in CPU High. If the low-level MAC filter drops the packet, it will not be logged. For full “monitor mode” ensure the low-level MAC filter is configured to pass all receptions up to CPU High.
Entry type ID: 15
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds at PHY RX_START |
timestamp_frac | uint8 | Fractional part of timestamp (units of 6.25ns) |
phy_samp_rate | uint8 | PHY sampling rate in MSps |
length | uint16 | Length of payload in bytes |
cfo_est | int32 | Time-domain CFO estimate from Rx PHY; Fix32_31 value, CFO as fraction of sampling frequency |
mcs | uint8 | MCS index, in [0:7] |
phy_mode | uint8 | PHY mode index, in [0:2] Constants defined for this field:
|
ant_mode | uint8 | Antenna mode: [1,2,3,4] for SISO Rx on RF [A,B,C,D] Constants defined for this field:
|
power | int8 | Rx power in dBm |
padding0 | uint8 | |
pkt_type | uint8 | Packet type, first frame control byte of 802.11 header Constants defined for this field:
|
channel | uint8 | Channel (center frequency) index |
padding1 | uint8 | |
rx_gain_index | uint8 | Radio Rx gain index; larger values mean larger Rx gains, mapping to absolute dB is radio-dependent |
padding2 | uint8 | |
flags | uint16 | 1-bit flags Constants defined for this field:
|
mac_payload_len | uint32 | Length in bytes of MAC payload recorded in log for this packet |
mac_payload | 24uint8 | First 24 bytes of MAC payload, typically the 802.11 MAC header |
The following fields are populated when the log entry is part of a numpy array generated via the {{{generate_numpy_array}}} method. These fields are calculated from the underlying bytes in the raw log entries and are stored in more convenient formats tha the raw log fields. For example, these MAC address fields are 48-bit values stored in 64-bit integers. These integer addresses are much easier to use when filtering Tx/Rx log entries using numpy and pandas.
Field | Data Type | Description |
---|---|---|
addr1 | uint64 | MAC Header Address 1 |
addr2 | uint64 | MAC Header Address 2 |
addr3 | uint64 | MAC Header Address 3 |
mac_seq | uint16 | MAC Header Sequence Number |
TX_HIGH
¶
Tx events in CPU High, logged for each data and management frame created and enqueued in CPU High. See TX_LOW for log entries of actual Tx events, including re-transmissions. The time values in this log entry can be used to determine time in queue (time_to_accept), time taken by CPU Low for all Tx attempts (time_to_done) and total time from creation to completion (time_to_accept+time_to_done).
Entry type ID: 20
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when packet was created, immediately before it was enqueued |
time_to_accept | uint32 | Time duration in microseconds between packet creation and acceptance by frame_transmit() in CPU Low |
time_to_done | uint32 | Time duration in microseconds between packet acceptance by CPU Low and completion of all transmissions by CPU Low |
uniq_seq | uint64 | Unique sequence number for Tx packet; 12 LSB of this used for 802.11 MAC header sequence number |
padding0 | uint32 | |
num_tx | uint16 | Number of Tx attempts that were made for this packet |
length | uint16 | Length in bytes of MPDU; includes MAC header, payload and FCS |
padding1 | uint8 | |
pkt_type | uint8 | Packet type, first frame control byte of 802.11 header Constants defined for this field:
|
queue_id | uint16 | Tx queue ID from which the packet was retrieved |
queue_occupancy | uint16 | Occupancy of the Tx queue immediately after this packet was enqueued |
flags | uint16 | 1-bit flags Constants defined for this field:
|
mac_payload_len | uint32 | Length in bytes of MAC payload recorded in log for this packet |
mac_payload | 24uint8 | First 24 bytes of MAC payload, typically the 802.11 MAC header |
The following fields are populated when the log entry is part of a numpy array generated via the {{{generate_numpy_array}}} method. These fields are calculated from the underlying bytes in the raw log entries and are stored in more convenient formats tha the raw log fields. For example, these MAC address fields are 48-bit values stored in 64-bit integers. These integer addresses are much easier to use when filtering Tx/Rx log entries using numpy and pandas.
Field | Data Type | Description |
---|---|---|
addr1 | uint64 | MAC Header Address 1 |
addr2 | uint64 | MAC Header Address 2 |
addr3 | uint64 | MAC Header Address 3 |
mac_seq | uint16 | MAC Header Sequence Number |
TX_HIGH_LTG
¶
Tx events in CPU High, logged for each data and management frame created and enqueued in CPU High. See TX_LOW for log entries of actual Tx events, including re-transmissions. The time values in this log entry can be used to determine time in queue (time_to_accept), time taken by CPU Low for all Tx attempts (time_to_done) and total time from creation to completion (time_to_accept+time_to_done).
Entry type ID: 21
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when packet was created, immediately before it was enqueued |
time_to_accept | uint32 | Time duration in microseconds between packet creation and acceptance by frame_transmit() in CPU Low |
time_to_done | uint32 | Time duration in microseconds between packet acceptance by CPU Low and completion of all transmissions by CPU Low |
uniq_seq | uint64 | Unique sequence number for Tx packet; 12 LSB of this used for 802.11 MAC header sequence number |
padding0 | uint32 | |
num_tx | uint16 | Number of Tx attempts that were made for this packet |
length | uint16 | Length in bytes of MPDU; includes MAC header, payload and FCS |
padding1 | uint8 | |
pkt_type | uint8 | Packet type, first frame control byte of 802.11 header Constants defined for this field:
|
queue_id | uint16 | Tx queue ID from which the packet was retrieved |
queue_occupancy | uint16 | Occupancy of the Tx queue immediately after this packet was enqueued |
flags | uint16 | 1-bit flags Constants defined for this field:
|
mac_payload_len | uint32 | Length in bytes of MAC payload recorded in log for this packet |
mac_payload | 44uint8 | First 44 bytes of MAC payload: the 802.11 MAC header, LLC header, Packet ID, LTG ID |
The following fields are populated when the log entry is part of a numpy array generated via the {{{generate_numpy_array}}} method. These fields are calculated from the underlying bytes in the raw log entries and are stored in more convenient formats tha the raw log fields. For example, these MAC address fields are 48-bit values stored in 64-bit integers. These integer addresses are much easier to use when filtering Tx/Rx log entries using numpy and pandas.
Field | Data Type | Description |
---|---|---|
addr1 | uint64 | MAC Header Address 1 |
addr2 | uint64 | MAC Header Address 2 |
addr3 | uint64 | MAC Header Address 3 |
mac_seq | uint16 | MAC Header Sequence Number |
ltg_uniq_seq | uint64 | Unique sequence number for LTG packet |
ltg_flow_id | uint64 | LTG Flow ID, calculated as: 16LSB: LTG instance ID 48MSB: Destination MAC address |
TX_LOW
¶
Record of actual PHY transmission. At least one TX_LOW will be logged for every TX_HIGH entry. Multiple TX_LOW entries may be created for the same TX_HIGH entry if the low-level MAC re-transmitted the frame. Use the uniq_seq fields to match TX_HIGH and TX_LOW entries to find records common to the same MPDU.
Entry type ID: 25
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when packet transmission actually started (PHY TX_START time) |
uniq_seq | uint64 | Unique sequence number of original MPDU |
mcs | uint8 | MCS index in [0:7] |
phy_mode | uint8 | PHY mode index, in [1:2] Constants defined for this field:
|
ant_mode | uint8 | PHY antenna mode in [0x10, 0x20, 0x30, 0x40] Constants defined for this field:
|
tx_power | int8 | Tx power in dBm |
reserved0 | uint8 | |
channel | uint8 | Channel (center frequency) index |
length | uint16 | Length in bytes of MPDU; includes MAC header, payload and FCS |
num_slots | int16 | Number of backoff slots allotted prior to this transmission; may not have been used for initial Tx (attempt_number==1); A value of -1 in this field means no backoff occured |
cw | uint16 | Contention window value at time of this Tx |
pkt_type | uint8 | Packet type, (first frame control byte of 802.11 header) Constants defined for this field:
|
flags | uint8 | 1-bit Flags Constants defined for this field:
|
timestamp_frac | uint8 | Fractional part of Tx timestamp (units of 6.25ns) |
phy_samp_rate | uint8 | PHY Sampling Rate Mode |
attempt_number | uint16 | Transmission index for this attempt, starting at 1 (1 = first Tx) |
reserved1 | uint16 | |
mac_payload_len | uint32 | Length in bytes of MAC payload recorded in log for this packet |
mac_payload | 24uint8 | First 24 bytes of MAC payload, typically the 802.11 MAC header |
The following fields are populated when the log entry is part of a numpy array generated via the {{{generate_numpy_array}}} method. These fields are calculated from the underlying bytes in the raw log entries and are stored in more convenient formats tha the raw log fields. For example, these MAC address fields are 48-bit values stored in 64-bit integers. These integer addresses are much easier to use when filtering Tx/Rx log entries using numpy and pandas.
Field | Data Type | Description |
---|---|---|
addr1 | uint64 | MAC Header Address 1 |
addr2 | uint64 | MAC Header Address 2 |
addr3 | uint64 | MAC Header Address 3 |
mac_seq | uint16 | MAC Header Sequence Number |
TX_LOW_LTG
¶
Record of actual PHY transmission. At least one TX_LOW will be logged for every TX_HIGH entry. Multiple TX_LOW entries may be created for the same TX_HIGH entry if the low-level MAC re-transmitted the frame. Use the uniq_seq fields to match TX_HIGH and TX_LOW entries to find records common to the same MPDU.
Entry type ID: 26
Field | Data Type | Description |
---|---|---|
timestamp | uint64 | Value of MAC Time in microseconds when packet transmission actually started (PHY TX_START time) |
uniq_seq | uint64 | Unique sequence number of original MPDU |
mcs | uint8 | MCS index in [0:7] |
phy_mode | uint8 | PHY mode index, in [1:2] Constants defined for this field:
|
ant_mode | uint8 | PHY antenna mode in [0x10, 0x20, 0x30, 0x40] Constants defined for this field:
|
tx_power | int8 | Tx power in dBm |
reserved0 | uint8 | |
channel | uint8 | Channel (center frequency) index |
length | uint16 | Length in bytes of MPDU; includes MAC header, payload and FCS |
num_slots | int16 | Number of backoff slots allotted prior to this transmission; may not have been used for initial Tx (attempt_number==1); A value of -1 in this field means no backoff occured |
cw | uint16 | Contention window value at time of this Tx |
pkt_type | uint8 | Packet type, (first frame control byte of 802.11 header) Constants defined for this field:
|
flags | uint8 | 1-bit Flags Constants defined for this field:
|
timestamp_frac | uint8 | Fractional part of Tx timestamp (units of 6.25ns) |
phy_samp_rate | uint8 | PHY Sampling Rate Mode |
attempt_number | uint16 | Transmission index for this attempt, starting at 1 (1 = first Tx) |
reserved1 | uint16 | |
mac_payload_len | uint32 | Length in bytes of MAC payload recorded in log for this packet |
mac_payload | 44uint8 | First 44 bytes of MAC payload: the 802.11 MAC header, LLC header, Packet ID, LTG ID |
The following fields are populated when the log entry is part of a numpy array generated via the {{{generate_numpy_array}}} method. These fields are calculated from the underlying bytes in the raw log entries and are stored in more convenient formats tha the raw log fields. For example, these MAC address fields are 48-bit values stored in 64-bit integers. These integer addresses are much easier to use when filtering Tx/Rx log entries using numpy and pandas.
Field | Data Type | Description |
---|---|---|
addr1 | uint64 | MAC Header Address 1 |
addr2 | uint64 | MAC Header Address 2 |
addr3 | uint64 | MAC Header Address 3 |
mac_seq | uint16 | MAC Header Sequence Number |
ltg_uniq_seq | uint64 | Unique sequence number for LTG packet |
ltg_flow_id | uint64 | LTG Flow ID, calculated as: 16LSB: LTG instance ID 48MSB: Destination MAC address |