Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stl: pass client object to loaded python profiles #1163

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

rjarry
Copy link
Contributor

@rjarry rjarry commented Feb 24, 2025

Pass an extra "client" argument to the get_streams() method of python traffic profiles. This allows profiles to dynamically resolve destination mac addresses using the ARP and IPv6ND services.

Add an example l3.py profile that supports both IPv4 and IPv6 left/right addresses and gateways.

Example IPv4:

$ ./ndr --stl --ports 0 1 --force-map --bi-dir --opt-bin-search \
   --profile stl/l3.py --prof-tun \
   left-ip=172.16.0.1,left-gw=172.16.0.254,right-ip=172.16.1.1,right-gw=172.16.1.254

ARP: ---> who has '172.16.0.254' ? tell '172.16.0.1'
ARP: <--- '172.16.0.254 is at '30:3e:a7:0b:ea:78'
ARP: ---> who has '172.16.1.254' ? tell '172.16.1.1'
ARP: <--- '172.16.1.254 is at '30:3e:a7:0b:ea:79'

Bench Run has finished :-)

{'BW per core [Gbit/sec @100% per core]': '32.16Gbit/Sec @100% per core',
 'CPU Utilization [%]': '2.79',
 'Drop Rate [%]': '0.0',
 'Elapsed Time [Sec]': '175.27',
 'Line Utilization [%]': '23.57',
 'Max Rate [bps]': '16.8 Gbps',
 'NDR points': ['8.98 Gbps'],
 'OPT RX Rate [bps]': '4.49 Gbps',
 'OPT Rate (Multiplier) [%]': '26.804407187098942',
 'OPT TX Rate [bps]': '4.49 Gbps',
 'Queue Full [%]': '0.0%',
 'RX [MPPS]': '17.54 MPPS',
 'RX [bps]': '8.98 Gbps',
 'TX [MPPS]': '17.54 MPPS',
 'TX [bps]': '8.98 Gbps',
 'Title': 'l3',
 'Total Iterations': 1,
 'Total RX L1': '11.78 Gbps',
 'Total TX L1': '11.78 Gbps',
 'latency': {},
 'valid_latency': True}

Example IPv6:

$ ./ndr --stl --ports 0 1 --force-map --bi-dir --opt-bin-search \
   --profile stl/l3.py --prof-tun \
   left-ip=fd00:f00::1,left-gw=fd00:f00::254,right-ip=fd00:ba4::1,right-gw=fd00:ba4::254

ND: TX NS: fd00:f00::1,30:3e:a7:0b:f2:54 -> fd00:f00::254 (retry 0)
ND: RX NA: fd00:f00::1 <- fd00:f00::254, 30:3e:a7:0b:ea:78
ND: TX NS: fd00:ba4::1,30:3e:a7:0b:f2:55 -> fd00:ba4::254 (retry 0)
ND: RX NA: fd00:ba4::1 <- fd00:ba4::254, 30:3e:a7:0b:ea:79

Bench Run has finished :-)

{'BW per core [Gbit/sec @100% per core]': '49.99Gbit/Sec @100% per core',
 'CPU Utilization [%]': '1.47',
 'Drop Rate [%]': '0.05',
 'Elapsed Time [Sec]': '280.44',
 'Line Utilization [%]': '19.17',
 'Max Rate [bps]': '18.63 Gbps',
 'NDR points': ['7.35 Gbps'],
 'OPT RX Rate [bps]': '3.68 Gbps',
 'OPT Rate (Multiplier) [%]': '19.79566845228384',
 'OPT TX Rate [bps]': '3.68 Gbps',
 'Queue Full [%]': '0.0%',
 'RX [MPPS]': '13.92 MPPS',
 'RX [bps]': '7.35 Gbps',
 'TX [MPPS]': '13.93 MPPS',
 'TX [bps]': '7.35 Gbps',
 'Title': 'l3',
 'Total Iterations': 4,
 'Total RX L1': '9.58 Gbps',
 'Total TX L1': '9.58 Gbps',
 'latency': {},
 'valid_latency': True}

Pass an extra "client" argument to the get_streams() method of python
traffic profiles. This allows profiles to dynamically resolve
destination mac addresses using the ARP and IPv6ND services.

Add an example l3.py profile that supports both IPv4 and IPv6 left/right
addresses and gateways.

Example IPv4:

$ ./ndr --stl --ports 0 1 --force-map --bi-dir --opt-bin-search \
   --profile stl/l3.py --prof-tun \
   left-ip=172.16.0.1,left-gw=172.16.0.254,right-ip=172.16.1.1,right-gw=172.16.1.254

ARP: ---> who has '172.16.0.254' ? tell '172.16.0.1'
ARP: <--- '172.16.0.254 is at '30:3e:a7:0b:ea:78'
ARP: ---> who has '172.16.1.254' ? tell '172.16.1.1'
ARP: <--- '172.16.1.254 is at '30:3e:a7:0b:ea:79'

Bench Run has finished :-)

{'BW per core [Gbit/sec @100% per core]': '32.16Gbit/Sec @100% per core',
 'CPU Utilization [%]': '2.79',
 'Drop Rate [%]': '0.0',
 'Elapsed Time [Sec]': '175.27',
 'Line Utilization [%]': '23.57',
 'Max Rate [bps]': '16.8 Gbps',
 'NDR points': ['8.98 Gbps'],
 'OPT RX Rate [bps]': '4.49 Gbps',
 'OPT Rate (Multiplier) [%]': '26.804407187098942',
 'OPT TX Rate [bps]': '4.49 Gbps',
 'Queue Full [%]': '0.0%',
 'RX [MPPS]': '17.54 MPPS',
 'RX [bps]': '8.98 Gbps',
 'TX [MPPS]': '17.54 MPPS',
 'TX [bps]': '8.98 Gbps',
 'Title': 'l3',
 'Total Iterations': 1,
 'Total RX L1': '11.78 Gbps',
 'Total TX L1': '11.78 Gbps',
 'latency': {},
 'valid_latency': True}

Example IPv6:

$ ./ndr --stl --ports 0 1 --force-map --bi-dir --opt-bin-search \
   --profile stl/l3.py --prof-tun \
   left-ip=fd00:f00::1,left-gw=fd00:f00::254,right-ip=fd00:ba4::1,right-gw=fd00:ba4::254

ND: TX NS: fd00:f00::1,30:3e:a7:0b:f2:54 -> fd00:f00::254 (retry 0)
ND: RX NA: fd00:f00::1 <- fd00:f00::254, 30:3e:a7:0b:ea:78
ND: TX NS: fd00:ba4::1,30:3e:a7:0b:f2:55 -> fd00:ba4::254 (retry 0)
ND: RX NA: fd00:ba4::1 <- fd00:ba4::254, 30:3e:a7:0b:ea:79

Bench Run has finished :-)

{'BW per core [Gbit/sec @100% per core]': '49.99Gbit/Sec @100% per core',
 'CPU Utilization [%]': '1.47',
 'Drop Rate [%]': '0.05',
 'Elapsed Time [Sec]': '280.44',
 'Line Utilization [%]': '19.17',
 'Max Rate [bps]': '18.63 Gbps',
 'NDR points': ['7.35 Gbps'],
 'OPT RX Rate [bps]': '3.68 Gbps',
 'OPT Rate (Multiplier) [%]': '19.79566845228384',
 'OPT TX Rate [bps]': '3.68 Gbps',
 'Queue Full [%]': '0.0%',
 'RX [MPPS]': '13.92 MPPS',
 'RX [bps]': '7.35 Gbps',
 'TX [MPPS]': '13.93 MPPS',
 'TX [bps]': '7.35 Gbps',
 'Title': 'l3',
 'Total Iterations': 4,
 'Total RX L1': '9.58 Gbps',
 'Total TX L1': '9.58 Gbps',
 'latency': {},
 'valid_latency': True}

Signed-off-by: Robin Jarry <robin@jarry.cc>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant