2 * mss_clamp_api.c - TCP MSS clamping plug-in
4 * Copyright (c) <current-year> <your-organization>
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #include <vnet/vnet.h>
19 #include <vnet/plugin/plugin.h> /* VLIB_PLUGIN_REGISTER */
20 #include <mss_clamp/mss_clamp.h>
21 #include <mss_clamp/mss_clamp.api_enum.h>
22 #include <mss_clamp/mss_clamp.api_types.h>
23 #include <vlibapi/api.h>
24 #include <vlibmemory/api.h>
25 #include <vpp/app/version.h> /* VPP_BUILD_VER */
27 #define REPLY_MSG_ID_BASE cm->msg_id_base
28 #include <vlibapi/api_helper_macros.h>
30 /* API message handler */
32 vl_api_mss_clamp_enable_disable_t_handler (
33 vl_api_mss_clamp_enable_disable_t *mp)
35 mssc_main_t *cm = &mssc_main;
36 vl_api_mss_clamp_enable_disable_reply_t *rmp;
39 VALIDATE_SW_IF_INDEX (mp);
41 rv = mssc_enable_disable (ntohl (mp->sw_if_index), mp->ipv4_direction,
42 mp->ipv6_direction, ntohs (mp->ipv4_mss),
43 ntohs (mp->ipv6_mss));
45 BAD_SW_IF_INDEX_LABEL;
46 REPLY_MACRO (VL_API_MSS_CLAMP_ENABLE_DISABLE_REPLY);
50 send_mss_clamp_details (u32 sw_if_index, vl_api_registration_t *rp,
53 mssc_main_t *cm = &mssc_main;
54 vl_api_mss_clamp_details_t *rmp;
60 dir4 = dir6 = MSS_CLAMP_DIR_NONE;
61 rv = mssc_get_mss (sw_if_index, &dir4, &dir6, &mss4, &mss6);
62 if (rv == VNET_API_ERROR_FEATURE_DISABLED)
65 REPLY_MACRO_DETAILS4 (VL_API_MSS_CLAMP_DETAILS, rp, context, ({
66 rmp->sw_if_index = htonl (sw_if_index);
67 rmp->ipv4_mss = htons (mss4);
68 rmp->ipv6_mss = htons (mss6);
69 rmp->ipv4_direction = dir4;
70 rmp->ipv6_direction = dir6;
75 vl_api_mss_clamp_get_t_handler (vl_api_mss_clamp_get_t *mp)
77 mssc_main_t *cm = &mssc_main;
78 vl_api_mss_clamp_get_reply_t *rmp;
80 u32 sw_if_index = ntohl (mp->sw_if_index);
81 vl_api_registration_t *reg;
83 reg = vl_api_client_index_to_registration (mp->client_index);
87 if (sw_if_index == ~0)
89 if (vec_len (cm->dir_enabled4) == 0)
91 REPLY_MACRO2 (VL_API_MSS_CLAMP_GET_REPLY, ({ rmp->cursor = ~0; }));
95 REPLY_AND_DETAILS_MACRO (
96 VL_API_MSS_CLAMP_GET_REPLY, cm->dir_enabled4,
97 ({ send_mss_clamp_details (cursor, reg, mp->context); }));
101 VALIDATE_SW_IF_INDEX (mp);
102 send_mss_clamp_details (sw_if_index, reg, mp->context);
104 BAD_SW_IF_INDEX_LABEL;
105 REPLY_MACRO2 (VL_API_MSS_CLAMP_GET_REPLY, ({ rmp->cursor = ~0; }));
109 /* API definitions */
110 #include <vnet/format_fns.h>
111 #include <mss_clamp/mss_clamp.api.c>
113 /* Set up the API message handling tables */
114 static clib_error_t *
115 mssc_api_hookup (vlib_main_t *vm)
117 mssc_main_t *cm = &mssc_main;
119 cm->msg_id_base = setup_message_id_table ();
123 VLIB_API_INIT_FUNCTION (mssc_api_hookup);
125 VLIB_PLUGIN_REGISTER () = {
126 .version = VPP_BUILD_VER,
127 .description = "TCP MSS clamping plugin",
131 * fd.io coding-style-patch-verification: ON
134 * eval: (c-set-style "gnu")