Local Retransmission

Feature Set N-ANL10

Platform
Napatech SmartNIC
Content Type
Feature Description
Capture Software Version
N-ANL10

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

Purpose

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

Features

Note: Local retransmission does not apply to NT200A01-2×100 nor to NT200A01-2×100/40 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, an accelerator 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 highest priority filter becomes the resulting recipe. Currently, 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 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.

Local retransmission can be applied together with host-based transmission (see Host-Based Transmission) on all accelerators supporting both features. Local retransmission is prioritized over host based transmission.

Limitations

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 are 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 accelerator.
Note: In case multiple accelerators are installed in the host, include a port test in the NTPL filter expression to exclude ports on other accelerators.
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 tell that these frames are in error.
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

The local retransmission functionality is configured using NTPL.

The legacy NTPL command Retransmit is supported with unchanged syntax: 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.

Example

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.