P4lang bmv2

Last UpdatedMarch 5, 2024

by

Anthony Gallo Image

ipc) are still empty when I connect to the socket. " GitHub is where people build software. insecure_channel ( 'localhost:50051' ) Sep 17, 2018 · BMv2是一個交換機模擬引擎,和p4-factory不同,不依靠代碼生成,而是根據p4c-bm編譯生成的JSON動態生效。 安裝: 因爲之前安裝了p4-factory,所以相關軟件可能已經安裝好,如果缺東西,請參考github Apr 16, 2023 · Getting Started with P4. All bmv2 target switches take as input a JSON file, whose format is essentially target independent. Jun 21, 2018 · I am doing a simple digest test with bmv2-ss and the V1model, and calling the digest() extern causes the bmv2 switch to crash after the first packet it sees. They all said that if I want to use multiple priority queues, I have to uncomment the BMv2 JSON input format. • Modification of bm_runtime. p4. The P4 architecture file for this switch is v1model. Sep 5, 2023 · Hi everybody. Usage: break <p4 object type> <p4 object name> For example, Sets a breakpoint on a given P4 object. basically every stateful ALU is one or a pair of values of type bit<W>, and in v1model architecture code you would call read first, do whatever modifications are required, then write back the modified Introduction. 0 326 43 (2 issues need help) 6 Updated 3 days ago. The bmv2 framework lets developers implement their own P4-programmable architecture as a software switch. There are install scripts in this repository that can assist you in building and installing the p4c and behavioral-model projects and their dependencies on some recent versions of Ubuntu or Fedora Linux systems. The GitHub tutorials contained in that repository for ipv4 were incredibly helpful ( also Andy’s help ) and Oct 14, 2019 · Install the P4 software switch. Initially the P4 INT code was developped only for bmv2 but later on it was also adapted for Tofino switches. PI is built with . There are many options to compile and run a new P4 project with Bmv2. proto) files and accompanying documentation. There are currently 2 P4 compilers available for bmv2 on p4lang: \n p4c includes a bmv2 backend and is the\nrecommended compiler to use, as it supports both P4_14 and P4_16\nprograms. P4 1,293 Apache-2. There are command line options to simple_switch_CLI --thrift-ip and --thrift-port that directs it Jan 24, 2018 · Running iperf measurement 5 of 5. Jun 21, 2018 · It began as an issue with the p4c compiler that is now fixed: p4lang/p4c#1352. Apr 30, 2015 · P4 language tutorials. It executes normally : mkdir -p build pcaps logs p4c-bm2-ss --p4v 16 --p4runtime-files build/basic. 916 Mbps. g. I’ve been using: GitHub - p4lang/tutorials: P4 language tutorials as a source for examples and tutorials to learn/practice writing P4 code and testing it in a virtual network through Mininet. Noa Zilberman and Prof. I am using a header stack in v1model p4-16 code. This should give you the "correct" latency. I have outlined few changes to make PNA integration possible: • Updates to context. Tofino is a proprietary product, so I think you should address this question to the vendor. Feb 8, 2022 · Some digging leads me to this page that shows the p4lang-bmv2 deb package fa I&#39;ve been trying to set up the environment for the P4 tutorials but this script would fail with this error: Package &#39;p4lang-bmv2&#39; has no installation candidate. py build install --prefix <your_path> [--single-version-externally-managed] --record install_files. bmv2 is not meant to be a production-grade software switch. It is a set of APIs that enable configuration and management of P4 programmable and fixed functions of a backend device in a uniform and dynamic way. The format is very simple and several examples can be found in this repository, including here. @walliak one idea for you is to reduce the buffer size for your veth interfaces as much as possible. /configure --with-bmv2 --with-proto --with-cli --with-sysrepo and the python libraries generated have been installed on the host. If the value is compile-time constant it's easy to implement this, but if it is variable we have to implement a parser loop. As far as I know, in order to send packets to the CPU, I just need to forward packets to the egress port that corresponds to the CPU port specified in the --cpu port argument when running the bmv2 switch. To make the process more convenient, we provide a wrapper script, which takes care of running the docker (including mounting the P4Info and binary device config files in the docker if needed): Mar 12, 2021 · edited. #1146. p4info. Refer to the README for information on how to install and use p4c. Please make sure that you compile bmv2 with O2 and without logging (. The index into the header stack array is obtained from a header in the packet and index copied to metadata. The program used for the benchmark (simple_router. Unlike in the original behavioral-model code (p4c-behavioral), the data plane and the application run in 2 different processes, and you will have to run these 2 processes (first the switch, then the application) before running the tests. if we run the ECN exercise as it is, the BMv2 queue size is 64 by default for all output ports but when I check the link qdisc ( tc -s qdisc show) I can see that the queue limit set here is 1000. json) are under /tmp/. ipc to enable forwarding of notifications to the address that the learn_client is listening on. The P4_16 language has been designed such that there can be multiple Nov 24, 2019 · I installed onos2. Deprecated P4. 8-202006020517-822a0d1~ubuntu18. Contribute to p4lang/behavioral-model development by creating an account on GitHub. This is proving to be difficult, because We would like to show you a description here but the site won’t allow us. 0-rc1-202006191103-3917a1c~ubuntu18. by adjusting bmv2 internal queue sizes. For example, the end-hosts don't respond to ICMP request even when packets correctly reach the interface. 1. You can find my p4 code there. Wes Armour. For example, last spring, @jafingerhut and I, neither of whom were core Bmv2 developers, advised a group of students who were new to P4 or Bmv2 at the beginning of the project P4Lang BMv2 V1Model target: It is the P4Lang virtual model that emulates a PISA architecture. May 23, 2022 · It could be implemented, of course, but would require some changes to the C++ code of BMv2, and if you wanted each pipeline to be a separate copy of the counter/meter/register and P4 table state, you would also need changes to the control plane API to make it appear that way to the control plane software. counters, meters), which were P4_14 built-in objects, are supported "natively" by bmv2. At the moment, the bmv2 p4c backend supports the v1model architecture, with some tentative support There are currently 2 P4 compilers available for bmv2 on p4lang: \n p4c includes a bmv2 backend and is the\nrecommended compiler to use, as it supports both P4_14 and P4_16\nprograms. The software switch is written in C++11. Apr 23, 2019 · Why? Because the BMv2 v1model implementation preserves the state of all header variables from the end of ingress to the beginning of egress for unicast packets (also for multicast, and I believe also for ingress-to-egress cloned packets). Obviously, the header is parsed in the parser. The p4-16 spec has a method on packet_in called advance which takes a 32-bit number. p4c -b bmv2 test. github. The behavior for 'const entries' table entry order has now been added to the latest draft PSA specification, and I can make similar changes to the docs for v1model in BMv2 simple_switch to match. This choice is being made by the compiler and included in the JSON (I believe for historical reasons), but really there should be nothing preventing bmv2 to make that decision Bear in mind that compilation of a P4 code with P4Runtime support to software switch target can be done as follows: Obtain/create image: sudo docker build -t <image_name> -f Dockerfile. For any tables that should be applied while processing a packet, they are all processed sequentially. P4 is a language for programming the data plane of network devices. Sep 6, 2021 · bmv2 does all data packet processing on a general purpose CPU, not on RMT-style hardware. It makes system calls, e. bmv2 can perform ingress processing in parallel for different packets from different input ports, in separate threads Jul 23, 2019 · Adding new externs to Bmv2 and P4c is a non-trivial task. p4lang. It should be straightforward to translate Tofino register access code by hand into code that works on the v1model architecture for BMv2. In this page, we only describe the easiest way to start a new P4 project. I tried the GitHub - cslev/p4-bmv2-docker: P4 BMV2 docker container and Docker bmv2 containers, but it doesn’t have instructions about how the architecture should be deployed. bmv2框架允许开发人员将自己的P4可编程体系结构实现为软件交换机。. Sep 1, 2016 · --notifications-addr ipc:///tmp/bmv2-0-notifications. resubmit_flag. I plan on measuring this using the difference between the ingress_global_timestamp readings when the packet reaches the two switches. So my question is, are these two queues independent from each other Jul 22, 2020 · dpkg -l | grep p4lang ii bmv2 1. This switch is also known as the “behavioral model version 2 (BMV2)” or as “simple_switch”. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects. to join this conversation on GitHub . This document provides a precise definition of the P4Runtime API. bmv2 which contains a file test. IMPLEMENTING YOUR SWITCH TARGET WITH BMv2. org website. For example, assigning an IP address to such an interface will not communicate any information about that IP address to BMv2, or to any control software adding table entries to the BMv2 process. A Switch instance can have several Context objects, and each Context instance can run a different P4 program. Nov 4, 2023 · Normally when debugging P4 code with the BMv2 software switch, you want to generate the detailed trace logs, and sometimes you also want to record pcap files of all packets arriving to switches on input ports, and all packets sent by the switch on output ports. Oct 8, 2018 · Hi @antoninbas, I want to try multicast and clone function on the bmv2, but the description about multicast and clone in the p4runtime spec is based on the PSA arch, while the simple_switch target is on the top of v1model, so I want to confirm whether bmv2 supports these functions and how to use. Try p4c-bmv2 -h--json to generate a JSON representation of the P4 program--pd to generate the PD C++ code--p4-v1. Jan 6, 2023 · ThePuriProdigy January 6, 2023, 8:21am 1. 04. RuntimeCmd: mc_mgrp_create 1113. Oct 20, 2020 · Saved searches Use saved searches to filter your results more quickly Apr 17, 2024 · After using the Tsan tool on our tests with a simple grpc service with a BMV2 JSON config passed in with the command line arguments, I noticed that it resulted in some flaky tests with race conditions. bmv2. TDI (Table Driven Interface) is a Target Abstraction Interface. BEHAVIORAL MODEL (bmv2) This is the second version of the reference P4 software switch, nicknamed bmv2 (for behavioral model version 2). Dec 22, 2018 · It is physically possible to configure an IP address to such an interface, but I doubt it will achieve whatever effect it normally would. Oct 14, 2019 · In the commands below, the -b option selects bmv2 (Behavioral Model Version 2) as the target, which is the software switch that we will use to run the P4 program. Clone the P4 behavioral model model GitHub repo: cd. • Add PNA specification file pna. We will update this list as more features get supported in the bmv2 compiler backend and as we discover more issues. Every time a packet is about to "enter" this object, the switch will pause and the debugger will be notified. See these instructions and trouble-shooting tips for using these scripts. I’ve read the BMv2 Simple Switch article and also looked into the multiqueuing. io Public. Mar 4, 2019 · Successfully merging a pull request may close this issue. This guide and the accompanying doxygen documentation are targetted at developpers that wish to design their own switch model using the building blocks exposed by bmv2. This repository contains P4 code implementing the INT data plane functionality. P4. Jun 22, 2021 · BMv2 runs completely in user space. --use-files 0 causes simple_switch to read packets from . I see the packet size is strange at bmv2:3. Mar 19, 2021 · I'm working on a setup using FOP4 to deploy two containers connected with a BMV2 switch. egress_global_timestamp at the beginning of egress, at least for a packet received from an input port and then sent via unicast Mar 18, 2017 · Because bmv2 has a low throughput, I recommend rate-limiting your links to < 100Mbps. Add port operation failed. In this github, we teach you how to get your own mininet running p4 code with multiple queues inside BMv2. h, packet. Programmable Blocks - Parser, Pipeline, Deparser, etc. bmv2 has the notion of Context, which I imagine is somewhat similar to the notion of pipeline. so I try to use the hash function defined in v1model. May 19, 2018 · I'm not sure I understand the "pipeline"part of the question, as it is not very specific. h in the include/bm_runtime directory. The project aims to integrate different pieces of software related to these building blocks: control plane. Nov 23, 2019 · Support for log_msg was finalized in p4c & bmv2 in October 2019, so if you are using the tutorials VM (which is only updated about twice a year and therefore often contains older version of the software), you may not have access to it for now. 1 if your input program is a P4 v1. I'm using the basic forwarding example in p4lang/tutorials, but simplified to use just one switch instead of four. 3 participants. 说明:翻译自 The BMv2 Simple Switch target ,学习自用. 04 run the following: Keep in mind that the owner of the key may distribute updates, packages and repositories that your system will trust (more information). h) in the include/bm_sim directory. How can I use onos to control BMV2? What command should I use to complete the connection between onos and BMV2? Jun 15, 2021 · The same program works with BMV2 in a VM with two VM end-hosts. This is the repository of the open-source p4c compiler, which does not directly support Tofino (it may be used by the Tofino compiler, but we have no way of knowing this). However, the nanomsg notifications ( ipc:///tmp/bmv2-<device-id>-notifications. 0-202006160902-d447b6a~ubuntu18. pcap files instead of sniffing them on virtual Ethernet interfaces, and to write output packets to Created this PR for the P4_16 language spec, following Chris Dodd's suggestion above: p4lang/p4-spec#738. Assuming bmv2 is installed on your system, build the PI and the CLI with . While running this example load_banlance, it use this hash function: PTF is a Python based dataplane test framework. p4 example. explicit transition to reject in parse state. The code I'm using is as follows: channel = grpc. packets captured at IperfClient:eth0 are all the of size 1514 while at bmv2:3 the size of captured packets varies as 7306,1514,2962 during the life time of connection. I had a question recently where someone asked me how to run a tutorial in the GitHub - p4lang/tutorials: P4 language tutorials run-bmv2-test. The P4Runtime API is a control plane specification for controlling the data plane elements of a device or program defined by a P4 program. I can receive Because these two functions have been implemented in the bmv2 PI implementation, you can test the PI CLI with the bmv2 simple_switch. This documents attempt to describe the expected JSON schema and the constraints on each attribute. p4 program using the new behavioral-model code, which we call bmv2. Building a P4 target with BMv2. It is meant to replace the original version, p4c-behavioral, in the long run, although we do not have feature equivalence yet. 对于大多数用户而言,simple_switch体系结构是事实上的体系结构,因为它大致等效于 P4_14规范中 描述的“抽象交换机模型 Apr 8, 2022 · I have installed the p4 and behavior model as mentioned on tutorial. This can be explained by 1) burstiness of the traffic source, 2) variability in how fast bmv2 can process individual packets. It has no notion of "stages" at all. . ingress_global_timestamp at the beginning of ingress, and non-0 values for both that field and for standard_metadata. Oct 21, 2019 · On the other side, I am using the p4lang/p4runtime-shell docker image to load pipeline configuration and push table entries. I want to add initial PNA support into the bmv2 backend. It takes as input a JSON file generated from your P4 program by a P4 compiler and interprets it to implement the packet-processing behavior specified by that P4 program. The containers can ping each other just fine, but running iperf3 results in a connection that times out. maoTelemetryLabels But, in the second picture below, we can see the corresponding queue_length_in and queue_length_out is always zero (0). You're ready to go! You should be able to compile a P4-16 program for BMV2 using: p4c -b bmv2-ss-p4org program. There is no Tofino-specific code in this Jan 13, 2019 · The bmv2 table "match type" is really an implementation choice. Hello team, I'm in need of installing multiple programs on multiple switches in the bmv2 for evaluation purposes. py: send and receive test packets in Mininet •Exercises Mar 28, 2018 · Hi antoninbas @antoninbas,. /configure --with-bmv2 --with-cli && make. We will now install a P4 software switch to run our P4 program. 1 Jan 23, 2019 · The resubmit operation in BMv2 works by storing an id of a field_list from the "field_lists" key of the BMv2 JSON data, into a metadata field called intrinsic_metadata. Create the multicast group for group id 1113 with the mc_mgrp_create command: RuntimeCmd: help mc_mgrp_create. p4 -o program. I was trying a simple example with 3 hosts running in containers and a BMV2 container acting as the This is the second version of the P4 software switch (aka behavioral model), nicknamed bmv2. Sep 26, 2017 · 如果p4c和bmv2的各个单元测试用例都正常通过,我们的开发和实验环境就搭建完成了! 细心的读者朋友可能会发现,本文的行文风格与笔者以往的有所不同,专注于核心内容的讲解,免去了情绪方面的表达,语言也更加精炼。 May 21, 2020 · BMv2 Simple Switch target. You can also use the "set_queue_rate" simple_switch CLI command to rate-limit the bmv2 queue. I understand protobuf and gRPC, so Is PI a tool just for thrift? but I see '--with-proto' in the README. compound action parameters (can only be bit<> or int<>) functions or methods with a compound return type This directory lets you run the switch. With the working BMv2 JSON files, the attached P4_14 program produces a header_type in the "header_types" section of the BMv2 JSON data that looks like this: BMv2 JSON input format. org Open Source Developer Days - March 15, 2022. py uses p4c-bm2-ss to compile P4_16 source files to a bmv2 JSON configuration file, then runs simple_switch with the --use-files 0 command line option (among other options). Feb 16, 2017 · -v [ --version ] Display version information --no-p4 Enable the switch to start without an inout configuration This target also comes with its own command line parser, make sure you separate general bmv2 options from, target specific options with '--' Target specific options: Target options: --enable-swap enable JSON swapping at runtime *There Nov 7, 2022 · This repository provides simple_switch and simple_switch_grpc binaries, but any multi-switch setup is over and above what is provided by the code in this repo. HTML 23 Apache-2. behavioral-model Public. Note that Bmv2 has already been enabled in our provided image, which means that the Bmv2 commands (e. Soft P4 switches include BMV2, P4c, protobuf, etc. /configure 'CXXFLAGS=-O2' --disable-logging-macros --disable-elogger), otherwise throughput will Dec 22, 2021 · The bmv2 implementation for priority queues is not representative of any hardware implementation. p4 -o test. The valid "p4 object types" are: parser, parse_state, pipeline, table, condition, action, deparser. p4 in p4include/bmv2 directory for other files to reference it. The easiest way is to download our Virtual Machine, available in Option 1 , but you can follow our step-by-step tutorial to have your own machine running mininet with multiqueues Bmv2: a P4 software switch p4c: the reference P4 compiler Mininet: a lightweight network emulation environment •Each directory contains a few scripts $ make : compiles P4 program, execute on Bmv2 in Mininet, populate tables *. @antoninbas I have tried step1 and 2 you mentioned above but it seems more complicate than this. We would like to show you a description here but the site won’t allow us. Create multicast group: mc_mgrp_create <group id>. I want to add initial PNA support into BMv2. Jan 11, 2019 · bmv2 was written when v1model (which is the P4_16 architecture which implements the legacy P4_14 abstract switch model) was the de facto architecture for everyone and in a way all of v1model extern types (e. Now it's working. bmv2 This compiler generates a directory test. Here are some unsupported features we are aware of. 1 amd64 p4lang behavioral-model ii p4c 1. data plane. 2. There may be ways to mitigate this phenomenon, e. 0 42 1 2 Updated 4 days ago. This document is meant to provide an introduction to the framework, discuss the basics of running tests and to provide examples of how to add tests. I have outlined a few changes to make PNA integration possible: • Creation of a new directory pna_nic containing the core logic for the PNA in the backends/bmv2 directory. IperfClient:eth0 <-> bmv2:3(switch)bmv2:4 <->iperfServer:eth0. Closed. When I execute make build on basic folder. Median throughput is 907 Mbps. txt -o build/bas Sep 16, 2022 · mihaibudiu commented on Sep 16, 2022. Hello everyone, I’m using the latest Development VM released in April and working on p4-learning repo. The output shows that this node was allocated a node handle of 1. I’m new with P4 and I’m wondering if it’s possible to run a P4 program inside a docker container. This is the topology I create with Mininet: h1-----bmv2 switch-----h2 remove --with-p4thrift configure option, now that the p4lang org does not maintain a custom Thrift version anymore; enhance runtime CLI documentation; update README to point to reference p4c compiler and guide new users better; document bmv2 performance limitations; simple_switch / simple_switch_grpc: implement v1model mark_to_drop Apr 18, 2024 · Currently BMv2 doesn't support PNA. p4c-bm2-ss fails because the inde Introduction. Apr 15, 2020 · Are the BMv2 queues independent from tc qdisc set limit for the same link? E. connection is as following between nodes. h, and addition of a new file for PNA (just like switch. I can use ONOS controller to control simple_switch_grpc now, and I want to check simple_switch_grpc directly by another way, (like ovs-ofctl for ovs, Simple_Switch_CLI for simple_switch). But we welcome contributions to bmv2 which provide support for alternative scheduling implementations. 0 and soft P4 switches respectively. Beau-Chen opened this issue on Oct 2, 2022 · 2 comments. The compiler driver p4c and binaries for each of the backends are installed in /usr/local/bin by default; the P4 headers are placed in /usr/local/share/p4c. I have sniffed the packet and I can’t see any issue, but every time I make a TCP consult via a bmv2 switch the target virtual host created by mininet does not respond to the consult. That same source code, when compiled for the v1model+ID+EP implementation, will behave differently. This repository provides a precise definition of the P4Runtime API via protobuf (. P4 language tutorials. Installing open source P4 development tools. Oct 2, 2022 · Add port operation failed #1146. to read packets from network interfaces, or send them to network interfaces, but all packet modifications and/or forwarding decisions are made in the user space program. The most suitable implementation should be chosen after inspecting the different individual match types. You can then experiment with the following commands: My response to Q1: The simple_switch_CLI command starts by attempting to make a TCP connection to a simple_switch process, over which it will use the Thrift message format to send messages to the simple_switch process, and receive responses back. txt) and the binary device config (bmv2. Architecture. 1 program; To install in a non-default location, you can use: python setup. However, when replicated in a real-world scenario with linux based machines, this does not work. For xUbuntu 23. C++ 527 Apache-2. p4c . To associate your repository with the p4lang topic, visit your repo's landing page and select "manage topics. Different targets like bmv2, P4-DPDK can choose to implement their own backends for different P4 and non-P4 objects Docker Hub Container Image Library | App Containerization Jan 18, 2024 · It seems like the bmv2 is malforming the packet or something. tuananh01 April 16, 2023, 12:05pm 1. antoninbas closed this as completed Jul 26, 2021. p4) has 3 match-tables (one LPM, 2 exact) and one checksum computation. The target audience for this document includes developers who want to write controller applications for P4 devices or switches. In this repository, we are trying maintain compatibility both with bmv2 and Tofino switches. 1~bionic-1 all This package installs 3rd party software needed by p4lang software ii p4lang-pi 0. Contribute to p4lang/tutorials development by creating an account on GitHub. It is meant to\nbe used as a tool for developing, testing and debugging P4 data planes and\ncontrol plane software written for them. P4_16 Hands-on Lab for BMv2 target Dec 12, 2017 · The bmv2 log is in the first picture below, I can see it actually reads the enq_qdepth and deq_qdepth to hdr. I'm trying a lot, but repeatedly, I'm getting errors in the Makefile itself. E. There are currently 2 P4 compilers available for bmv2 on p4lang: p4c includes a bmv2 backend and is the recommended compiler to use, as it supports both P4_14 and P4_16 programs. json. It is based on unittest, which is included in the standard Python distribution. The above command assumes that the P4Info (p4info. The simple_switch architecture is the de-facto architecture for most users, as it is roughly equivalent to the "abstract switch model" described in the P4_14 spec. You can run it on a VM and start writing your first P4 program and load it on simple_switch and/or simple_switch_grpc (if you plan to use P4Runtime). 0 869 15 (4 issues need help) 20 Updated 2 days ago. and communication between the control plane and data plane. But I think it is one that a good CS master's student should be able to accomplish in a reasonable timeframe. 1 amd64 p4c p4lang project compiler ii p4lang-3rd-party 1. Limitations of both platforms have impact on the P4 INT code. 8GB). Some things to keep in mind: the throughput will decrease linearly with the number of tables. The reference P4 software switch. json which the generated "executable" code which is run by the software switch. New 'advance' parser operation p4lang/behavioral-model. p4c, simple_switch, simple_switch_grpc, simple_switch_CLI) can direcly be used in P4Pi. txt Jul 2, 2020 · bmv2:3 bmv2:4 iperfServer:eth0. Sep 28, 2021 · Hello everyone, I am trying to implement In-band Network Telemetry using P4 on BMv2 switches, and one metric I am trying to measure is the time taken by the packet to flow from the source to the sink switch (latency). Apr 6, 2018 · With the latest versions of behavioral-model and p4c code, I see non-0 values for standard_metadata. Creating multicast group 1113. The issue is: [21:15:00. Radostin Stoyanov PhD Candidate - Computing Infrastructure Group Supervisor: Prof. sudo make install. Now, my program compiles and the bmv2 switch logs: which I assume means the digest was sent. 13. Jan 23, 2018 · I appear to be having issues with the GRPC client in Python with the latest updates. Or alternatively, pull image from Docker hub (compressed image size: 1. RARE (Router for Academia, Research & Education) focus is on determining if a routing software platform solution can fit R&E use cases. 182] [bmv2] [D] Virtual Machine with p4 and multiqueue (BMv2) using mininet. I have confirmed this with wireshark and I'm not really sure what I might be The P4Runtime API is a control plane specification for controlling the data plane elements of a device defined or described by a P4 program. uv hl eg iy sm zs vn dj yf tw