In comparison to conventional forwarding, relaying requires an additional lookup of the next forwarding component in the context of the virtual interface to which the packet is mapped with the (SA,DA) lookup. A hardware implementation may add an additional lookup resource to handle this or simply perform two lookups on the same memory, depending on the speed of this memory and the forwarding performance requirements. We expect initial hardware implementations may restrict the foffset they will support, throwing packets with larger values to software.
Multicast relaying uses additional state in the forwarding path but is the same implementation and performance.
Our Linux implementation of WRAP added about 1,500 lines of code
as a kernel module
and incurred an extra 2.2 microsecond overhead
(or 2.6 percent) for relaying compared to conventional IP
forwarding.
Thus, the complexity is minimal for either software or hardware,
and the software performance overhead is minimal,
and comparable to that required for NAT forwarding.