Line data Source code
1 : /*
2 : *------------------------------------------------------------------
3 : * Copyright (c) 2017 Intel and/or its affiliates.
4 : * Licensed under the Apache License, Version 2.0 (the "License");
5 : * you may not use this file except in compliance with the License.
6 : * You may obtain a copy of the License at:
7 : *
8 : * http://www.apache.org/licenses/LICENSE-2.0
9 : *
10 : * Unless required by applicable law or agreed to in writing, software
11 : * distributed under the License is distributed on an "AS IS" BASIS,
12 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : * See the License for the specific language governing permissions and
14 : * limitations under the License.
15 : *------------------------------------------------------------------
16 : */
17 :
18 : #include <pppoe/pppoe.h>
19 :
20 : int
21 0 : pppoe_add_del_cp (u32 cp_if_index, u8 is_add)
22 : {
23 0 : pppoe_main_t *pem = &pppoe_main;
24 :
25 0 : if (cp_if_index == 0)
26 : {
27 0 : return ~0;
28 : }
29 :
30 0 : vnet_feature_enable_disable ("device-input", "pppoe-input",
31 : cp_if_index, is_add, 0, 0);
32 :
33 0 : if (is_add)
34 : {
35 0 : pem->cp_if_index = cp_if_index;
36 : }
37 : else
38 : {
39 0 : pem->cp_if_index = ~0;
40 : }
41 0 : return 0;
42 : }
43 :
44 : static clib_error_t *
45 0 : pppoe_add_del_cp_command_fn (vlib_main_t * vm,
46 : unformat_input_t * input,
47 : vlib_cli_command_t * cmd)
48 : {
49 0 : unformat_input_t _line_input, *line_input = &_line_input;
50 0 : pppoe_main_t *pem = &pppoe_main;
51 0 : u8 is_add = 1;
52 0 : u8 cp_if_index_set = 0;
53 0 : u32 cp_if_index = 0;
54 0 : clib_error_t *error = NULL;
55 :
56 : /* Get a line of input. */
57 0 : if (!unformat_user (input, unformat_line_input, line_input))
58 0 : return 0;
59 :
60 0 : while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
61 : {
62 0 : if (unformat (line_input, "del"))
63 : {
64 0 : is_add = 0;
65 : }
66 0 : else if (unformat (line_input, "cp-if-index %d", &cp_if_index))
67 0 : cp_if_index_set = 1;
68 : else
69 : {
70 0 : error = clib_error_return (0, "parse error: '%U'",
71 : format_unformat_error, line_input);
72 0 : goto done;
73 : }
74 : }
75 :
76 0 : if (cp_if_index_set == 0)
77 : {
78 0 : error = clib_error_return (0, "cp if index not specified");
79 0 : goto done;
80 : }
81 :
82 0 : vnet_feature_enable_disable ("device-input", "pppoe-input",
83 : cp_if_index, is_add, 0, 0);
84 :
85 0 : if (is_add)
86 : {
87 0 : pem->cp_if_index = cp_if_index;
88 : }
89 : else
90 : {
91 0 : pem->cp_if_index = ~0;
92 : }
93 :
94 0 : done:
95 0 : unformat_free (line_input);
96 :
97 0 : return error;
98 : }
99 :
100 : /* *INDENT-OFF* */
101 47957 : VLIB_CLI_COMMAND (create_pppoe_cp_cmd, static) =
102 : {
103 : .path = "create pppoe cp",
104 : .short_help = "create pppoe cp-if-index <intfc> [del]",
105 : .function = pppoe_add_del_cp_command_fn,
106 : };
107 : /* *INDENT-ON* */
108 :
109 : /*
110 : * fd.io coding-style-patch-verification: ON
111 : *
112 : * Local Variables:
113 : * eval: (c-set-style "gnu")
114 : * End:
115 : */
|