/*------------------------------------------
* bgp_rfapi_is_vnc_configured
*
- * Returns if VNC (BGP VPN messaging /VPN & encap SAFIs) are configured
+ * Returns if VNC is configured
*
* input:
* bgp NULL (=use default instance)
*
* return value: If VNC is configured for the bgpd instance
* 0 Success
+ * EPERM Not Default instance (VNC operations not allowed)
* ENXIO VNC not configured
--------------------------------------------*/
int bgp_rfapi_is_vnc_configured(struct bgp *bgp)
if (bgp == NULL)
bgp = bgp_get_default();
- if (bgp && bgp->rfapi_cfg) {
- struct peer *peer;
- struct peer_group *group;
- struct listnode *node, *nnode;
- /* if have configured VPN neighbors, assume running VNC */
- for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
- if (group->conf->afc[AFI_IP][SAFI_MPLS_VPN]
- || group->conf->afc[AFI_IP6][SAFI_MPLS_VPN])
- return 0;
- }
- for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
- if (peer->afc[AFI_IP][SAFI_MPLS_VPN]
- || peer->afc[AFI_IP6][SAFI_MPLS_VPN])
- return 0;
- }
- }
+ if (bgp && bgp->inst_type != BGP_INSTANCE_TYPE_DEFAULT)
+ return EPERM;
+
+ if (bgp && bgp->rfapi_cfg)
+ return 0;
return ENXIO;
}
/***********************************************************************
* VNC Configuration/CLI
***********************************************************************/
-
+#define VNC_VTY_CONFIG_CHECK(bgp) \
+ { \
+ switch (bgp_rfapi_is_vnc_configured(bgp)) { \
+ case EPERM: \
+ vty_out(vty, "VNC operations only permitted on default BGP instance.\n"); \
+ return CMD_WARNING_CONFIG_FAILED; \
+ break; \
+ case ENXIO: \
+ vty_out(vty, "VNC not configured.\n"); \
+ return CMD_WARNING_CONFIG_FAILED; \
+ break; \
+ default: \
+ break; \
+ } \
+ }
DEFUN (vnc_advertise_un_method,
vnc_advertise_un_method_cmd,
"Via Tunnel Encap attribute (in VPN SAFI)\n")
{
VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "VNC not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
+ VNC_VTY_CONFIG_CHECK(bgp);
if (!strncmp(argv[2]->arg, "encap-safi", 7)) {
bgp->rfapi_cfg->flags |= BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP;
DEFUN_NOSH (vnc_defaults,
- vnc_defaults_cmd,
- "vnc defaults", VNC_CONFIG_STR "Configure default NVE group\n")
+ vnc_defaults_cmd,
+ "vnc defaults", VNC_CONFIG_STR "Configure default NVE group\n")
{
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VNC_VTY_CONFIG_CHECK(bgp);
+ if (bgp->inst_type != BGP_INSTANCE_TYPE_DEFAULT) {
+ vty_out(vty, "Malformed community-list value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
vty->node = BGP_VNC_DEFAULTS_NODE;
return CMD_SUCCESS;
}
uint32_t localadmin;
char *endptr;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
localadmin = strtoul(argv[4]->arg, &endptr, 0);
if (!argv[4]->arg[0] || *endptr) {
VTY_DECLVAR_CONTEXT(bgp, bgp);
vnc_redist_mode_t newmode;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
+ VNC_VTY_CONFIG_CHECK(bgp);
switch (argv[3]->arg[0]) {
case 'n':
int type = ZEBRA_ROUTE_MAX; /* init to bogus value */
afi_t afi;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
if (rfapi_str2route_type(argv[2]->arg, argv[3]->arg, &afi, &type)) {
vty_out(vty, "%% Invalid route type\n");
int type;
afi_t afi;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
if (rfapi_str2route_type(argv[3]->arg, argv[4]->arg, &afi, &type)) {
vty_out(vty, "%% Invalid route type\n");
int type;
afi_t afi;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
if (rfapi_str2route_type(argv[2]->arg, "bgp-direct-to-nve-groups", &afi,
&type)) {
"NVE group\n" "Group name\n")
{
VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
vnc_redistribute_prechange(bgp);
{
VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
vnc_redistribute_prechange(bgp);
"Allow lifetime to never expire\n")
{
VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
vnc_redistribute_prechange(bgp);
struct rfapi_cfg *hc;
uint8_t route_type = 0;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (strmatch(argv[3]->text, "bgp-direct")) {
route_type = ZEBRA_ROUTE_BGP_DIRECT;
afi_t afi;
uint8_t route_type = 0;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (strmatch(argv[2]->text, "bgp-direct")) {
route_type = ZEBRA_ROUTE_BGP_DIRECT;
struct rfapi_cfg *hc;
uint8_t route_type = 0;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (strmatch(argv[3]->text, "bgp-direct")) {
route_type = ZEBRA_ROUTE_BGP_DIRECT;
struct rfapi_cfg *hc;
uint8_t route_type = 0;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (strmatch(argv[2]->text, "bgp-direct")) {
route_type = ZEBRA_ROUTE_BGP_DIRECT;
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg)
afi_t afi;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
afi_t afi;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
uint32_t oldmode = 0;
uint32_t newmode = 0;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "VNC not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
if (argv[2]->arg[0] == 'b') {
oldmode = bgp->rfapi_cfg->flags
VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_nve_group_cfg *rfg_new;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
rfg_new = bgp_rfapi_cfg_match_byname(bgp, argv[5]->arg,
RFAPI_GROUP_CFG_NVE);
struct listnode *node, *nnode;
struct rfapi_rfg_name *rfgn;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
if (argv[2]->arg[0] == 'b') {
for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->rfg_export_direct_bgp_l,
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
afi_t afi;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
afi_t afi;
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- if (!bgp->rfapi_cfg) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
/* make sure it's still in list */
if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
struct rfapi_cfg *hc;
afi_t afi;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (strmatch(argv[4]->text, "ipv4")) {
afi = AFI_IP;
struct rfapi_cfg *hc;
afi_t afi;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (strmatch(argv[3]->text, "ipv4")) {
afi = AFI_IP;
VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (argv[3]->arg[0] == 'b') {
if (((argc > 5) && hc->routemap_export_bgp_name
VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc;
- if (!(hc = bgp->rfapi_cfg)) {
- vty_out(vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VNC_VTY_CONFIG_CHECK(bgp);
+ hc = bgp->rfapi_cfg;
if (argv[2]->arg[0] == 'b') {
if (hc->routemap_export_bgp_name)
struct listnode *node, *nnode;
struct rfapi_rfg_name *rfgn;
+ VNC_VTY_CONFIG_CHECK(bgp);
+
/* Search for name */
rfg = bgp_rfapi_cfg_match_byname(bgp, argv[2]->arg,
RFAPI_GROUP_CFG_NVE);
{
struct rfapi_l2_group_cfg *rfg;
VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VNC_VTY_CONFIG_CHECK(bgp);
/* Search for name */
rfg = rfapi_l2_group_lookup_byname(bgp, argv[2]->arg);