Line data Source code
1 : /*
2 : * Copyright (c) 2015 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:
6 : *
7 : * http://www.apache.org/licenses/LICENSE-2.0
8 : *
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.
14 : */
15 :
16 : #include <vnet/lawful-intercept/lawful_intercept.h>
17 :
18 : li_main_t li_main;
19 :
20 : static clib_error_t *
21 0 : set_li_command_fn (vlib_main_t * vm,
22 : unformat_input_t * input, vlib_cli_command_t * cmd)
23 : {
24 0 : li_main_t *lm = &li_main;
25 : ip4_address_t collector;
26 0 : u8 collector_set = 0;
27 : ip4_address_t src;
28 0 : u8 src_set = 0;
29 : u32 tmp;
30 0 : u16 udp_port = 0;
31 0 : u8 is_add = 1;
32 : int i;
33 :
34 0 : while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
35 : {
36 0 : if (unformat (input, "collector %U", unformat_ip4_address, &collector))
37 0 : collector_set = 1;
38 0 : if (unformat (input, "src %U", unformat_ip4_address, &src))
39 0 : src_set = 1;
40 0 : else if (unformat (input, "udp-port %d", &tmp))
41 0 : udp_port = tmp;
42 0 : else if (unformat (input, "del"))
43 0 : is_add = 0;
44 : else
45 0 : break;
46 : }
47 :
48 0 : if (collector_set == 0)
49 0 : return clib_error_return (0, "collector must be set...");
50 0 : if (src_set == 0)
51 0 : return clib_error_return (0, "src must be set...");
52 0 : if (udp_port == 0)
53 0 : return clib_error_return (0, "udp-port must be set...");
54 :
55 0 : if (is_add == 1)
56 : {
57 0 : for (i = 0; i < vec_len (lm->collectors); i++)
58 : {
59 0 : if (lm->collectors[i].as_u32 == collector.as_u32)
60 : {
61 0 : if (lm->ports[i] == udp_port)
62 0 : return clib_error_return (
63 : 0, "collector %U:%d already configured", format_ip4_address,
64 : &collector, udp_port);
65 : else
66 0 : return clib_error_return (
67 : 0, "collector %U already configured with port %d",
68 : format_ip4_address, &collector, (int) (lm->ports[i]));
69 : }
70 : }
71 0 : vec_add1 (lm->collectors, collector);
72 0 : vec_add1 (lm->ports, udp_port);
73 0 : vec_add1 (lm->src_addrs, src);
74 0 : return 0;
75 : }
76 : else
77 : {
78 0 : for (i = 0; i < vec_len (lm->collectors); i++)
79 : {
80 0 : if ((lm->collectors[i].as_u32 == collector.as_u32)
81 0 : && lm->ports[i] == udp_port)
82 : {
83 0 : vec_delete (lm->collectors, 1, i);
84 0 : vec_delete (lm->ports, 1, i);
85 0 : vec_delete (lm->src_addrs, 1, i);
86 0 : return 0;
87 : }
88 : }
89 0 : return clib_error_return (0, "collector %U:%d not configured",
90 : &collector, udp_port);
91 : }
92 : return 0;
93 : }
94 :
95 : /* *INDENT-OFF* */
96 285289 : VLIB_CLI_COMMAND (set_li_command, static) = {
97 : .path = "set li",
98 : .short_help =
99 : "set li src <ip4-address> collector <ip4-address> udp-port <nnnn>",
100 : .function = set_li_command_fn,
101 : };
102 : /* *INDENT-ON* */
103 :
104 : static clib_error_t *
105 575 : li_init (vlib_main_t * vm)
106 : {
107 575 : li_main_t *lm = &li_main;
108 :
109 575 : lm->vlib_main = vm;
110 575 : lm->vnet_main = vnet_get_main ();
111 575 : lm->hit_node_index = li_hit_node.index;
112 575 : return 0;
113 : }
114 :
115 73151 : VLIB_INIT_FUNCTION (li_init);
116 :
117 :
118 : /*
119 : * fd.io coding-style-patch-verification: ON
120 : *
121 : * Local Variables:
122 : * eval: (c-set-style "gnu")
123 : * End:
124 : */
|