yang, lib: add 'frr-interface.yang' and associated stub callbacks

Introduce frr-interface.yang, which defines a model for managing FRR
interfaces.

Update the 'frr_yang_module_info' array of all daemons that will
implement this module.

Add automatically generated stub callbacks in if.c. These callbacks will
be implemented in the following commit.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
Renato Westphal 2018-07-07 22:04:33 -03:00
parent a7ca2199b7
commit a4bed468f9
15 changed files with 120 additions and 1 deletions

View File

@ -138,6 +138,7 @@ struct option longopts[] =
static const struct frr_yang_module_info *babeld_yang_modules[] = static const struct frr_yang_module_info *babeld_yang_modules[] =
{ {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(babeld, BABELD, FRR_DAEMON_INFO(babeld, BABELD,

View File

@ -131,6 +131,7 @@ struct quagga_signal_t eigrp_signals[] = {
}; };
static const struct frr_yang_module_info *eigrpd_yang_modules[] = { static const struct frr_yang_module_info *eigrpd_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(eigrpd, EIGRP, .vty_port = EIGRP_VTY_PORT, FRR_DAEMON_INFO(eigrpd, EIGRP, .vty_port = EIGRP_VTY_PORT,

View File

@ -151,6 +151,7 @@ struct quagga_signal_t isisd_signals[] = {
}; };
static const struct frr_yang_module_info *isisd_yang_modules[] = { static const struct frr_yang_module_info *isisd_yang_modules[] = {
&frr_interface_info,
}; };
#ifdef FABRICD #ifdef FABRICD

View File

@ -1211,3 +1211,61 @@ void if_link_params_free(struct interface *ifp)
XFREE(MTYPE_IF_LINK_PARAMS, ifp->link_params); XFREE(MTYPE_IF_LINK_PARAMS, ifp->link_params);
ifp->link_params = NULL; ifp->link_params = NULL;
} }
/* ------- Northbound callbacks ------- */
/*
* XPath: /frr-interface:lib/interface
*/
static int lib_interface_create(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
/* TODO: implement me. */
return NB_OK;
}
static int lib_interface_delete(enum nb_event event,
const struct lyd_node *dnode)
{
/* TODO: implement me. */
return NB_OK;
}
/*
* XPath: /frr-interface:lib/interface/description
*/
static int lib_interface_description_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
/* TODO: implement me. */
return NB_OK;
}
static int lib_interface_description_delete(enum nb_event event,
const struct lyd_node *dnode)
{
/* TODO: implement me. */
return NB_OK;
}
/* clang-format off */
const struct frr_yang_module_info frr_interface_info = {
.name = "frr-interface",
.nodes = {
{
.xpath = "/frr-interface:lib/interface",
.cbs.create = lib_interface_create,
.cbs.delete = lib_interface_delete,
},
{
.xpath = "/frr-interface:lib/interface/description",
.cbs.modify = lib_interface_description_modify,
.cbs.delete = lib_interface_description_delete,
},
{
.xpath = NULL,
},
}
};

View File

@ -497,7 +497,6 @@ extern bool if_is_loopback_or_vrf(struct interface *ifp);
extern int if_is_broadcast(struct interface *); extern int if_is_broadcast(struct interface *);
extern int if_is_pointopoint(struct interface *); extern int if_is_pointopoint(struct interface *);
extern int if_is_multicast(struct interface *); extern int if_is_multicast(struct interface *);
extern void if_cmd_init(void);
struct vrf; struct vrf;
extern void if_terminate(struct vrf *vrf); extern void if_terminate(struct vrf *vrf);
extern void if_dump_all(void); extern void if_dump_all(void);
@ -534,4 +533,8 @@ struct nbr_connected *nbr_connected_check(struct interface *, struct prefix *);
struct if_link_params *if_link_params_get(struct interface *); struct if_link_params *if_link_params_get(struct interface *);
void if_link_params_free(struct interface *); void if_link_params_free(struct interface *);
/* Northbound. */
extern void if_cmd_init(void);
extern const struct frr_yang_module_info frr_interface_info;
#endif /* _ZEBRA_IF_H */ #endif /* _ZEBRA_IF_H */

View File

@ -117,6 +117,7 @@ static struct quagga_signal_t sighandlers[] = {
}; };
static const struct frr_yang_module_info *nhrpd_yang_modules[] = { static const struct frr_yang_module_info *nhrpd_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(nhrpd, NHRP, .vty_port = NHRP_VTY_PORT, FRR_DAEMON_INFO(nhrpd, NHRP, .vty_port = NHRP_VTY_PORT,

View File

@ -163,6 +163,7 @@ struct quagga_signal_t ospf6_signals[] = {
}; };
static const struct frr_yang_module_info *ospf6d_yang_modules[] = { static const struct frr_yang_module_info *ospf6d_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(ospf6d, OSPF6, .vty_port = OSPF6_VTY_PORT, FRR_DAEMON_INFO(ospf6d, OSPF6, .vty_port = OSPF6_VTY_PORT,

View File

@ -124,6 +124,7 @@ struct quagga_signal_t ospf_signals[] = {
}; };
static const struct frr_yang_module_info *ospfd_yang_modules[] = { static const struct frr_yang_module_info *ospfd_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(ospfd, OSPF, .vty_port = OSPF_VTY_PORT, FRR_DAEMON_INFO(ospfd, OSPF, .vty_port = OSPF_VTY_PORT,

View File

@ -112,6 +112,7 @@ struct quagga_signal_t pbr_signals[] = {
#define PBR_VTY_PORT 2615 #define PBR_VTY_PORT 2615
static const struct frr_yang_module_info *pbrd_yang_modules[] = { static const struct frr_yang_module_info *pbrd_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(pbrd, PBR, .vty_port = PBR_VTY_PORT, FRR_DAEMON_INFO(pbrd, PBR, .vty_port = PBR_VTY_PORT,

View File

@ -72,6 +72,7 @@ struct zebra_privs_t pimd_privs = {
.cap_num_i = 0}; .cap_num_i = 0};
static const struct frr_yang_module_info *pimd_yang_modules[] = { static const struct frr_yang_module_info *pimd_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(pimd, PIM, .vty_port = PIMD_VTY_PORT, FRR_DAEMON_INFO(pimd, PIM, .vty_port = PIMD_VTY_PORT,

View File

@ -120,6 +120,7 @@ static struct quagga_signal_t ripd_signals[] = {
}; };
static const struct frr_yang_module_info *ripd_yang_modules[] = { static const struct frr_yang_module_info *ripd_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(ripd, RIP, .vty_port = RIP_VTY_PORT, FRR_DAEMON_INFO(ripd, RIP, .vty_port = RIP_VTY_PORT,

View File

@ -119,6 +119,7 @@ struct quagga_signal_t ripng_signals[] = {
}; };
static const struct frr_yang_module_info *ripngd_yang_modules[] = { static const struct frr_yang_module_info *ripngd_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO(ripngd, RIPNG, .vty_port = RIPNG_VTY_PORT, FRR_DAEMON_INFO(ripngd, RIPNG, .vty_port = RIPNG_VTY_PORT,

46
yang/frr-interface.yang Normal file
View File

@ -0,0 +1,46 @@
module frr-interface {
yang-version 1.1;
namespace "http://frrouting.org/yang/interface";
prefix frr-interface;
organization
"Free Range Routing";
contact
"FRR Users List: <mailto:frog@lists.frrouting.org>
FRR Development List: <mailto:dev@lists.frrouting.org>";
description
"This module defines a model for managing FRR interfaces.";
revision 2018-03-28 {
description
"Initial revision.";
}
container lib {
list interface {
key "name vrf";
description
"Interface.";
leaf name {
type string {
length "1..16";
}
description
"Interface name.";
}
leaf vrf {
type string {
length "1..36";
}
description
"VRF this interface is associated with.";
}
leaf description {
type string;
description
"Interface description.";
}
}
}
}

View File

@ -1 +1,2 @@
dist_yangmodels_DATA += yang/frr-module-translator.yang dist_yangmodels_DATA += yang/frr-module-translator.yang
dist_yangmodels_DATA += yang/frr-interface.yang

View File

@ -207,6 +207,7 @@ struct quagga_signal_t zebra_signals[] = {
}; };
static const struct frr_yang_module_info *zebra_yang_modules[] = { static const struct frr_yang_module_info *zebra_yang_modules[] = {
&frr_interface_info,
}; };
FRR_DAEMON_INFO( FRR_DAEMON_INFO(