// SPDX-License-Identifier: GPL-2.0 #include #include #include #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; }