mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 07:50:04 +00:00
tools: ynl: generate code for ovs families
Add ovs_flow, ovs_vport and ovs_datapath to the families supported in C. ovs-flow has some circular nesting which is fun to deal with, but the necessary support has been added already in the previous release cycle. Add a sample that proves that dealing with fixed headers does actually work correctly. Reviewed-by: Jiri Pirko <jiri@nvidia.com> Link: https://lore.kernel.org/r/20240202004926.447803-3-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
8f109e91b8
commit
7c59c9c8f2
@ -14,7 +14,7 @@ YNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \
|
||||
|
||||
TOOL:=../ynl-gen-c.py
|
||||
|
||||
GENS:=ethtool devlink dpll handshake fou mptcp_pm netdev nfsd
|
||||
GENS:=ethtool devlink dpll handshake fou mptcp_pm netdev nfsd ovs_datapath ovs_vport ovs_flow
|
||||
SRCS=$(patsubst %,%-user.c,${GENS})
|
||||
HDRS=$(patsubst %,%-user.h,${GENS})
|
||||
OBJS=$(patsubst %,%-user.o,${GENS})
|
||||
|
1
tools/net/ynl/samples/.gitignore
vendored
1
tools/net/ynl/samples/.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
ethtool
|
||||
devlink
|
||||
netdev
|
||||
ovs
|
||||
page-pool
|
60
tools/net/ynl/samples/ovs.c
Normal file
60
tools/net/ynl/samples/ovs.c
Normal file
@ -0,0 +1,60 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <ynl.h>
|
||||
|
||||
#include "ovs_datapath-user.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
struct ynl_sock *ys;
|
||||
int err;
|
||||
|
||||
ys = ynl_sock_create(&ynl_ovs_datapath_family, NULL);
|
||||
if (!ys)
|
||||
return 1;
|
||||
|
||||
if (argc > 1) {
|
||||
struct ovs_datapath_new_req *req;
|
||||
|
||||
req = ovs_datapath_new_req_alloc();
|
||||
if (!req)
|
||||
goto err_close;
|
||||
|
||||
ovs_datapath_new_req_set_upcall_pid(req, 1);
|
||||
ovs_datapath_new_req_set_name(req, argv[1]);
|
||||
|
||||
err = ovs_datapath_new(ys, req);
|
||||
ovs_datapath_new_req_free(req);
|
||||
if (err)
|
||||
goto err_close;
|
||||
} else {
|
||||
struct ovs_datapath_get_req_dump *req;
|
||||
struct ovs_datapath_get_list *dps;
|
||||
|
||||
printf("Dump:\n");
|
||||
req = ovs_datapath_get_req_dump_alloc();
|
||||
|
||||
dps = ovs_datapath_get_dump(ys, req);
|
||||
ovs_datapath_get_req_dump_free(req);
|
||||
if (!dps)
|
||||
goto err_close;
|
||||
|
||||
ynl_dump_foreach(dps, dp) {
|
||||
printf(" %s(%d): pid:%u cache:%u\n",
|
||||
dp->name, dp->_hdr.dp_ifindex,
|
||||
dp->upcall_pid, dp->masks_cache_size);
|
||||
}
|
||||
ovs_datapath_get_list_free(dps);
|
||||
}
|
||||
|
||||
ynl_sock_destroy(ys);
|
||||
|
||||
return 0;
|
||||
|
||||
err_close:
|
||||
fprintf(stderr, "YNL (%d): %s\n", ys->err.code, ys->err.msg);
|
||||
ynl_sock_destroy(ys);
|
||||
return 2;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user