From df87f8092f5b6b54eef0d5acf3c27c2e398a401a Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Wed, 18 Nov 2020 19:17:48 +0100 Subject: api: vat2 and json autogeneration for api messages VAT2: A completely auto-generated replacement of VAT. Reads input message in JSON from stdin and outputs received messages in JSON. A VAT2 plugin is automatically built for a .api file. There no longer a need for a separate _test.c. Example: vat2 show_version {} { "_msgname": "show_version_reply", "retval": 0, "program": "vpe", "version": "21.01-rc0~411-gf6eb348a6", "build_date": "2020-11-19T09:49:25", "build_directory": "/vpp/autogen3" } vat2 sw_interface_dump '{"sw_if_index": -1, "name_filter_valid": 0, "name_filter": ""}' [{ "_msgname": "sw_interface_details", "sw_if_index": 0, "sup_sw_if_index": 0, "l2_address": "00:00:00:00:00:00", "flags": "Invalid ENUM", "type": "IF_API_TYPE_HARDWARE", "link_duplex": "LINK_DUPLEX_API_UNKNOWN", "link_speed": 0, "link_mtu": 0, "mtu": [0, 0, 0, 0], "sub_id": 0, "sub_number_of_tags": 0, "sub_outer_vlan_id": 0, "sub_inner_vlan_id": 0, "sub_if_flags": "Invalid ENUM", "vtr_op": 0, "vtr_push_dot1q": 0, "vtr_tag1": 0, "vtr_tag2": 0, "outer_tag": 0, "b_dmac": "00:00:00:00:00:00", "b_smac": "00:00:00:00:00:00", "b_vlanid": 0, "i_sid": 0, "interface_name": "local0", "interface_dev_type": "local", "tag": "" }] This is the first phase and vat2 is not integrated in packaging yet. Type: feature Signed-off-by: Ole Troan Change-Id: Ib45ddeafb180ea7da8c5dc274a9274d7a4edc876 Signed-off-by: Ole Troan --- src/plugins/gbp/CMakeLists.txt | 1 - src/plugins/gbp/gbp.api | 28 ++-- src/plugins/gbp/gbp_api.c | 1 - src/plugins/gbp/gbp_api_print.h | 352 ---------------------------------------- 4 files changed, 14 insertions(+), 368 deletions(-) delete mode 100644 src/plugins/gbp/gbp_api_print.h (limited to 'src/plugins/gbp') diff --git a/src/plugins/gbp/CMakeLists.txt b/src/plugins/gbp/CMakeLists.txt index d9034fbf3fe..95f664ff08e 100644 --- a/src/plugins/gbp/CMakeLists.txt +++ b/src/plugins/gbp/CMakeLists.txt @@ -51,5 +51,4 @@ add_vpp_plugin(gbp INSTALL_HEADERS gbp.h - gbp_api_print.h ) diff --git a/src/plugins/gbp/gbp.api b/src/plugins/gbp/gbp.api index f7643c76c02..2f46634af52 100644 --- a/src/plugins/gbp/gbp.api +++ b/src/plugins/gbp/gbp.api @@ -39,14 +39,14 @@ typedef gbp_bridge_domain vl_api_interface_index_t bm_flood_sw_if_index; }; -manual_print autoreply define gbp_bridge_domain_add + autoreply define gbp_bridge_domain_add { option status="in_progress"; u32 client_index; u32 context; vl_api_gbp_bridge_domain_t bd; }; -manual_print autoreply define gbp_bridge_domain_del + autoreply define gbp_bridge_domain_del { option status="in_progress"; u32 client_index; @@ -78,14 +78,14 @@ typedef gbp_route_domain vl_api_gbp_scope_t scope; }; -manual_print autoreply define gbp_route_domain_add + autoreply define gbp_route_domain_add { option status="in_progress"; u32 client_index; u32 context; vl_api_gbp_route_domain_t rd; }; -manual_print autoreply define gbp_route_domain_del + autoreply define gbp_route_domain_del { option status="in_progress"; u32 client_index; @@ -136,7 +136,7 @@ typedef gbp_endpoint vl_api_address_t ips[n_ips]; }; -manual_print define gbp_endpoint_add + define gbp_endpoint_add { option status="in_progress"; u32 client_index; @@ -152,7 +152,7 @@ define gbp_endpoint_add_reply u32 handle; }; -manual_print autoreply define gbp_endpoint_del + autoreply define gbp_endpoint_del { option status="in_progress"; u32 client_index; @@ -191,14 +191,14 @@ typedef gbp_endpoint_group vl_api_gbp_endpoint_retention_t retention; }; -manual_print autoreply define gbp_endpoint_group_add + autoreply define gbp_endpoint_group_add { option status="in_progress"; u32 client_index; u32 context; vl_api_gbp_endpoint_group_t epg; }; -manual_print autoreply define gbp_endpoint_group_del + autoreply define gbp_endpoint_group_del { option status="in_progress"; u32 client_index; @@ -227,7 +227,7 @@ typedef gbp_recirc bool is_ext; }; -manual_print autoreply define gbp_recirc_add_del + autoreply define gbp_recirc_add_del { option status="in_progress"; u32 client_index; @@ -268,7 +268,7 @@ typedef gbp_subnet vl_api_prefix_t prefix; }; -manual_print autoreply define gbp_subnet_add_del + autoreply define gbp_subnet_add_del { option status="in_progress"; u32 client_index; @@ -338,7 +338,7 @@ typedef gbp_contract vl_api_gbp_rule_t rules[n_rules]; }; -manual_print define gbp_contract_add_del + define gbp_contract_add_del { option status="in_progress"; u32 client_index; @@ -388,7 +388,7 @@ typedef gbp_vxlan_tunnel vl_api_ip4_address_t src; }; -manual_print define gbp_vxlan_tunnel_add + define gbp_vxlan_tunnel_add { option status="in_progress"; u32 client_index; @@ -404,7 +404,7 @@ define gbp_vxlan_tunnel_add_reply vl_api_interface_index_t sw_if_index; }; -manual_print autoreply define gbp_vxlan_tunnel_del + autoreply define gbp_vxlan_tunnel_del { option status="in_progress"; u32 client_index; @@ -440,7 +440,7 @@ typedef gbp_ext_itf vl_api_gbp_ext_itf_flags_t flags; }; -manual_print autoreply define gbp_ext_itf_add_del + autoreply define gbp_ext_itf_add_del { option status="in_progress"; u32 client_index; diff --git a/src/plugins/gbp/gbp_api.c b/src/plugins/gbp/gbp_api.c index aea03d80226..ab89172b1af 100644 --- a/src/plugins/gbp/gbp_api.c +++ b/src/plugins/gbp/gbp_api.c @@ -42,7 +42,6 @@ #include #include #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) -#include "gbp_api_print.h" gbp_main_t gbp_main; diff --git a/src/plugins/gbp/gbp_api_print.h b/src/plugins/gbp/gbp_api_print.h deleted file mode 100644 index 39c25b6e476..00000000000 --- a/src/plugins/gbp/gbp_api_print.h +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright (c) 2019 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __GBP_API_PRINT_H__ -#define __GBP_API_PRINT_H__ - -#include - -/* Macro to finish up custom dump fns */ -#define PRINT_S \ - vec_add1 (s, 0); \ - vl_print (handle, (char *)s); \ - vec_free (s); - -static inline void * -vl_api_gbp_bridge_domain_add_t_print (vl_api_gbp_bridge_domain_add_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_bridge_domain_add "); - s = format (s, "bd_id %d ", ntohl (a->bd.bd_id)); - s = format (s, "rd_id %d ", ntohl (a->bd.rd_id)); - s = format (s, "flags %d ", ntohl (a->bd.flags)); - s = format (s, "uu-fwd %d ", ntohl (a->bd.uu_fwd_sw_if_index)); - s = format (s, "bvi %d ", ntohl (a->bd.bvi_sw_if_index)); - s = format (s, "bm-flood %d", ntohl (a->bd.bm_flood_sw_if_index)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_bridge_domain_del_t_print (vl_api_gbp_bridge_domain_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_bridge_domain_del "); - s = format (s, "bd_id %d ", ntohl (a->bd_id)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_route_domain_add_t_print (vl_api_gbp_route_domain_add_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_route_domain_add "); - s = format (s, "rd_id %d ", ntohl (a->rd.rd_id)); - s = format (s, "ip4_table_id %d ", ntohl (a->rd.ip4_table_id)); - s = format (s, "ip6_table_id %d ", ntohl (a->rd.ip6_table_id)); - s = format (s, "ip4_uu_sw_if_index %d ", ntohl (a->rd.ip4_uu_sw_if_index)); - s = format (s, "ip6_uu_sw_if_index %d", ntohl (a->rd.ip6_uu_sw_if_index)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_route_domain_del_t_print (vl_api_gbp_route_domain_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_route_domain_del "); - s = format (s, "rd_id %d", ntohl (a->rd_id)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_endpoint_add_t_print (vl_api_gbp_endpoint_add_t * a, void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_endpoint_add "); - s = format (s, "sw_if_index %d ", ntohl (a->endpoint.sw_if_index)); - s = format (s, "sclass %d ", ntohs (a->endpoint.sclass)); - s = format (s, "flags %x ", ntohl (a->endpoint.flags)); - s = format (s, "mac %U ", format_vl_api_mac_address, a->endpoint.mac); - s = - format (s, "\n\ttun\n\t\t src %U", format_vl_api_address, - &a->endpoint.tun.src); - s = - format (s, "\n\t\t dst %U ", format_vl_api_address, &a->endpoint.tun.dst); - - if (a->endpoint.n_ips) - s = format (s, "\n\t ips"); - for (int i = 0; i < a->endpoint.n_ips; i++) - s = format (s, "\n\t\t %U", format_vl_api_address, &a->endpoint.ips[i]); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_endpoint_del_t_print (vl_api_gbp_endpoint_del_t * a, void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_endpoint_del "); - s = format (s, "handle %d", ntohl (a->handle)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_endpoint_group_add_t_print (vl_api_gbp_endpoint_group_add_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_endpoint_group_add "); - s = format (s, "vnid %d ", ntohl (a->epg.vnid)); - s = format (s, "sclass %d ", ntohs (a->epg.sclass)); - s = format (s, "bd_id %d ", ntohl (a->epg.bd_id)); - s = format (s, "rd_id %d ", ntohl (a->epg.rd_id)); - s = format (s, "uplink_sw_if_index %d ", ntohl (a->epg.uplink_sw_if_index)); - s = - format (s, "remote_ep_timeout %d", - ntohl (a->epg.retention.remote_ep_timeout)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_endpoint_group_del_t_print (vl_api_gbp_endpoint_group_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_endpoint_group_del "); - s = format (s, "sclass %d ", ntohs (a->sclass)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_recirc_add_del_t_print (vl_api_gbp_recirc_add_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_recirc_add_del "); - - if (a->is_add) - s = format (s, "add "); - else - s = format (s, "del "); - s = format (s, "sw_if_index %d ", ntohl (a->recirc.sw_if_index)); - s = format (s, "sclass %d ", ntohs (a->recirc.sclass)); - s = format (s, "is_ext %d ", a->recirc.is_ext); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_subnet_add_del_t_print (vl_api_gbp_subnet_add_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_subnet_add_del "); - if (a->is_add) - s = format (s, "add "); - else - s = format (s, "del "); - s = format (s, "rd_id %d ", ntohl (a->subnet.rd_id)); - s = format (s, "sw_if_index %d ", ntohl (a->subnet.sw_if_index)); - s = format (s, "sclass %d ", ntohs (a->subnet.sclass)); - s = format (s, "type %d ", ntohl (a->subnet.type)); - s = - format (s, "prefix %U/%d", format_vl_api_address, - &a->subnet.prefix.address, a->subnet.prefix.len); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_contract_add_del_t_print (vl_api_gbp_contract_add_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_contract_add_del "); - if (a->is_add) - s = format (s, "add "); - else - s = format (s, "del "); - s = format (s, "scope %d ", ntohl (a->contract.scope)); - s = format (s, "sclass %d ", ntohs (a->contract.sclass)); - s = format (s, "dclass %d ", ntohs (a->contract.dclass)); - s = format (s, "acl_index %d \n", ntohl (a->contract.acl_index)); - for (int i = 0; i < a->contract.n_rules; i++) - { - s = format (s, "\t action %d\n", ntohl (a->contract.rules[i].action)); - s = - format (s, "\t hash_mode %d", - ntohl (a->contract.rules[i].nh_set.hash_mode)); - for (int j = 0; j < a->contract.rules[i].nh_set.n_nhs; j++) - { - s = - format (s, "\n\t \t nhs ip %U ", format_vl_api_address, - &a->contract.rules[i].nh_set.nhs[j].ip); - s = - format (s, "nhs mac %U ", format_vl_api_mac_address, - a->contract.rules[i].nh_set.nhs[j].mac); - s = - format (s, "nhs bd_id %d ", - ntohl (a->contract.rules[i].nh_set.nhs[j].bd_id)); - s = - format (s, "nhs rd_id %d", - ntohl (a->contract.rules[i].nh_set.nhs[j].rd_id)); - } - s = format (s, "\n"); - } - - if (a->contract.n_ether_types) - s = format (s, "\tethertypes"); - for (int i = 0; i < a->contract.n_ether_types; i++) - { - s = format (s, " %d ", ntohs (a->contract.allowed_ethertypes[i])); - } - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_vxlan_tunnel_add_t_print (vl_api_gbp_vxlan_tunnel_add_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_vxlan_tunnel_add "); - - s = format (s, "vni %d ", ntohl (a->tunnel.vni)); - s = format (s, "mode %d ", ntohl (a->tunnel.mode)); - s = format (s, "bd_rd_id %d ", ntohl (a->tunnel.bd_rd_id)); - s = format (s, "src %U ", format_vl_api_ip4_address, a->tunnel.src); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_vxlan_tunnel_del_t_print (vl_api_gbp_vxlan_tunnel_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_vxlan_tunnel_del "); - s = format (s, "vni %d ", ntohl (a->vni)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -static inline void * -vl_api_gbp_ext_itf_add_del_t_print (vl_api_gbp_ext_itf_add_del_t * a, - void *handle) -{ - u8 *s = 0; - - s = format (s, "SCRIPT: gbp_ext_itf_add_del "); - if (a->is_add) - s = format (s, "add "); - else - s = format (s, "del "); - - s = format (s, "sw_if_index %d ", ntohl (a->ext_itf.sw_if_index)); - s = format (s, "bd_id %d ", ntohl (a->ext_itf.bd_id)); - s = format (s, "rd_id %d ", ntohl (a->ext_itf.rd_id)); - s = format (s, "flags %x ", ntohl (a->ext_itf.flags)); - - s = format (s, "\n"); - - PRINT_S; - - return handle; -} - -/* - * fd.io coding-style-patch-verification: ON - * - * Local Variables: - * eval: (c-set-style "gnu") - * End: - */ - -#endif /* __GBP_API_PRINT_H__ */ -- cgit 1.2.3-korg