Line data Source code
1 : /* 2 : *------------------------------------------------------------------ 3 : * tcp_api.c - vnet tcp-layer apis 4 : * 5 : * Copyright (c) 2017-2019 Cisco and/or its affiliates. 6 : * Licensed under the Apache License, Version 2.0 (the "License"); 7 : * you may not use this file except in compliance with the License. 8 : * You may obtain a copy of the License at: 9 : * 10 : * http://www.apache.org/licenses/LICENSE-2.0 11 : * 12 : * Unless required by applicable law or agreed to in writing, software 13 : * distributed under the License is distributed on an "AS IS" BASIS, 14 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 : * See the License for the specific language governing permissions and 16 : * limitations under the License. 17 : *------------------------------------------------------------------ 18 : */ 19 : 20 : #include <vnet/vnet.h> 21 : #include <vlibmemory/api.h> 22 : 23 : #include <vnet/tcp/tcp.h> 24 : #include <vnet/ip/ip_types_api.h> 25 : 26 : #include <vnet/format_fns.h> 27 : 28 : #include <vnet/tcp/tcp.api_enum.h> 29 : #include <vnet/tcp/tcp.api_types.h> 30 : 31 : #define REPLY_MSG_ID_BASE tcp_main.msg_id_base 32 : #include <vlibapi/api_helper_macros.h> 33 : 34 : static void 35 0 : vl_api_tcp_configure_src_addresses_t_handler 36 : (vl_api_tcp_configure_src_addresses_t * mp) 37 : { 38 0 : vlib_main_t *vm = vlib_get_main (); 39 : vl_api_tcp_configure_src_addresses_reply_t *rmp; 40 : u32 vrf_id; 41 : int rv; 42 : ip46_address_t first_address, last_address; 43 : ip46_type_t fa_af, la_af; 44 : 45 0 : vrf_id = clib_net_to_host_u32 (mp->vrf_id); 46 : 47 0 : fa_af = ip_address_decode (&mp->first_address, &first_address); 48 0 : la_af = ip_address_decode (&mp->last_address, &last_address); 49 : 50 0 : if (fa_af != la_af) 51 : { 52 0 : rv = VNET_API_ERROR_INVALID_VALUE; 53 0 : goto error; 54 : } 55 : 56 0 : if (fa_af == IP46_TYPE_IP6) 57 0 : rv = tcp_configure_v6_source_address_range 58 : (vm, &first_address.ip6, &last_address.ip6, vrf_id); 59 : else 60 0 : rv = tcp_configure_v4_source_address_range 61 : (vm, &first_address.ip4, &last_address.ip4, vrf_id); 62 : 63 0 : error: 64 0 : REPLY_MACRO (VL_API_TCP_CONFIGURE_SRC_ADDRESSES_REPLY); 65 : } 66 : 67 : #include <vnet/tcp/tcp.api.c> 68 : static clib_error_t * 69 559 : tcp_api_hookup (vlib_main_t * vm) 70 : { 71 : /* 72 : * Set up the (msg_name, crc, message-id) table 73 : */ 74 559 : REPLY_MSG_ID_BASE = setup_message_id_table (); 75 : 76 559 : return 0; 77 : } 78 : 79 8399 : VLIB_API_INIT_FUNCTION (tcp_api_hookup); 80 : 81 : /* 82 : * fd.io coding-style-patch-verification: ON 83 : * 84 : * Local Variables: 85 : * eval: (c-set-style "gnu") 86 : * End: 87 : */