Local Retransmission

Napatech Link™ Software Features

Intel® PAC
Napatech SmartNIC
Feature Description

Local retransmission enables frames received on one or more network ports to be retransmitted to one network port on the same SmartNIC without involving the host CPU. The frames are transmitted locally on the SmartNIC without being transferred to the host memory.


Local retransmission can be used to daisy-chain SmartNICs (to avoid multiple taps) or to load-balance network processing between multiple host servers (spillover).


Note: Local retransmission does not apply to NT200A01 running at 2 × 100 Gbit/s.
Local retransmission is based on the filtering functionality (see Filtering). Capture and local retransmission are controlled by different recipes, and can be specified independently of each other. For example, a SmartNIC can be set up to locally retransmit frames from port 0 to port 1, while at the same time capturing all IP frames received on port 0.
Note: As usual for recipes (except for ColorMask), if more than one filter match the same frames, the recipe from the highest priority filter becomes the resulting recipe. Only one destination port can be specified in a local retransmission recipe. As a consequence, the same frames cannot be locally retransmitted to more than one destination port, while disjunct subsets of the frames can be locally retransmitted to different destination ports.

The latency from RX port to TX port is typically 5 µs.

Frames are retransmitted without any changes, except the FCS is recalculated.

It is possible to retransmit frames received at one line rate on a port running another line rate.

Local retransmission can be applied together with host-based transmission (see Host-Based Transmission) on all SmartNICs supporting both features. In case of oversubscription of a TX port, frames that are locally retransmitted are prioritized over frames from the host.


Local retransmission can lead to oversubscription of a TX port in a number of ways:
  • Local retransmission from a 10 Gbit/s source port to a 1 Gbit/s destination port.
  • Local retransmission from several source ports to the one destination port.
  • Simultaneous host transmission and local retransmission on the same port.
In case of oversubscription, locally retransmitted packets may be dropped. Such packet drops are counted by the TX dropEvents counter (see Port Counters).

Frames are retransmitted as soon as possible, there is no traffic control.

Due to the 5 µs latency from RX port to TX port, statistics read from downlink appliances is not synchronized with statistics read from the retransmitting appliance.

Local retransmission is only possible between ports on the same SmartNIC.
Note: Include a port test in the NTPL filter expression to exclude ports on other SmartNICs if multiple SmartNICs are installed in the host.
Received frames larger than 10,000 bytes are sliced to 10,000 bytes by the receive pipeline, and a new FCS will be calculated by the TX pipeline. If truncated frames are retransmitted, there is no way for downlink appliances to discover that these frames are erroneous.
Note: If truncated frames should not be locally retransmitted, exclude truncated frames from local retransmission with a Truncated error test in the NTPL filter expression.

Configuration interface

Local retransmission is configured using NTPL.

The legacy NTPL command Retransmit is supported with unchanged syntax for one source port and one destination port.

The NTPL command Assign can retransmit traffic from more than one port, and can embed a time stamp in retransmitted traffic.


In this NTPL example, SMTP traffic is retransmitted on one port, HTTP traffic is retransmitted on another, and the rest of the traffic is retransmitted on a third port, while everything is captured.

DefineMacro("mTcpSrcPort", "Data[DynOffset=DynOffTcpFrame;Offset=0;DataType=ByteStr2;DataMask=[15:0]]")
DefineMacro("mTcpPort_HTTP", "80")
DefineMacro("mTcpPort_SMTP", "25")

Assign[StreamId=0] = Port==0 # Capture all
Assign[Priority=0; DestinationPort=1] = (mTcpSrcPort == mTcpPort_SMTP AND Port==0 AND Truncated==False)
Assign[Priority=0; DestinationPort=2] = (mTcpSrcPort == mTcpPort_HTTP AND Port==0 AND Truncated==False)
Assign[Priority=10;DestinationPort=3] = Port==0 # The remaining traffic

This figure illustrates the example.

Various types of traffic are retransmitted on SMTP traffic is retransmitted on different ports, while all traffic is captured