2 * Copyright (c) 2017 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
16 *------------------------------------------------------------------
17 * udp_ping_api.c - UDP Ping related APIs to create
18 * and maintain ping flows
19 *------------------------------------------------------------------
22 #include <vnet/vnet.h>
23 #include <vnet/ip/ip.h>
24 #include <ioam/udp-ping/udp_ping.h>
26 #include <vlibapi/api.h>
27 #include <vlibmemory/api.h>
28 #include <vnet/format_fns.h>
29 #include <vnet/ip/ip_types_api.h>
31 /* define message IDs */
32 #include <ioam/udp-ping/udp_ping.api_enum.h>
33 #include <ioam/udp-ping/udp_ping.api_types.h>
35 #define REPLY_MSG_ID_BASE sm->msg_id_base
36 #include <vlibapi/api_helper_macros.h>
39 vl_api_udp_ping_add_del_t_handler (vl_api_udp_ping_add_del_t * mp)
41 ip46_address_t dst, src;
43 udp_ping_main_t *sm = &udp_ping_main;
44 vl_api_udp_ping_add_del_reply_t *rmp;
46 if (clib_net_to_host_u32 (mp->src_ip_address.af) == ADDRESS_IP4)
48 rv = -1; //Not supported
51 ip_address_decode (&mp->src_ip_address, &src);
52 ip_address_decode (&mp->dst_ip_address, &dst);
54 ip46_udp_ping_set_flow (src, dst,
55 ntohs (mp->start_src_port),
56 ntohs (mp->end_src_port),
57 ntohs (mp->start_dst_port),
58 ntohs (mp->end_dst_port),
59 ntohs (mp->interval), mp->fault_det, mp->dis);
63 REPLY_MACRO (VL_API_UDP_PING_ADD_DEL_REPLY);
67 vl_api_udp_ping_export_t_handler (vl_api_udp_ping_export_t * mp)
69 udp_ping_main_t *sm = &udp_ping_main;
71 vl_api_udp_ping_export_reply_t *rmp;
73 (void) udp_ping_flow_create (!mp->enable);
76 REPLY_MACRO (VL_API_UDP_PING_EXPORT_REPLY);
79 #include <ioam/udp-ping/udp_ping.api.c>
81 udp_ping_api_init (vlib_main_t * vm)
83 udp_ping_main_t *sm = &udp_ping_main;
85 /* Ask for a correctly-sized block of API message decode slots */
86 sm->msg_id_base = setup_message_id_table ();
91 VLIB_INIT_FUNCTION (udp_ping_api_init);
94 * fd.io coding-style-patch-verification: ON
97 * eval: (c-set-style "gnu")