Line data Source code
1 : /*
2 : * Copyright (C) 2020 Vmware
3 : * Sarita Patra
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 :
22 : #include "lib/command.h"
23 : #include "lib/log.h"
24 : #include "lib/northbound.h"
25 : #include "lib/routemap.h"
26 : #include "ospf6_routemap_nb.h"
27 :
28 : /*
29 : * XPath:
30 : * /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-ospf-route-map:metric-type
31 : */
32 0 : int lib_route_map_entry_set_action_rmap_set_action_metric_type_modify(
33 : struct nb_cb_modify_args *args)
34 : {
35 0 : struct routemap_hook_context *rhc;
36 0 : const char *type;
37 0 : int rv;
38 :
39 0 : switch (args->event) {
40 : case NB_EV_VALIDATE:
41 : case NB_EV_PREPARE:
42 : case NB_EV_ABORT:
43 : break;
44 0 : case NB_EV_APPLY:
45 : /* Add configuration. */
46 0 : rhc = nb_running_get_entry(args->dnode, NULL, true);
47 0 : type = yang_dnode_get_string(args->dnode, NULL);
48 :
49 : /* Set destroy information. */
50 0 : rhc->rhc_shook = generic_set_delete;
51 0 : rhc->rhc_rule = "metric-type";
52 0 : rhc->rhc_event = RMAP_EVENT_SET_DELETED;
53 :
54 0 : rv = generic_set_add(rhc->rhc_rmi, "metric-type", type,
55 : args->errmsg, args->errmsg_len);
56 0 : if (rv != CMD_SUCCESS) {
57 0 : rhc->rhc_mhook = NULL;
58 0 : return NB_ERR_INCONSISTENCY;
59 : }
60 : }
61 :
62 : return NB_OK;
63 : }
64 :
65 0 : int lib_route_map_entry_set_action_rmap_set_action_metric_type_destroy(
66 : struct nb_cb_destroy_args *args)
67 : {
68 0 : switch (args->event) {
69 : case NB_EV_VALIDATE:
70 : case NB_EV_PREPARE:
71 : case NB_EV_ABORT:
72 : break;
73 0 : case NB_EV_APPLY:
74 0 : return lib_route_map_entry_set_destroy(args);
75 : }
76 :
77 : return NB_OK;
78 : }
79 :
80 : /*
81 : * XPath:
82 : * /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-ospf6-route-map:ipv6-address
83 : */
84 0 : int lib_route_map_entry_set_action_rmap_set_action_ipv6_address_modify(
85 : struct nb_cb_modify_args *args)
86 : {
87 0 : struct routemap_hook_context *rhc;
88 0 : const char *ipv6_addr;
89 0 : int rv;
90 :
91 0 : switch (args->event) {
92 : case NB_EV_VALIDATE:
93 : case NB_EV_PREPARE:
94 : case NB_EV_ABORT:
95 : break;
96 0 : case NB_EV_APPLY:
97 : /* Add configuration. */
98 0 : rhc = nb_running_get_entry(args->dnode, NULL, true);
99 0 : ipv6_addr = yang_dnode_get_string(args->dnode, NULL);
100 :
101 : /* Set destroy information. */
102 0 : rhc->rhc_shook = generic_set_delete;
103 0 : rhc->rhc_rule = "forwarding-address";
104 0 : rhc->rhc_event = RMAP_EVENT_SET_DELETED;
105 :
106 0 : rv = generic_set_add(rhc->rhc_rmi, "forwarding-address",
107 : ipv6_addr,
108 : args->errmsg, args->errmsg_len);
109 0 : if (rv != CMD_SUCCESS) {
110 0 : rhc->rhc_mhook = NULL;
111 0 : return NB_ERR_INCONSISTENCY;
112 : }
113 : }
114 :
115 : return NB_OK;
116 : }
117 :
118 0 : int lib_route_map_entry_set_action_rmap_set_action_ipv6_address_destroy(
119 : struct nb_cb_destroy_args *args)
120 : {
121 0 : switch (args->event) {
122 : case NB_EV_VALIDATE:
123 : case NB_EV_PREPARE:
124 : case NB_EV_ABORT:
125 : break;
126 0 : case NB_EV_APPLY:
127 0 : return lib_route_map_entry_set_destroy(args);
128 : }
129 :
130 : return NB_OK;
131 : }
|