http: return more than url to server app
[vpp.git] / src / plugins / cdp / cdp.c
1 /*
2  * cdp.c - cdp protocol plug-in
3  *
4  * Copyright (c) 2011-2018 by Cisco and/or its affiliates.
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:
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17
18 #include <vnet/vnet.h>
19 #include <vnet/plugin/plugin.h>
20 #include <cdp/cdp.h>
21
22 #include <vlibapi/api.h>
23 #include <vlibmemory/api.h>
24 #include <vpp/app/version.h>
25
26 /* define message IDs */
27 #include <cdp/cdp.api_enum.h>
28 #include <cdp/cdp.api_types.h>
29
30 #define REPLY_MSG_ID_BASE cm->msg_id_base
31 #include <vlibapi/api_helper_macros.h>
32
33 /* Action function shared between message handler and debug CLI */
34
35 int
36 cdp_enable_disable (cdp_main_t * cm, int enable_disable)
37 {
38   int rv = 0;
39
40   if (enable_disable)
41     {
42       vnet_cdp_create_periodic_process (cm);
43       vlib_process_signal_event (cm->vlib_main, cm->cdp_process_node_index,
44                                  CDP_EVENT_ENABLE, 0);
45     }
46   else
47     {
48       vnet_cdp_create_periodic_process (cm);
49       vlib_process_signal_event (cm->vlib_main, cm->cdp_process_node_index,
50                                  CDP_EVENT_DISABLE, 0);
51     }
52   cm->enabled = enable_disable;
53
54   return rv;
55 }
56
57 static clib_error_t *
58 cdp_command_fn (vlib_main_t * vm,
59                 unformat_input_t * input, vlib_cli_command_t * cmd)
60 {
61   cdp_main_t *cm = &cdp_main;
62   int enable_disable = 1;
63
64   int rv;
65
66   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
67     {
68       if (unformat (input, "disable"))
69         enable_disable = 0;
70       else if (unformat (input, "enable"))
71         enable_disable = 1;
72       else
73         break;
74     }
75
76   rv = cdp_enable_disable (cm, enable_disable);
77
78   switch (rv)
79     {
80     case 0:
81       break;
82
83     default:
84       return clib_error_return (0, "cdp_enable_disable returned %d", rv);
85     }
86   return 0;
87 }
88
89 VLIB_CLI_COMMAND (cdp_command, static) =
90 {
91   .path = "cdp",
92   .short_help = "cdp enable | disable",
93   .function = cdp_command_fn,
94 };
95
96 /* API message handler */
97 static void vl_api_cdp_enable_disable_t_handler
98   (vl_api_cdp_enable_disable_t * mp)
99 {
100   vl_api_cdp_enable_disable_reply_t *rmp;
101   cdp_main_t *cm = &cdp_main;
102   int rv;
103
104   rv = cdp_enable_disable (cm, (int) (mp->enable_disable));
105
106   REPLY_MACRO (VL_API_CDP_ENABLE_DISABLE_REPLY);
107 }
108
109 #include <cdp/cdp.api.c>
110 static clib_error_t *
111 cdp_init (vlib_main_t * vm)
112 {
113   cdp_main_t *cm = &cdp_main;
114
115   cm->vlib_main = vm;
116
117   /* Ask for a correctly-sized block of API message decode slots */
118   cm->msg_id_base = setup_message_id_table ();
119
120   return 0;
121 }
122
123 VLIB_INIT_FUNCTION (cdp_init);
124
125 VLIB_PLUGIN_REGISTER () =
126 {
127   .version = VPP_BUILD_VER,
128   .description = "Cisco Discovery Protocol (CDP)",
129 };
130
131 /*
132  * fd.io coding-style-patch-verification: ON
133  *
134  * Local Variables:
135  * eval: (c-set-style "gnu")
136  * End:
137  */