diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-03-24 02:30:32 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-03-24 12:48:38 -0700 |
commit | ddb94eafab8b597b05904c8277194ea2d6357fa9 (patch) | |
tree | bc1e973139f23b2cc2ab62af919b58fb2a9e7cf3 /net/8021q | |
parent | ad248f7761eb9a3ff9ba2a8c93b548600185a938 (diff) | |
download | linux-rpi-ddb94eafab8b597b05904c8277194ea2d6357fa9.tar.gz linux-rpi-ddb94eafab8b597b05904c8277194ea2d6357fa9.tar.bz2 linux-rpi-ddb94eafab8b597b05904c8277194ea2d6357fa9.zip |
net: resolve forwarding path from virtual netdevice and HW destination address
This patch adds dev_fill_forward_path() which resolves the path to reach
the real netdevice from the IP forwarding side. This function takes as
input the netdevice and the destination hardware address and it walks
down the devices calling .ndo_fill_forward_path() for each device until
the real device is found.
For instance, assuming the following topology:
IP forwarding
/ \
br0 eth0
/ \
eth1 eth2
.
.
.
ethX
ab:cd:ef:ab:cd:ef
where eth1 and eth2 are bridge ports and eth0 provides WAN connectivity.
ethX is the interface in another box which is connected to the eth1
bridge port.
For packets going through IP forwarding to br0 whose destination MAC
address is ab:cd:ef:ab:cd:ef, dev_fill_forward_path() provides the
following path:
br0 -> eth1
.ndo_fill_forward_path for br0 looks up at the FDB for the bridge port
from the destination MAC address to get the bridge port eth1.
This information allows to create a fast path that bypasses the classic
bridge and IP forwarding paths, so packets go directly from the bridge
port eth1 to eth0 (wan interface) and vice versa.
fast path
.------------------------.
/ \
| IP forwarding |
| / \ \/
| br0 eth0
. / \
-> eth1 eth2
.
.
.
ethX
ab:cd:ef:ab:cd:ef
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q')
0 files changed, 0 insertions, 0 deletions