I’m experimenting with creating a p4 application that forwards packets to a different destination based on table entries set by a custom c/c++ application.
The p4 program is here: rtpengine/test-dpu-offload/p4/softdpu.p4 at dpu_offload · oshlabs/rtpengine · GitHub
It allows the table entries to be set as is described here: rtpengine/test-dpu-offload/p4/README.md at dpu_offload · oshlabs/rtpengine · GitHub
So this all works when I’m using the regular simple_switch and manipulating the table using simple_switch_CLI.
I’m now trying to populate the tables over GRPC using p4runtime with the program that’s located here: rtpengine/test-dpu-offload/p4runtimeclient at dpu_offload · oshlabs/rtpengine · GitHub
But if I run it as it is there, the simple_switch_grpc segfaults.
It doesn’t segfault if I comment out this line: rtpengine/test-dpu-offload/p4runtimeclient/p4runtime_client_wrapper.cpp at dpu_offload · oshlabs/rtpengine · GitHub
But then I get the following error:
Failed to insert table entry: No forwarding pipeline config set for this device
Does anyone know what I’m doing wrong?
Wondering if it’s correct to push the literal JSON here:
I made a pcap of the p4runtime/grpc traffic going over the wire, it can be found here: rtpengine/test-dpu-offload/simple_switch_grpc_crash.pcap at dpu_offload · oshlabs/rtpengine · GitHub
I see the whole JSON is sent (frame 9, 10, 12 [large MTU therefore fits in so few packets]).
But not sure how to further interpret this and whether it’s correct what’s being sent.
I tried recompiling simple_switch_grpc with
ulimit -c unlimited and analyze the coredump in GDB, but getting some weird errors like:
warning: core file may not match specified executable file.
warning: Section .reg-xstate/1058446 in core file too small.
- of course nothing in the backtrace after that
while I’m sure the binary executable is the same while running vs what’s passed to GDB.
I think I will try to:
- use another tool to interface with the simple_switch_grpc to see if that works (i believe there is some python/shell thing that uses grpc?)
- try to lookup more examples to see how the
SetForwardingPipelineConfig() is being used…
Hope someone has a hint, thanks
Alright! I was just experimenting a bit, and I can prevent the segfault if I do
VERIFY_AND_COMMIT instead of
When doing the insert I don’t get the
No forwarding pipeline config set for this device error anymore… Just an empty error:
Failed to insert table entry: … anyway progress
– ah the simple_switch_grpc logs
[P4Runtime] Invalid P4 id
last bits with Invalid P4 id also fixed I now have a functional p4runtime_client