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
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 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.
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.
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.