Networking Changes#
802.1Qav(CBS)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
No |
NSR, SR |
QNX |
Migration Path
6.5 to 7.2
Migration Rationale
Enhances the safety/security mechanisms by preventing unauthorized VFs from modifying core attributes in the MAC controller that control the bandwidth shaping across multiple DMA channels.
Steps to Migrate
Refer to the NVIDIA DriveOS Developer Guide
Behavioral Change with Broadcast Packets#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
No |
NSR, SR |
QNX |
Migration Path
6.5 (io-pkt stack) to 7.2 (io-sock)
Migration Rationale
Behavioral change from the networking stack provided by QNX.
Steps to Migrate
Networking applications that transmit broadcast packets need to incorporate the changes described above.
Behavioral Change for Multicast Rx Packets for io-sock and NvSocket#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The behavior of QNX native network stack (io-sock) on SDP8.0.x is different from SDP7.1 (io-pkt). As a corollary, NvSocket follows io-sock stack behavior in DOS7.2
|
No |
NSR, SR |
QNX |
Migration Path
6.5 (io-pkt stack) to 7.2 (io-sock)
Migration Release Path
6.x to 7.x
Migration Rationale
Multicast behavior changed in the native network stack from QNX between SDP7.1 and SDP8.0
Steps to Migrate
Networking applications using multicast rx packets need to be aware of the above changes in the multicast behavior.
QNX Access Control Policies for ioctl and devctl Commands#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The Ethernet driver and NvEthMgr safeguards driver specific |
No |
NSR, SR |
QNX |
Migration Path
6.5 to 7.2
Migration Rationale
Security violation from 6.5 is resolved
Steps to Migrate
Refer to “QNX Access Control Policies for ioctl and devctl Commands” in the NVIDIA DriveOS Developer Guide
Deprecated Header Files Removed from the Nvethernet Sample App#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The following header files are deprecated and removed from the Nvethernet Sample Application
|
No |
NSR, SR |
QNX |
Migration Path
6.5 to 7.2
Migration Rationale
Deprecated header files are not compatible with the new version of QNX iosock stack and were removed from the Nvethernet Sample Application
Steps to Migrate
Refer to the Nvethernet Sample Application source code for the changes in the included header files
Nvethernet Sample App for NvSocket Statistics Changes for 7.2.4.0#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Following are changes to the Nvethernet Sample Application for NvSocket Statistics (
Old binaries compiled against prior headers will fail at runtime because:
|
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Thor to Thor
Release Migration Path
6.5 to 7.2
7.2.3.0 to 7.2.4.0
Migration Rationale
The Nvethernet Sample Application nvsocket_stats IPC command is updated to support control of verbose output from NvSocket Server. The IPC message structure and statistics response structure have both changed, breaking binary compatibility with older builds.
Steps to Migrate
Recompile the nvethernet_sample application with 7.2.4.0 headers. Old binaries must not be used — they will produce runtime failures due to IPC message and structure layout mismatches.
By default, verbose is disabled. Use option
-vto enable verbose output from NvSocket Server:
(SOCK=/<sockprefix> nvethernet_sample <interface> nvsocket_stats -v)
bus_setup_intr() to Attach to Interrupt#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
nveqos_io-sock driver uses bus_setup_intr() API to attach to an interrupt |
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Release Path
6.5 to 7.2
Migration Rationale
nveqos_io-sock driver is associated with Nexus Bus. Hence, we use the bus_setup_intr() for setting up the IST or allocating interrupt resources. Also this API internally calls InterruptAttachThread().
Steps to Migrate
Refer nveqos_io-sock driver.
Abilities#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The iosock process needs the following abilities for nveqos_iosock driver launch
|
No |
SR |
QNX |
Migration Path
Orin to Thor
Release Path
6.5 to 7.2
Migration Rationale
The Muon Kernel process adds new abilities, such as the iosock process
Steps to Migrate
Add the abilities in the abilities.txt file
Deprecated dcom_stats_ioctl Tool#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Release Path
6.5 to 7.2
Migration Rationale
SIOCGDRVCOM is no longer supported in the QNX io-sock network stack; the dcom_stats_ioctl tool is deprecated.
Steps to Migrate
Use the Nvethernet Sample app instead:
nvethernet_sample <interface> dcom_stats_ioctlFor “Internal TX Error” information, use:
netstat -bdI <interface>and look for the “Oerrs” field.
Behavioral Change with NvSocket Signals#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 (io-pkt stack) to 7.2 (io-sock)
Migration Rationale
Engineering research discovered a less intrusive method of unblocking i/o
Steps to Migrate
Networking applications using NvSocket Library may freely use signals without checking if the signal number conflicts with NvSocket Library. When configuring DT setting for launching nvethmgr program, delete the -s command line option if present.
NvSocket Memory Carveout Separated for Each Interface#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
In release 7.2.4.0, NvEthMgr memory carveout is separated for each interface. Each interface has its own memory carveout and SMMU addresses space instead of single memory carveout for all interfaces. Following is the list of carveouts and SMMU domains created for each supported interface for NvSocket. |
No |
NSR, SR |
QNX |
Migration Release Path
7.0 to 7.2
6.x to 7.x
Migration Rationale
Due to memory isolation requirements for DriveOS SEOOC compliance.
Steps to Migrate
To adjust NvSocket memory configuration, the following listed Carveout and SMMU configuration nodes are to be updated for the desired interfaces. Refer to the NvSocket FAQs section in the NVIDIA DriveOS Developer Guide for additional information.
Interface |
NvEthMgr Memory carveout node name |
SMMU addresses space node name |
|---|---|---|
eqos_0 |
nvethmgr_eqos_0_smmu_static_mapping |
niso1_nvethmgr_eqos_0_as |
mgbe0_0 |
nvethmgr_mgbe0_0_smmu_static_mapping |
nios0_nvethmgr_mgbe0_0_as |
mgbe1_0 |
nvethmgr_mgbe1_0_smmu_static_mapping |
nios0_nvethmgr_mgbe1_0_as |
mgbe2_0 |
nvethmgr_mgbe2_0_smmu_static_mapping |
nios0_nvethmgr_mgbe2_0_as |
mgbe3_0 |
nvethmgr_mgbe3_0_smmu_static_mapping |
nios0_nvethmgr_mgbe3_0_as |
NvSocket Can be Enabled and Disabled on Supported Interfaces using PCT Flags#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
NvSocket can be enabled and disabled on supported interfaces
using PCT flags by passing the corresponding PCT flag to |
No |
NSR, SR |
QNX |
Migration Path
6.5 to 7.2
Migration Rationale
To provide flexibility to enable/disable NvSocket on supported interfaces with minimal DT modification as possible.
Steps to Migrate
To Enable/disable NvSocket on desired interface, corresponding PCT flag as per below table to be passed to bind_partitions command.
Please refer to the NvSocket FAQs section in developer guide for more details.
Note: Default interface configuration for NvSocket still remains the same as before.
Interface |
PCT Flag |
|---|---|
eqos_0 |
ENABLE_NVSOCKET_EQOS_0 |
mgbe0_0 |
ENABLE_NVSOCKET_MGBE0_0 |
mgbe1_0 |
ENABLE_NVSOCKET_MGBE1_0 |
mgbe2_0 |
ENABLE_NVSOCKET_MGBE2_0 |
mgbe3_0 |
ENABLE_NVSOCKET_MGBE3_0 |
Thread Priority Configuration for io-sock#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
All the threads of io-sock process (including IST threads) will have the same priority configured through |
No |
NSR, SR |
QNX |
Migration Path
6.5 to 7.2
Migration Rationale
Behavioral change from the networking stack (io-sock) provided by QNX in 7.2
Steps to Migrate
io-sock thread priorities can be configured through qnx.priority option in io-sock configuration file provided through -o config option in iolauncher command. Please refer to the developer guide for more details.
Renaming the NvEthMgr Sample Application#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Rename NvEthMgr sample application binary
|
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
To make the sample application binary name consistent with the nvethmgr sample application.
Steps to Migrate
Use the make command to build the sample application binary with the new name.
NvSocket DT Parameter Changes for 7.2.5.0#
Target Changes |
Backward Compatible |
Migration Path |
Platform |
OS |
|
|---|---|---|---|---|---|
Release 7.2.5.0 introduces the following NvSocket device tree (DT) parameter changes:
|
Yes |
Orin to Orin Orin to Thor Migration Release Path 7.2.4.0 to 7.2.5.0 |
NSR SR |
QNX |
Migration Rationale
The
nvsocket-tx-extra-loop-countparameter is no longer needed due to TX path optimizations in 7.2.5.0. No action is required; the parameter is silently ignored if left in place.The
nvsocket-tx-batch-packet-min-countchange to percentage-based values simplifies configuration by making it independent of the absolute ring size. No action is required unless this parameter was customized; the default changes from 1 to 50 and the semantics change from absolute count to percentage.The minimum buffer sizes for
nvsocket-max-rx-buf-sizeandnvsocket-max-tx-buf-sizeare increased from 10MB to 45MB, and maximum values are increased to 1GB, removing the previous upper bound constraints and allowing higher throughput configurations for jumbo frame (9000 MTU) use cases. No action is required as previously configured DT values remain within the new valid range.The
nvsocket-tx-deq-batch-countparameter allows tuning TX dequeue batch size to reduce mutex acquire/release kernel call frequency during TX processing. No action is required; default value of 4096 is used if not specified in device tree.The
nvsocket-poll-delay-lo-rx-free-list-thread-msparameter enables tuning the loopback rx free list thread poll interval. No action required; default value of 2ms is used if not specified in device tree.The
nvsocket-flagsparameter adds new signalling and busy polling control bits (8–12) for performance tuning. Bits 3, 4, 5 are removed. No action is required; default value of 0x80 remains unchanged.
Steps to Migrate
Remove
nvsocket-tx-extra-loop-countfrom device tree, if present. The parameter is silently ignored if left in place.Update
nvsocket-tx-batch-packet-min-countDT property if customized — the value now represents a percentage (1–90%) instead of an absolute packet count. Default is 50%.nvsocket-max-rx-buf-sizeminimum increased from 10MB to 45MB and maximum increased to 1GB (previously ~90MB). Update any value below 45MB to at least 45MB.nvsocket-max-tx-buf-sizeminimum increased from 10MB to 45MB and maximum increased to 1GB (previously ~585MB). Update any value below 45MB to at least 45MB.nvsocket-tx-deq-batch-countis a new parameter with a default value of 4096. No action is required unless TX dequeue batch tuning is needed.nvsocket-poll-delay-lo-rx-free-list-thread-msis a new parameter with default value 2ms. No action is required unless loopback rx free list poll tuning is needed.nvsocket-flagsbits 3, 4, 5 are removed; new bits 8–12 are added for TX/RX signalling and busy polling control. No action isrequired if using the default value (0x80). If custom flags were set for bits 3, 4, or 5, remove them because they are no longer supported.
Changes to nvethernet_export.h#
MACsec Statistics IOCTL#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
A new IOCTL command |
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
Provides dedicated monitoring capabilities for MACsec layer performance and security metrics, enabling applications to track MACsec-specific statistics separately from general Ethernet statistics.
Steps to Migrate
Applications implementing MACsec security features can use this new IOCTL (ETHER_IOCTL_MACSEC_STATS) to retrieve MACsec-specific statistics. The Nvethernet Sample Application demonstrates this IOCTL usage with the dcom_stats_ioctl command: nvethernet_sample <interface> dcom_stats_ioctl
L2 Filter Packet Duplication#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
A new field, |
Yes (for Orin only) |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
Packet duplication enables the MAC to duplicate received packets to multiple DMA channels, which is useful for broadcast and multicast scenarios where the same packet needs to be delivered to multiple applications. This should be set to zero for unicast MAC address filtering.
Steps to Migrate
Refer to the Nvethernet Sample Application usage for L2 filter configuration. For unicast MAC address filtering, always pass pkt_dup = 0. For multicast, the pkt_dup = 1 should be passed.
Changes to nvethernet_type.h#
nveu64_t Type Definition Change#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
BREAKING CHANGE: The |
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
Type alignment standardization. While both types represent 64-bit unsigned integers, the underlying type change ensures consistent behavior across different platforms and compilers.
Steps to Migrate
Update all
printf/scanfformat specifiers: use%lluinstead of%lufornveu64_tvariables.Review any code that uses type overloading with
nveu64_t.Recompile all code that depends on
nveu64_tto ensure binary compatibility.Update casting or type conversion code that assumes
unsigned longrepresentation.
Warning
This is a breaking change that affects binary compatibility. All dependent code must be recompiled. Applications using incorrect format specifiers (%lu instead of %llu) may exhibit undefined behavior or produce incorrect output.
FRP Command Structure Changes (osi_core_frp_cmd)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
BREAKING CHANGE: The |
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
The dma_sel field expansion from 32-bit to 64-bit allows up to 64 DMA channels to be specified (bits 0-63) for frame routing, supporting the increased channel count (OSI_MAX_NUM_CHANS = 48). The new dcht field provides additional DMA Channel Table configuration for FRP operations.
Steps to Migrate
Update code that sets/reads
dma_selto handle 64-bit values.Initialize the new
dchtfield appropriately when configuring FRP commands.Update format specifiers for
dma_selfrom%uto%lluif printing values.Recompile all code using
osi_core_frp_cmdstructure (ETHER_CONFIG_FRP_CMDIOCTL).
Warning
This is a breaking change that affects binary compatibility. The osi_core_frp_cmd structure size and layout have changed. All code using FRP commands must be recompiled.
Changes to nvsocket_export.h#
Thread Poll Delay Constants#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Release 7.2.4.0 adds macros for thread polling configuration validation:
|
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
These macros provide the bounds for device tree configurable NvSocket thread poll delay parameters.
Steps to Migrate
Use these macros when configuring NvSocket thread poll delays via device tree properties. The following device tree properties use these macros for validation:
nvsocket-poll-delay-pcap-dumper-thread-ms: PCAP dumper thread poll delay (default:NVSOCKET_THREAD_POLL_MAX_MS)nvsocket-poll-delay-rx-frag-expire-thread-ms: RX fragment expiration thread poll delay (default:NVSOCKET_THREAD_POLL_MAX_MS)nvsocket-poll-delay-rx-free-list-thread-ms: RX free list thread poll delay (default:NVSOCKET_THREAD_POLL_MAX_MS)nvsocket-poll-delay-shm-signal-thread-ns: SHM signal thread poll delay in nanoseconds (default:NVSOCKET_THREAD_POLL_MAX_NS)
Values must be >= minimum threshold; values below minimum will cause server initialization failure.
Usage Example
The constants define valid ranges for thread poll delay configuration:
/* Millisecond-based delays: valid range is 1ms to 1000ms */
#define NVSOCKET_THREAD_POLL_MIN_MS (1U)
#define NVSOCKET_THREAD_POLL_MAX_MS (1000U)
/* Nanosecond-based delays: valid range is 1ms (1000000ns) to 1s (1000000000ns) */
#define NVSOCKET_THREAD_POLL_MIN_NS (1000000U)
#define NVSOCKET_THREAD_POLL_MAX_NS (1000000000U)
Device Tree Configuration Example
nvsocket {
nvsocket-poll-delay-pcap-dumper-thread-ms = <100>;
nvsocket-poll-delay-rx-frag-expire-thread-ms = <500>;
nvsocket-poll-delay-rx-free-list-thread-ms = <250>;
nvsocket-poll-delay-shm-signal-thread-ns = <10000000>; /* 10ms */
};
IP Multicast Group Membership Limit#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Release 7.2.4.0 adds a macro, |
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Release Path
6.5 to 7.2
Migration Rationale
This constant defines an explicit limit for multicast group memberships in NvSocket, similar to the standard BSD socket IP_MAX_MEMBERSHIPS constant. Having a defined limit enables consistent behavior and predictable resource allocation for multicast applications.
Steps to Migrate
Applications using IP multicast with NvSocket should be aware of this limit:
A single NvSocket can join up to 20 multicast groups
Use
IP_DROP_MEMBERSHIPto leave groups before joining new ones if at limitConsider using multiple sockets if more than 20 group memberships are required
Behavior When Limit Exceeded
When an application attempts to join more than NV_IP_MAX_MEMBERSHIPS (20) multicast groups on a single socket:
The
setsockopt()call withIP_ADD_MEMBERSHIPreturns-1The multicast membership is not added
Comparison with BSD Sockets
Constant |
Value |
Scope |
|---|---|---|
|
20 |
Per socket |
|
Platform-dependent (typically 20) |
Per socket |
Usage Example
#include <nvsocket_export.h>
#include <netinet/in.h>
/* Join multiple multicast groups (up to NV_IP_MAX_MEMBERSHIPS) */
for (int i = 0; i < NV_IP_MAX_MEMBERSHIPS; i++) {
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr(multicast_addrs[i]);
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
&mreq, sizeof(mreq)) < 0) {
if (errno == ETOOMANYREFS) {
/* Maximum membership limit reached */
printf("Cannot join group: membership limit reached\n");
}
break;
}
}
IP Multicast Source Membership Limit#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Release 7.2.4.0 adds a macro, |
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
This constant defines an explicit limit for source-specific multicast source addresses in NvSocket to reduce memory usage and ensure defined behavior. SSM allows applications to receive multicast traffic only from specific sources, and this limit bounds the number of sources per group membership. Having a defined limit reduces per-socket memory footprint and enables consistent, predictable resource allocation for SSM applications.
Steps to Migrate
Applications using Source-Specific Multicast (SSM) with NvSocket should be aware of this limit:
A single multicast group membership can have up to 20 source addresses via
IP_ADD_SOURCE_MEMBERSHIPUp to 20 sources can be blocked via
IP_BLOCK_SOURCEper ASM group membershipUse
IP_DROP_SOURCE_MEMBERSHIPorIP_UNBLOCK_SOURCEto remove sources before adding new ones if at limit
Behavior When Limit Exceeded
When an application attempts to add more than NV_IP_MAX_SOURCE_MEMBERSHIPS (20) source addresses for a single multicast group on a socket:
The
setsockopt()call withIP_ADD_SOURCE_MEMBERSHIPorIP_BLOCK_SOURCEreturns-1errnois set toENOSPCThe source membership is not added
Comparison with Related Constants
Constant |
Value |
Scope |
|---|---|---|
|
20 |
Max multicast groups per socket ( |
|
20 |
Max source addresses per multicast group per socket ( |
|
512 |
Max source addresses per multicast group per socket ( |
Usage Example (IP_ADD_SOURCE_MEMBERSHIP - SSM)
#include <nvsocket_export.h>
#include <netinet/in.h>
/* Add multiple SSM sources for a multicast group (up to NV_IP_MAX_SOURCE_MEMBERSHIPS) */
for (unsigned int i = 0; i < NV_IP_MAX_SOURCE_MEMBERSHIPS; i++) {
struct ip_mreq_source mreq_src;
mreq_src.imr_multiaddr.s_addr = inet_addr("239.1.1.1");
mreq_src.imr_interface.s_addr = inet_addr(interface_ip);
mreq_src.imr_sourceaddr.s_addr = inet_addr(source_addrs[i]);
if (setsockopt(sock, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP,
&mreq_src, sizeof(mreq_src)) < 0) {
if (errno == ENOSPC) {
/* Maximum source membership limit reached */
printf("Cannot add source: source membership limit reached\n");
}
break;
}
}
Usage Example (IP_BLOCK_SOURCE - ASM with blocked sources)
#include <nvsocket_export.h>
#include <netinet/in.h>
/* First join the multicast group using ASM (IP_ADD_MEMBERSHIP) */
struct ip_mreq group;
group.imr_multiaddr.s_addr = inet_addr("239.1.1.1");
group.imr_interface.s_addr = inet_addr(interface_ip);
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group));
/* Block specific sources (up to NV_IP_MAX_SOURCE_MEMBERSHIPS) */
for (unsigned int i = 0; i < NV_IP_MAX_SOURCE_MEMBERSHIPS; i++) {
struct ip_mreq_source mreq_src;
mreq_src.imr_multiaddr.s_addr = inet_addr("239.1.1.1");
mreq_src.imr_interface.s_addr = inet_addr(interface_ip);
mreq_src.imr_sourceaddr.s_addr = inet_addr(blocked_sources[i]);
if (setsockopt(sock, IPPROTO_IP, IP_BLOCK_SOURCE,
&mreq_src, sizeof(mreq_src)) < 0) {
if (errno == ENOSPC) {
/* Maximum blocked source limit reached */
printf("Cannot block source: block list full\n");
}
break;
}
}
NvSocket RX Flush Dequeue Statistics (Suspend/Resume)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Release 7.2.4.0 adds new fields, |
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
During system suspend/resume, stale packets may remain in the NvSocket receive queue from before the suspend. These packets are no longer valid and must be flushed. The new statistics fields provide visibility into this flush operation, enabling applications and system integrators to monitor and diagnose packet loss related to suspend/resume transitions.
Steps to Migrate
Applications or tools reading NvSocket statistics should be aware of the new fields:
flush_deq_cntinnet_shm_client_rx_stat_t: Per-client count of stale packets flushed from the RX queue due to suspend/resumetotal_rx_flush_deq_cntinnvsocket_server_stat_t: Aggregate count across all clients of stale packets flushed due to suspend/resumeRecompile applications (e.g., nvethernet_sample application) that directly access these structures
Structure Details
Field |
Structure |
Description |
|---|---|---|
|
|
Per-client count of stale RX packets flushed during suspend/resume |
|
|
Server-wide aggregate count of stale RX packets flushed during suspend/resume across all clients |
Socket Address Type Change (client_t)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
BREAKING CHANGE: In the |
No |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
Migration Rationale
This change reduces memory usage by using a union instead of a struct for socket addresses. Since a socket connection uses either IPv4 or IPv6 (not both simultaneously), the union provides more efficient memory utilization.
Steps to Migrate
API usage patterns remain unchanged (
.name.name_inor.name.name_in6)Ensure code does not assume simultaneous storage of both IPv4 and IPv6 addresses
Recompile all applications using
client_tstructureTest thoroughly if code previously relied on both address variants being stored
Warning
This is a breaking change affecting binary compatibility. Structure size is reduced and memory layout has changed. All dependent code must be recompiled.
Maximum Fragments Constant (MAX_FRAGS)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Release 7.2.4.0 adds a macro, |
Yes |
NSR, SR |
QNX |
Migration Rationale
This constant defines the hard limit for IP fragmentation in NvSocket, accounting for MACsec MTU adjustments and protocol headers.
Steps to Migrate
No action is required. This constant is used internally by NvSocket for fragment management.
NvSocket Macro Changes for 7.2.5.0#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Orin
Orin to Thor
Dimensity C-X1 to Dimensity C-X1
Migration Release Path
7.2.4.0 to 7.2.5.0
Migration Rationale
NVSOCKET_MIN_RX_BUF_SIZEandNVSOCKET_MIN_TX_BUF_SIZEincreased from 10MB to 45MB to ensure sufficient buffer allocation for NvSocket operation.NVSOCKET_MAX_RX_BUF_SIZEandNVSOCKET_MAX_TX_BUF_SIZEincreased to 1GB (fixed values replacing previous derived calculations) to allow higher throughput configurations and enable reserving more buffers for jumbo frame (9000 MTU) use cases.NVSOCKET_TX_DEQ_BATCH_COUNT_*macros provide bounds and default for the TX dequeue batch count, allowing tuning of TX processing to reduce mutex acquire/release kernel call frequency.NVSOCKET_THREAD_POLL_MIN_MS/NVSOCKET_THREAD_POLL_MAX_MSscope extended to cover the new loopback rx free list thread poll delay DT property.NVSOCKET_MIN_MTUimproves code maintainability by extracting the hardcoded MTU value into a named constant. The minimum MTU accounts for MACsec adjustments (MACSEC_TAG_ICV_LEN of 34 bytes reduced from min MTU, further reduced by 2 bytes for optimal performance).DT property name annotations on all configurable macros improve traceability between code and device tree configuration.
Steps to Migrate
No action is required for most applications. The MAX_FRAGS calculation result (approximately 139 fragments) remains unchanged. Applications that need to reference the minimum MTU value can now use the NVSOCKET_MIN_MTU macro. Applications using custom buffer sizes can now configure up to 1GB for both RX and TX buffers (minimum 45MB). Applications needing TX dequeue batch tuning can use the NVSOCKET_TX_DEQ_BATCH_COUNT_* macros for validation.
Changes to nvsocketzc_export.h#
New Header nvsocketzc_export.h for 7.2.5.0#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Release 7.2.5.0 introduces a new public header,
This header exports the following APIs:
The header also defines
Usage: Include |
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Orin
Orin to Thor
Dimensity C-X1 to Dimensity C-X1
Migration Release Path
7.2.4.0 to 7.2.5.0
Migration Rationale
The zero-copy APIs eliminate data copies between application and NvSocket shared memory buffers, providing significant throughput improvement and CPU utilization reduction for high packet-rate UDP workloads. Applications can directly read from and write to NvSocket internal buffers, avoiding the memcpy overhead in standard recv/send paths.
Steps to Migrate
No action is required for existing applications. The zero-copy APIs are
optional and additive. To adopt zero-copy mode, include
nvsocketzc_export.h and replace standard recv/send calls with their
zc_ counterparts. Applications must manage buffer lifecycle
explicitly using zc_alloc_tx_buf()/zc_free_tx_buf() for TX and
zc_free_rx_buf() for RX.
L2 LLA Filter Update IPC (NVSOCKET_PULSE_UPDATE_LLA_FILTER)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Release 7.2.5.0 introduces a new IPC path that lets the io-sock driver request NvEthMgr to reprogram the per-DMA-channel L2 unicast (LLA) filter on an NvSocket-enabled interface when the link-layer MAC address is changed (for example, via the
The numeric value of the NvEthMgr programs both an L2 broadcast filter and a per-DMA-channel L2 unicast filter at interface initialization. As of release 7.2.5.0, this IPC supports updates to the L2 unicast filter only; the L2 broadcast filter continues to be programmed at interface initialization and cannot be updated at runtime through this IPC. |
Yes |
NSR, SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5 to 7.2
7.2.4.0 to 7.2.5.0
Migration Rationale
In 7.2.4.0, on NvSocket-enabled interfaces, the NvEthMgr resource manager owns L2 filter programming (both the L2 broadcast filter and the per-DMA-channel L2 unicast filter), so a runtime change of the interface MAC (link-layer address) issued against the io-sock stack could not be propagated to the per-DMA-channel L2 unicast filter. The new IPC closes that gap on NvSocket-enabled interfaces: io-sock detects an LLA mismatch at interface initialization and requests NvEthMgr to reprogram the unicast filter slot with the new MAC. Updates to the L2 broadcast filter are not supported through this IPC in 7.2.5.0; the broadcast filter continues to be programmed at interface initialization. Interfaces on which NvSocket is not enabled are unaffected by this change and continue to use the legacy in-driver L2 programming path.
Operational Constraint
The IPC is invoked from the io-sock interface-initialization path only, on NvSocket-enabled interfaces. Changing the MAC address through the ifconfig utility (or any equivalent) on an NvSocket-enabled interface is therefore recommended only before traffic is started or before the system is moved to the DVMS operational state. MAC address changes issued while such an interface is up and carrying traffic, or after the system has entered the DVMS operational state, are not propagated to the hardware filter and are not supported.
Steps to Migrate
Applications that enumerate
nvsocket_pulse_code_tvalues directly (for example, custom diagnostic or logging tools) should be recompiled against the 7.2.5.0 headers, because the numeric value ofNVSOCKET_PULSE_MAXhas shifted.To change the interface MAC on an NvSocket-enabled interface, use
ifconfig <iface> lladdr <new-mac>(or an equivalentSIOCSIFLLADDRrequest) before traffic is started or before the system is moved to the DVMS operational state.No source change is required for typical NvSocket client applications; the IPC is internal to the io-sock driver and the NvSocket server.
DMA Channel Bound Increase (OSI_MTL_MAX_NUM_QUEUES Renamed and Widened)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
In
|
No. Source changes are required. |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
Unifies queue/channel sizing across EQOS and MGBE on T234 and T264 and sizes the diagnostic-counter arrays for the maximum DMA channel count now supported on T264.
Steps to Migrate
Replace every reference to
OSI_MTL_MAX_NUM_QUEUESwithOSI_MAX_NUM_CHANS. Compile-time signal of this break:'OSI_MTL_MAX_NUM_QUEUES' undeclared.for (i = 0; i < OSI_MTL_MAX_NUM_QUEUES; i++) { handle(stats.rx_buf_unavail_irq_n[i]); }
becomes
for (i = 0; i < OSI_MAX_NUM_CHANS; i++) { handle(stats.rx_buf_unavail_irq_n[i]); }
Recompile every consumer of
struct osi_stats. Code that allocates, memcpys, or persistsosi_statsby hard-coded size must be rebuilt against the new layout.struct osi_stats s; for (i = 0; i < OSI_MTL_MAX_NUM_QUEUES; i++) total += s.rx_buf_unavail_irq_n[i];
becomes
struct osi_stats s; for (i = 0; i < OSI_MAX_NUM_CHANS; i++) total += s.rx_buf_unavail_irq_n[i];
Audit any IPC, file, or shared-memory boundary that carries
osi_stats. The struct grows silently — out-of-date readers will read past the new array bounds with no compiler diagnostic.
OSI Documentation Contract Refinements (tcindex, btr)#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Two field-level documentation contracts in
|
No. Documented value ranges changed; existing code outside the new bounds becomes non-conformant. |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
Traffic class index 0 is reserved (valid range is [1, OSI_MAX_TC_NUM-1]
inclusive). The base-time-register nanoseconds slot is bounded to one
second per the IEEE 802.1Qbv base-time representation.
Steps to Migrate
For
osi_core_avb_algorithm.tcindex: code that programmedtcindex = 0for a default/legacy traffic class must shift totcindex = 1or higher. Compile-time signal: none — this is a runtime contract violation.For
osi_est_config.btr: code that programmedbtr[0](nanoseconds) with values up toUINT32_MAXrelying on the old documented contract must now cap the nanoseconds field at 10^9.
Retired NvSocket Server-Configuration Public Surface#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
In
|
No. Source changes are required. |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
The nvsocket server configuration is now considered a private contract between nvsocket and its server process. Exposing the full callback function-pointer ABI through a public header was over-broad and coupled customers to internal driver-callback signatures. The nvsocket statistics retrieval process is unchanged from 6.x — it has always used the IPC path.
Steps to Migrate
Remove any reference to
ETHER_IOCTL_NVSOCKET_STATS. This was an unused macro in 6.x and was removed. Compile-time signal:'ETHER_IOCTL_NVSOCKET_STATS' undeclared.Remove every declaration, persistence, or read of
nvsocket_server_cfg_tand every reference to theFLAGS_*/DISABLE_UDP_OVER_IOPKTmacros.nvsocket_server_cfg_t cfg = { 0 }; cfg.flags = FLAGS_REUSEPORT_UNICAST | FLAGS_PERFECT_MATCH_MULTICAST; cfg.tx_callback_funcs.transmit = my_tx_cb;
becomes
/* nvsocket_server_cfg_t is no longer public. Server-side * configuration is now driven through device-tree properties and * the routed/nvsocketd internal control path; the FLAGS_* and * DISABLE_UDP_OVER_IOPKT macros have no replacement in the public * header. Refer to the nvsocket developer guide for the new * configuration mechanism. */
Compile-time signal of this break:
unknown type name 'nvsocket_server_cfg_t' / 'FLAGS_REUSEPORT_UNICAST' undeclared.For server-configuration introspection at runtime, refer to the nvsocket developer guide for the new configuration mechanism.
nvsocket_pulse_t Enum Reorganization#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
In
|
No. Persisted data / wire values may differ. |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
Decouples nvsocket pulses from QDP_PULSE_EXIT, retires the
UNBIND_KILLED_CLIENTS helper (folded into the regular
UNBIND_PID flow), and reserves stable integer codes for the new
SOCK-prefix and route-SHM pulses.
Steps to Migrate
Stop matching pulses by hard-coded integer code. Every symbolic pulse value used after the renumbering point now has a different integer code; numeric matching against 0 (for
EXIT) or 4 (for the removedUNBIND_KILLED_CLIENTSslot) silently selects a different pulse.MsgSendPulse(coid, prio, 0 /* NVSOCKET_PULSE_EXIT */, 0); ... case NVSOCKET_PULSE_UNBIND_KILLED_CLIENTS: cleanup_killed(); break;
becomes
MsgSendPulse(coid, prio, NVSOCKET_PULSE_EXIT, 0); /* NVSOCKET_PULSE_UNBIND_KILLED_CLIENTS is gone — handle the * killed-client path inside NVSOCKET_PULSE_UNBIND_PID instead. */
Compile-time signal of this break:
'NVSOCKET_PULSE_UNBIND_KILLED_CLIENTS' undeclared.Audit any persistence or wire format that carries pulse codes across a reboot or upgrade. Old persisted codes will not map to the same symbolic pulses on 7.2.5.0.