mgmtd, staticd: output staticd configuration from mgmtd

As mgmtd now implements vty for staticd, it's logical to output the
configuration from there as well. Fully-converted backend daemons should
not handle vty commands at all.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
Igor Ryzhov 2023-11-20 14:02:29 +01:00
parent a22f5a5289
commit d532771eaa
5 changed files with 82 additions and 65 deletions

View file

@ -185,6 +185,10 @@ static void mgmt_vrf_terminate(void)
vrf_terminate(); vrf_terminate();
} }
#ifdef HAVE_STATICD
extern const struct frr_yang_module_info frr_staticd_info;
#endif
/* /*
* List of YANG modules to be loaded in the process context of * List of YANG modules to be loaded in the process context of
* MGMTd. * MGMTd.
@ -201,11 +205,10 @@ static const struct frr_yang_module_info *const mgmt_yang_modules[] = {
/* /*
* YANG module info supported by backend clients get added here. * YANG module info supported by backend clients get added here.
* NOTE: Always set .ignore_cbs true for to avoid validating * NOTE: Always set .ignore_cbs true for to avoid validating
* backend northbound callbacks during loading. * backend configuration northbound callbacks during loading.
*/ */
#ifdef HAVE_STATICD #ifdef HAVE_STATICD
&(struct frr_yang_module_info){.name = "frr-staticd", &frr_staticd_info,
.ignore_cbs = true},
#endif #endif
}; };

View file

@ -15,19 +15,11 @@
const struct frr_yang_module_info frr_staticd_info = { const struct frr_yang_module_info frr_staticd_info = {
.name = "frr-staticd", .name = "frr-staticd",
.nodes = { .nodes = {
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd",
.cbs = {
.cli_show = static_cli_show,
.cli_show_end = static_cli_show_end,
}
},
{ {
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list", .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list",
.cbs = { .cbs = {
.create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_create, .create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_create,
.destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_destroy, .destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_destroy,
.cli_cmp = static_route_list_cli_cmp,
} }
}, },
{ {
@ -35,7 +27,6 @@ const struct frr_yang_module_info frr_staticd_info = {
.cbs = { .cbs = {
.create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_create, .create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_create,
.destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_destroy, .destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_destroy,
.cli_cmp = static_path_list_cli_cmp,
} }
}, },
{ {
@ -51,8 +42,6 @@ const struct frr_yang_module_info frr_staticd_info = {
.create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_create, .create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_create,
.destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_destroy, .destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_destroy,
.pre_validate = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_pre_validate, .pre_validate = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_pre_validate,
.cli_show = static_nexthop_cli_show,
.cli_cmp = static_nexthop_cli_cmp,
} }
}, },
{ {
@ -150,7 +139,6 @@ const struct frr_yang_module_info frr_staticd_info = {
.cbs = { .cbs = {
.create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_create, .create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_create,
.destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_destroy, .destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_destroy,
.cli_cmp = static_src_list_cli_cmp,
} }
}, },
{ {
@ -158,7 +146,6 @@ const struct frr_yang_module_info frr_staticd_info = {
.cbs = { .cbs = {
.create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_create, .create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_create,
.destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_destroy, .destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_destroy,
.cli_cmp = static_path_list_cli_cmp,
} }
}, },
{ {
@ -174,8 +161,6 @@ const struct frr_yang_module_info frr_staticd_info = {
.create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_frr_nexthops_nexthop_create, .create = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_frr_nexthops_nexthop_create,
.destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_frr_nexthops_nexthop_destroy, .destroy = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_list_path_list_frr_nexthops_nexthop_destroy,
.pre_validate = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_pre_validate, .pre_validate = routing_control_plane_protocols_control_plane_protocol_staticd_route_list_path_list_frr_nexthops_nexthop_pre_validate,
.cli_show = static_src_nexthop_cli_show,
.cli_cmp = static_nexthop_cli_cmp,
} }
}, },
{ {

View file

@ -124,26 +124,12 @@ struct static_vrf *static_vrf_lookup_by_name(const char *name)
return NULL; return NULL;
} }
static int static_vrf_config_write(struct vty *vty)
{
struct lyd_node *dnode;
int written = 0;
dnode = yang_dnode_get(running_config->dnode, "/frr-routing:routing");
if (dnode) {
nb_cli_show_dnode_cmds(vty, dnode, false);
written = 1;
}
return written;
}
void static_vrf_init(void) void static_vrf_init(void)
{ {
vrf_init(static_vrf_new, static_vrf_enable, static_vrf_disable, vrf_init(static_vrf_new, static_vrf_enable, static_vrf_disable,
static_vrf_delete); static_vrf_delete);
vrf_cmd_init(static_vrf_config_write); vrf_cmd_init(NULL);
} }
void static_vrf_terminate(void) void static_vrf_terminate(void)

View file

@ -1234,8 +1234,10 @@ DEFPY_YANG(ipv6_route_vrf, ipv6_route_vrf_cmd,
return static_route_nb_run(vty, &args); return static_route_nb_run(vty, &args);
} }
void static_cli_show(struct vty *vty, const struct lyd_node *dnode, #ifdef INCLUDE_MGMTD_CMDDEFS_ONLY
bool show_defaults)
static void static_cli_show(struct vty *vty, const struct lyd_node *dnode,
bool show_defaults)
{ {
const char *vrf; const char *vrf;
@ -1244,7 +1246,7 @@ void static_cli_show(struct vty *vty, const struct lyd_node *dnode,
vty_out(vty, "vrf %s\n", vrf); vty_out(vty, "vrf %s\n", vrf);
} }
void static_cli_show_end(struct vty *vty, const struct lyd_node *dnode) static void static_cli_show_end(struct vty *vty, const struct lyd_node *dnode)
{ {
const char *vrf; const char *vrf;
@ -1444,8 +1446,9 @@ static void nexthop_cli_show(struct vty *vty, const struct lyd_node *route,
vty_out(vty, "\n"); vty_out(vty, "\n");
} }
void static_nexthop_cli_show(struct vty *vty, const struct lyd_node *dnode, static void static_nexthop_cli_show(struct vty *vty,
bool show_defaults) const struct lyd_node *dnode,
bool show_defaults)
{ {
const struct lyd_node *path = yang_dnode_get_parent(dnode, "path-list"); const struct lyd_node *path = yang_dnode_get_parent(dnode, "path-list");
const struct lyd_node *route = const struct lyd_node *route =
@ -1454,8 +1457,9 @@ void static_nexthop_cli_show(struct vty *vty, const struct lyd_node *dnode,
nexthop_cli_show(vty, route, NULL, path, dnode, show_defaults); nexthop_cli_show(vty, route, NULL, path, dnode, show_defaults);
} }
void static_src_nexthop_cli_show(struct vty *vty, const struct lyd_node *dnode, static void static_src_nexthop_cli_show(struct vty *vty,
bool show_defaults) const struct lyd_node *dnode,
bool show_defaults)
{ {
const struct lyd_node *path = yang_dnode_get_parent(dnode, "path-list"); const struct lyd_node *path = yang_dnode_get_parent(dnode, "path-list");
const struct lyd_node *src = yang_dnode_get_parent(path, "src-list"); const struct lyd_node *src = yang_dnode_get_parent(path, "src-list");
@ -1464,8 +1468,8 @@ void static_src_nexthop_cli_show(struct vty *vty, const struct lyd_node *dnode,
nexthop_cli_show(vty, route, src, path, dnode, show_defaults); nexthop_cli_show(vty, route, src, path, dnode, show_defaults);
} }
int static_nexthop_cli_cmp(const struct lyd_node *dnode1, static int static_nexthop_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2) const struct lyd_node *dnode2)
{ {
enum static_nh_type nh_type1, nh_type2; enum static_nh_type nh_type1, nh_type2;
struct prefix prefix1, prefix2; struct prefix prefix1, prefix2;
@ -1519,8 +1523,8 @@ int static_nexthop_cli_cmp(const struct lyd_node *dnode1,
return if_cmp_name_func(vrf1, vrf2); return if_cmp_name_func(vrf1, vrf2);
} }
int static_route_list_cli_cmp(const struct lyd_node *dnode1, static int static_route_list_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2) const struct lyd_node *dnode2)
{ {
const char *afi_safi1, *afi_safi2; const char *afi_safi1, *afi_safi2;
afi_t afi1, afi2; afi_t afi1, afi2;
@ -1545,8 +1549,8 @@ int static_route_list_cli_cmp(const struct lyd_node *dnode1,
return prefix_cmp(&prefix1, &prefix2); return prefix_cmp(&prefix1, &prefix2);
} }
int static_src_list_cli_cmp(const struct lyd_node *dnode1, static int static_src_list_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2) const struct lyd_node *dnode2)
{ {
struct prefix prefix1, prefix2; struct prefix prefix1, prefix2;
@ -1556,8 +1560,8 @@ int static_src_list_cli_cmp(const struct lyd_node *dnode1,
return prefix_cmp(&prefix1, &prefix2); return prefix_cmp(&prefix1, &prefix2);
} }
int static_path_list_cli_cmp(const struct lyd_node *dnode1, static int static_path_list_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2) const struct lyd_node *dnode2)
{ {
uint32_t table_id1, table_id2; uint32_t table_id1, table_id2;
uint8_t distance1, distance2; uint8_t distance1, distance2;
@ -1574,7 +1578,62 @@ int static_path_list_cli_cmp(const struct lyd_node *dnode1,
return (int)distance1 - (int)distance2; return (int)distance1 - (int)distance2;
} }
#ifndef INCLUDE_MGMTD_CMDDEFS_ONLY const struct frr_yang_module_info frr_staticd_info = {
.name = "frr-staticd",
.ignore_cbs = true,
.nodes = {
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd",
.cbs = {
.cli_show = static_cli_show,
.cli_show_end = static_cli_show_end,
}
},
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list",
.cbs = {
.cli_cmp = static_route_list_cli_cmp,
}
},
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list/path-list",
.cbs = {
.cli_cmp = static_path_list_cli_cmp,
}
},
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list/path-list/frr-nexthops/nexthop",
.cbs = {
.cli_show = static_nexthop_cli_show,
.cli_cmp = static_nexthop_cli_cmp,
}
},
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list/src-list",
.cbs = {
.cli_cmp = static_src_list_cli_cmp,
}
},
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list/src-list/path-list",
.cbs = {
.cli_cmp = static_path_list_cli_cmp,
}
},
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-staticd:staticd/route-list/src-list/path-list/frr-nexthops/nexthop",
.cbs = {
.cli_show = static_src_nexthop_cli_show,
.cli_cmp = static_nexthop_cli_cmp,
}
},
{
.xpath = NULL,
},
}
};
#else /* ifdef INCLUDE_MGMTD_CMDDEFS_ONLY */
DEFPY_YANG(debug_staticd, debug_staticd_cmd, DEFPY_YANG(debug_staticd, debug_staticd_cmd,
"[no] debug static [{events$events|route$route|bfd$bfd}]", "[no] debug static [{events$events|route$route|bfd$bfd}]",

View file

@ -11,22 +11,6 @@
extern "C" { extern "C" {
#endif #endif
void static_cli_show(struct vty *vty, const struct lyd_node *dnode,
bool show_defaults);
void static_cli_show_end(struct vty *vty, const struct lyd_node *dnode);
void static_nexthop_cli_show(struct vty *vty, const struct lyd_node *dnode,
bool show_defaults);
void static_src_nexthop_cli_show(struct vty *vty, const struct lyd_node *dnode,
bool show_defaults);
int static_nexthop_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2);
int static_route_list_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2);
int static_src_list_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2);
int static_path_list_cli_cmp(const struct lyd_node *dnode1,
const struct lyd_node *dnode2);
void static_vty_init(void); void static_vty_init(void);
#ifdef __cplusplus #ifdef __cplusplus