]> git.proxmox.com Git - mirror_frr.git/blob - zebra/zebra_nb_rpcs.c
Merge pull request #6293 from GalaxyGorilla/json_diff
[mirror_frr.git] / zebra / zebra_nb_rpcs.c
1 /*
2 * Copyright (C) 2020 Cumulus Networks, Inc.
3 * Chirag Shah
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the Free
7 * Software Foundation; either version 2 of the License, or (at your option)
8 * any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; see the file COPYING; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #include <zebra.h>
21 #include "northbound.h"
22 #include "libfrr.h"
23
24 #include "zebra/zebra_nb.h"
25 #include "zebra/zebra_router.h"
26 #include "zebra/zebra_vrf.h"
27 #include "zebra/zebra_vxlan.h"
28
29 /*
30 * XPath: /frr-zebra:clear-evpn-dup-addr
31 */
32 int clear_evpn_dup_addr_rpc(struct nb_cb_rpc_args *args)
33 {
34 struct zebra_vrf *zvrf;
35 int ret = NB_OK;
36 struct yang_data *yang_dup_choice = NULL, *yang_dup_vni = NULL,
37 *yang_dup_ip = NULL, *yang_dup_mac = NULL;
38
39 yang_dup_choice = yang_data_list_find(args->input, "%s/%s", args->xpath,
40 "input/clear-dup-choice");
41
42 zvrf = zebra_vrf_get_evpn();
43
44 if (yang_dup_choice
45 && strcmp(yang_dup_choice->value, "all-case") == 0) {
46 zebra_vxlan_clear_dup_detect_vni_all(zvrf);
47 } else {
48 vni_t vni;
49 struct ipaddr host_ip = {.ipa_type = IPADDR_NONE};
50 struct ethaddr mac;
51
52 yang_dup_vni = yang_data_list_find(
53 args->input, "%s/%s", args->xpath,
54 "input/clear-dup-choice/single-case/vni-id");
55 if (yang_dup_vni) {
56 vni = yang_str2uint32(yang_dup_vni->value);
57
58 yang_dup_mac = yang_data_list_find(
59 args->input, "%s/%s", args->xpath,
60 "input/clear-dup-choice/single-case/vni-id/mac-addr");
61 yang_dup_ip = yang_data_list_find(
62 args->input, "%s/%s", args->xpath,
63 "input/clear-dup-choice/single-case/vni-id/vni-ipaddr");
64
65 if (yang_dup_mac) {
66 yang_str2mac(yang_dup_mac->value, &mac);
67 ret = zebra_vxlan_clear_dup_detect_vni_mac(
68 zvrf, vni, &mac);
69 } else if (yang_dup_ip) {
70 yang_str2ip(yang_dup_ip->value, &host_ip);
71 ret = zebra_vxlan_clear_dup_detect_vni_ip(
72 zvrf, vni, &host_ip);
73 } else
74 ret = zebra_vxlan_clear_dup_detect_vni(zvrf,
75 vni);
76 }
77 }
78 ret = (ret != CMD_SUCCESS) ? NB_ERR : NB_OK;
79
80 return ret;
81 }
82
83 /*
84 * XPath: /frr-zebra:get-route-information
85 */
86 int get_route_information_rpc(struct nb_cb_rpc_args *args)
87 {
88 /* TODO: implement me. */
89 return NB_ERR_NOT_FOUND;
90 }
91
92 /*
93 * XPath: /frr-zebra:get-v6-mroute-info
94 */
95 int get_v6_mroute_info_rpc(struct nb_cb_rpc_args *args)
96 {
97 /* TODO: implement me. */
98 return NB_ERR_NOT_FOUND;
99 }
100
101 /*
102 * XPath: /frr-zebra:get-vrf-info
103 */
104 int get_vrf_info_rpc(struct nb_cb_rpc_args *args)
105 {
106 /* TODO: implement me. */
107 return NB_ERR_NOT_FOUND;
108 }
109
110 /*
111 * XPath: /frr-zebra:get-vrf-vni-info
112 */
113 int get_vrf_vni_info_rpc(struct nb_cb_rpc_args *args)
114 {
115 /* TODO: implement me. */
116 return NB_ERR_NOT_FOUND;
117 }
118
119 /*
120 * XPath: /frr-zebra:get-evpn-info
121 */
122 int get_evpn_info_rpc(struct nb_cb_rpc_args *args)
123 {
124 /* TODO: implement me. */
125 return NB_ERR_NOT_FOUND;
126 }
127
128 /*
129 * XPath: /frr-zebra:get-vni-info
130 */
131 int get_vni_info_rpc(struct nb_cb_rpc_args *args)
132 {
133 /* TODO: implement me. */
134 return NB_ERR_NOT_FOUND;
135 }
136
137 /*
138 * XPath: /frr-zebra:get-evpn-vni-rmac
139 */
140 int get_evpn_vni_rmac_rpc(struct nb_cb_rpc_args *args)
141 {
142 /* TODO: implement me. */
143 return NB_ERR_NOT_FOUND;
144 }
145
146 /*
147 * XPath: /frr-zebra:get-evpn-vni-nexthops
148 */
149 int get_evpn_vni_nexthops_rpc(struct nb_cb_rpc_args *args)
150 {
151 /* TODO: implement me. */
152 return NB_ERR_NOT_FOUND;
153 }
154
155 /*
156 * XPath: /frr-zebra:get-evpn-macs
157 */
158 int get_evpn_macs_rpc(struct nb_cb_rpc_args *args)
159 {
160 /* TODO: implement me. */
161 return NB_ERR_NOT_FOUND;
162 }
163
164 /*
165 * XPath: /frr-zebra:get-evpn-arp-cache
166 */
167 int get_evpn_arp_cache_rpc(struct nb_cb_rpc_args *args)
168 {
169 /* TODO: implement me. */
170 return NB_ERR_NOT_FOUND;
171 }
172
173 /*
174 * XPath: /frr-zebra:get-pbr-ipset
175 */
176 int get_pbr_ipset_rpc(struct nb_cb_rpc_args *args)
177 {
178 /* TODO: implement me. */
179 return NB_ERR_NOT_FOUND;
180 }
181
182 /*
183 * XPath: /frr-zebra:get-pbr-iptable
184 */
185 int get_pbr_iptable_rpc(struct nb_cb_rpc_args *args)
186 {
187 /* TODO: implement me. */
188 return NB_ERR_NOT_FOUND;
189 }
190
191 /*
192 * XPath: /frr-zebra:get-debugs
193 */
194 int get_debugs_rpc(struct nb_cb_rpc_args *args)
195 {
196 /* TODO: implement me. */
197 return NB_ERR_NOT_FOUND;
198 }