GTPU LoadTest on VPP

55 views
Skip to first unread message

Christopher Adigun

unread,
Feb 19, 2025, 10:55:37 PMFeb 19
to TRex Traffic Generator
Hi,

I  am currently trying to use the sample reference http_simple to load test GTPU protocol that is running in VPP.

My trex_cfg:

- port_limit: 2
  version: 2
  interfaces: ['0000:00:10.0', '0000:00:11.0']
  port_bandwidth_gb: 25
  port_info:
    - ip: 192.168.1.100
      default_gw: 192.168.1.200
    - ip: 192.168.2.100
      default_gw: 192.168.2.200
  platform:
    master_thread_id: 0
    latency_thread_id: 1
    dual_if:
      - socket: 0
        threads: [2,3,4,5]

VPP config:

set interface state dpdk0 up
set interface state dpdk1 up

set interface ip address dpdk0 192.168.1.200/24
set interface ip address dpdk1 192.168.2.200/24

create gtpu tunnel src 192.168.1.200 dst 192.168.1.100 teid 1000 decap-next ip4
create gtpu tunnel src 192.168.1.200 dst 192.168.1.100 teid 1001 decap-next ip4

set interface ip address gtpu_tunnel0 16.0.0.1/32
set interface ip address gtpu_tunnel1 16.0.0.2/32
ip route add 48.0.0.0/8 via 192.168.2.100

On VPP I can see the GTPU packets getting de-encapsulated (see sample attached gtpu_packet_sent_to_vpp_from_trex.txt)  and then sending the IP packets destined for  48.0.0.0 range back to the second interface on Trex but Trex is now sending traffic bound for 16.0.0.1 and 16.0.0.2 back to VPP without encapsulating it in GTPU.

Following is my  trex gtpu topo:

from trex.astf.api import *
from trex.astf.tunnels_topo import TunnelsTopo

def get_topo():
    topo = TunnelsTopo()

    topo.add_tunnel_ctx(
        src_start = '16.0.0.1',
        src_end  = '16.0.0.2',
        initial_teid = 1000,
        teid_jump = 1,
        sport = 5000,
        version = 4,
        tunnel_type = 1,
        src_ip = '192.168.1.100',
        dst_ip = '192.168.1.200',
        activate = True
    )

    return topo

And http_simple script:

from trex.astf.api import *
import argparse


class Prof1():
    def __init__(self):
        pass

    def get_profile(self, tunables, **kwargs):
        parser = argparse.ArgumentParser(description='Argparser for {}'.format(os.path.basename(__file__)),
                                         formatter_class=argparse.ArgumentDefaultsHelpFormatter)

        args = parser.parse_args(tunables)
        # ip generator
        ip_gen_c = ASTFIPGenDist(ip_range=["16.0.0.1", "16.0.0.2"], distribution="seq")
        ip_gen_s = ASTFIPGenDist(ip_range=["48.0.0.1", "48.0.0.10"], distribution="seq")
        ip_gen = ASTFIPGen(glob=ASTFIPGenGlobal(ip_offset="1.0.0.0"),
                           dist_client=ip_gen_c,
                           dist_server=ip_gen_s)

        return ASTFProfile(default_ip_gen=ip_gen,
                            cap_list=[ASTFCapInfo(file="../avl/delay_10_http_browsing_0.pcap",
                            cps=2.776)])


def register():
    return Prof1()


Need help to know what could be wrong, I don't think the issue is with the VPP as I can  see the GTPU packets coming from trex.

I have attached the trace from  VPP (see attached  trex_return_packet_to_vpp.txt) that shows trex sending the 48.0.0.x traffic directly back without GTPU encapsulation, since VPP can't process 16.0.0.x traffic without GTPU encapsulation it shows up  as an error.

Thanks
trex_return_packet_to_vpp.txt
gtpu_packet_sent_to_vpp_from_trex.txt

Christopher Adigun

unread,
Feb 20, 2025, 2:53:29 PMFeb 20
to TRex Traffic Generator
Apologies this looks more  like incomplete VPP GTPU config for  the  return traffic.

I will continue with resolving how to  fix the VPP config.

Thanks

Reply all
Reply to author
Forward
0 new messages