Topics

how to set environment to run xdp_redirect_map.py example?

forrest0579@...
 

Hi all,
What kind of network topology should I set up to make xdp_redirect_map.py runnable and what user-case this example represent for? 

PS: I have the same question about xdp_macswap_count.py too

Thanks for helping me!
Forrest

Gary Lin
 

On Tue, May 28, 2019 at 07:32:33PM -0700, forrest0579@... wrote:
Hi all,
What kind of network topology should I set up to make xdp_redirect_map.py runnable and what user-case this example represent for?
The script does nothing really meaningful but demostrates how to use
XDP_REDIRECT.

It redirects all traffic from one network interface to another, so you
need a machine with at least two XDP-enabled network interfaces. When you
send a packet from eth0 of Machine B to eth0 of Machine A, the script
swaps the src IP and dst IP of the incoming packets and sends them out
through eth1 of Machine A, so the packets will flow like this:

(Machine A) (Machine B)
[ eth0 ]<------[ eth0 ]
| ^
v |
[ eth1 ] ---------+

The script also counts the number of packet processed per second as a
rough performance measurement for XDP_REDIRECT, so you can generate a
huge volume of traffic with the programs like trafgen in Machine B to
do the test.

Cheers,

Gary Lin

PS: I have the same question about xdp_macswap_count.py too

Thanks for helping me!
Forrest


forrest0579@...
 

On Tue, May 28, 2019 at 09:20 PM, Gary Lin wrote:
On Tue, May 28, 2019 at 07:32:33PM -0700, forrest0579@... wrote:
Hi all,
What kind of network topology should I set up to make xdp_redirect_map.py runnable and what user-case this example represent for?
The script does nothing really meaningful but demostrates how to use
XDP_REDIRECT.

It redirects all traffic from one network interface to another, so you
need a machine with at least two XDP-enabled network interfaces. When you
send a packet from eth0 of Machine B to eth0 of Machine A, the script
swaps the src IP and dst IP of the incoming packets and sends them out
through eth1 of Machine A, so the packets will flow like this:

(Machine A) (Machine B)
[ eth0 ]<------[ eth0 ]
| ^
v |
[ eth1 ] ---------+

The script also counts the number of packet processed per second as a
rough performance measurement for XDP_REDIRECT, so you can generate a
huge volume of traffic with the programs like trafgen in Machine B to
do the test.

Cheers,

Gary Lin

PS: I have the same question about xdp_macswap_count.py too

Thanks for helping me!
Forrest




These two examples swap mac instead of IP address.
And as an effect with the given topology, the egress package from MachineA-eth1 has dst mac of MachineB-eth0 and src mac of MachineA-eth0, dst IP of MachineA and src IP of MachineB. Assume that due to the dst mac, the package finally delivered back to MachineB, but the dst IP does not match the IP in MachineB.  I have no idea in which kind of topology the package could be consumed.

Another question, after swap mac, shouldn't we re-calculate the l2 csum? or if I modify that field like src/dst IP/Port, how can I re-calculate these csum? Does BPF_FUNC_csum_diff helper function work for this?

Thanks

Forrest

Gary Lin
 

On Wed, May 29, 2019 at 12:04:53AM -0700, forrest0579@... wrote:
On Tue, May 28, 2019 at 09:20 PM, Gary Lin wrote:


On Tue, May 28, 2019 at 07:32:33PM -0700, forrest0579@... wrote:

Hi all,
What kind of network topology should I set up to make xdp_redirect_map.py
runnable and what user-case this example represent for?
The script does nothing really meaningful but demostrates how to use
XDP_REDIRECT.

It redirects all traffic from one network interface to another, so you
need a machine with at least two XDP-enabled network interfaces. When you
send a packet from eth0 of Machine B to eth0 of Machine A, the script
swaps the src IP and dst IP of the incoming packets and sends them out
through eth1 of Machine A, so the packets will flow like this:

(Machine A) (Machine B)
[ eth0 ]<------[ eth0 ]
| ^
v |
[ eth1 ] ---------+

The script also counts the number of packet processed per second as a
rough performance measurement for XDP_REDIRECT, so you can generate a
huge volume of traffic with the programs like trafgen in Machine B to
do the test.

Cheers,

Gary Lin


PS: I have the same question about xdp_macswap_count.py too

Thanks for helping me!
Forrest


These two examples swap mac instead of IP address.
And as an effect with the given topology, the egress package from MachineA-eth1 has dst mac of MachineB-eth0 and src mac of MachineA-eth0, dst IP of MachineA and src IP of MachineB. Assume that due to the dst mac, the package finally delivered back to MachineB, but the dst IP does not match the IP in MachineB.  I have no idea in which kind of topology the package could be consumed.
Sorry, my memory betrayed me. Those two scripts swap the mac, not IP.
As I said, xdp_redirect_map.py is a demo script, so it doesn't care if
the packets are dropped in Machine B or not. In the real world, users
of XDP_REDIRECT usually modify the IP address or prepend a header
with bpf_xdp_adjust_head(), so that those packets can be passed further.

Another question, after swap mac, shouldn't we re-calculate the l2 csum? or if I modify that field like src/dst IP/Port, how can I re-calculate these csum? Does BPF_FUNC_csum_diff helper function work for this?
AFAIK, the frame checksum is calculated by the network card, so we don't
have to do the calculation.

Cheers,

Gary Lin

forrest0579@...
 

Thanks a lot, Gary!

Very appreciate for your answer.

Forrest