mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 05:27:47 +00:00
ospfd: Display all vrf aware interface config
OSPF interface specific configuration can be done independent of router ospf [vrf x] global config. In cases where ospf interface non default vrf configuration is done prior to 'router ospf vrf x', show running-config would not display such configuration. To display configuration now walk all vrfs and interface list and only display where OSPF configure params are set. Ticket:CM-18952 Testing Done: Tried ospf interface specific configuration with VRF, where router ospf vrf x is not present. Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
This commit is contained in:
parent
d17ea5225b
commit
c7fd72d2f7
399
ospfd/ospf_vty.c
399
ospfd/ospf_vty.c
@ -9637,7 +9637,7 @@ const char *ospf_int_type_str[] = {"unknown", /* should never be used. */
|
|||||||
|
|
||||||
static int config_write_interface_one(struct vty *vty, struct ospf *ospf)
|
static int config_write_interface_one(struct vty *vty, struct ospf *ospf)
|
||||||
{
|
{
|
||||||
struct vrf *vrf = vrf_lookup_by_id(ospf->vrf_id);
|
struct vrf *vrf = NULL;
|
||||||
struct listnode *node;
|
struct listnode *node;
|
||||||
struct interface *ifp;
|
struct interface *ifp;
|
||||||
struct crypt_key *ck;
|
struct crypt_key *ck;
|
||||||
@ -9645,241 +9645,250 @@ static int config_write_interface_one(struct vty *vty, struct ospf *ospf)
|
|||||||
struct ospf_if_params *params;
|
struct ospf_if_params *params;
|
||||||
int write = 0;
|
int write = 0;
|
||||||
|
|
||||||
FOR_ALL_INTERFACES (vrf, ifp) {
|
/* Display all VRF aware OSPF interface configuration */
|
||||||
struct vrf *vrf = NULL;
|
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
|
||||||
|
FOR_ALL_INTERFACES (vrf, ifp) {
|
||||||
|
|
||||||
if (memcmp(ifp->name, "VLINK", 5) == 0)
|
if (memcmp(ifp->name, "VLINK", 5) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
vrf = vrf_lookup_by_id(ifp->vrf_id);
|
vty_frame(vty, "!\n");
|
||||||
|
if (ifp->vrf_id == VRF_DEFAULT)
|
||||||
|
vty_frame(vty, "interface %s\n", ifp->name);
|
||||||
|
else
|
||||||
|
vty_frame(vty, "interface %s vrf %s\n",
|
||||||
|
ifp->name, vrf->name);
|
||||||
|
if (ifp->desc)
|
||||||
|
vty_out(vty, " description %s\n", ifp->desc);
|
||||||
|
|
||||||
vty_frame(vty, "!\n");
|
write++;
|
||||||
if (ifp->vrf_id == VRF_DEFAULT || vrf == NULL)
|
|
||||||
vty_frame(vty, "interface %s\n", ifp->name);
|
|
||||||
else
|
|
||||||
vty_frame(vty, "interface %s vrf %s\n",
|
|
||||||
ifp->name, vrf->name);
|
|
||||||
if (ifp->desc)
|
|
||||||
vty_out(vty, " description %s\n", ifp->desc);
|
|
||||||
|
|
||||||
write++;
|
params = IF_DEF_PARAMS(ifp);
|
||||||
|
|
||||||
params = IF_DEF_PARAMS(ifp);
|
do {
|
||||||
|
/* Interface Network print. */
|
||||||
|
if (OSPF_IF_PARAM_CONFIGURED(params, type)
|
||||||
|
&& params->type != OSPF_IFTYPE_LOOPBACK) {
|
||||||
|
if (params->type !=
|
||||||
|
ospf_default_iftype(ifp)) {
|
||||||
|
vty_out(vty, " ip ospf network %s",
|
||||||
|
ospf_int_type_str
|
||||||
|
[params->type]);
|
||||||
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
|
vty_out(vty, " %s",
|
||||||
|
inet_ntoa(
|
||||||
|
rn->p.u.prefix4));
|
||||||
|
vty_out(vty, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
do {
|
/* OSPF interface authentication print */
|
||||||
/* Interface Network print. */
|
if (OSPF_IF_PARAM_CONFIGURED(params, auth_type)
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, type)
|
&& params->auth_type != OSPF_AUTH_NOTSET) {
|
||||||
&& params->type != OSPF_IFTYPE_LOOPBACK) {
|
const char *auth_str;
|
||||||
if (params->type != ospf_default_iftype(ifp)) {
|
|
||||||
vty_out(vty, " ip ospf network %s",
|
/* Translation tables are not that much help
|
||||||
ospf_int_type_str
|
* here due to syntax
|
||||||
[params->type]);
|
* of the simple option */
|
||||||
|
switch (params->auth_type) {
|
||||||
|
|
||||||
|
case OSPF_AUTH_NULL:
|
||||||
|
auth_str = " null";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OSPF_AUTH_SIMPLE:
|
||||||
|
auth_str = "";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OSPF_AUTH_CRYPTOGRAPHIC:
|
||||||
|
auth_str = " message-digest";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
auth_str = "";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
vty_out(vty, " ip ospf authentication%s",
|
||||||
|
auth_str);
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
vty_out(vty, " %s",
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
rn->p.u.prefix4));
|
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* OSPF interface authentication print */
|
/* Simple Authentication Password print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, auth_type)
|
if (OSPF_IF_PARAM_CONFIGURED(params, auth_simple)
|
||||||
&& params->auth_type != OSPF_AUTH_NOTSET) {
|
&& params->auth_simple[0] != '\0') {
|
||||||
const char *auth_str;
|
vty_out(vty, " ip ospf authentication-key %s",
|
||||||
|
params->auth_simple);
|
||||||
/* Translation tables are not that much help
|
|
||||||
* here due to syntax
|
|
||||||
* of the simple option */
|
|
||||||
switch (params->auth_type) {
|
|
||||||
|
|
||||||
case OSPF_AUTH_NULL:
|
|
||||||
auth_str = " null";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OSPF_AUTH_SIMPLE:
|
|
||||||
auth_str = "";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OSPF_AUTH_CRYPTOGRAPHIC:
|
|
||||||
auth_str = " message-digest";
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
auth_str = "";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
vty_out(vty, " ip ospf authentication%s",
|
|
||||||
auth_str);
|
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
|
||||||
vty_out(vty, " %s",
|
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
|
||||||
vty_out(vty, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Simple Authentication Password print. */
|
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, auth_simple)
|
|
||||||
&& params->auth_simple[0] != '\0') {
|
|
||||||
vty_out(vty, " ip ospf authentication-key %s",
|
|
||||||
params->auth_simple);
|
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
|
||||||
vty_out(vty, " %s",
|
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
|
||||||
vty_out(vty, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Cryptographic Authentication Key print. */
|
|
||||||
if (params && params->auth_crypt) {
|
|
||||||
for (ALL_LIST_ELEMENTS_RO(params->auth_crypt,
|
|
||||||
node, ck)) {
|
|
||||||
vty_out(vty,
|
|
||||||
" ip ospf message-digest-key %d md5 %s",
|
|
||||||
ck->key_id, ck->auth_key);
|
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
vty_out(vty, " %s",
|
vty_out(vty, " %s",
|
||||||
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
|
vty_out(vty, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cryptographic Authentication Key print. */
|
||||||
|
if (params && params->auth_crypt) {
|
||||||
|
for (ALL_LIST_ELEMENTS_RO(
|
||||||
|
params->auth_crypt,
|
||||||
|
node, ck)) {
|
||||||
|
vty_out(vty,
|
||||||
|
" ip ospf message-digest-key %d md5 %s",
|
||||||
|
ck->key_id,
|
||||||
|
ck->auth_key);
|
||||||
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
|
vty_out(vty, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Interface Output Cost print. */
|
||||||
|
if (OSPF_IF_PARAM_CONFIGURED(params,
|
||||||
|
output_cost_cmd)) {
|
||||||
|
vty_out(vty, " ip ospf cost %u",
|
||||||
|
params->output_cost_cmd);
|
||||||
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
|
vty_out(vty, " %s",
|
||||||
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Interface Output Cost print. */
|
/* Hello Interval print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params,
|
if (OSPF_IF_PARAM_CONFIGURED(params, v_hello)
|
||||||
output_cost_cmd)) {
|
&& params->v_hello !=
|
||||||
vty_out(vty, " ip ospf cost %u",
|
OSPF_HELLO_INTERVAL_DEFAULT) {
|
||||||
params->output_cost_cmd);
|
vty_out(vty, " ip ospf hello-interval %u",
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
params->v_hello);
|
||||||
vty_out(vty, " %s",
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hello Interval print. */
|
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, v_hello)
|
|
||||||
&& params->v_hello != OSPF_HELLO_INTERVAL_DEFAULT) {
|
|
||||||
vty_out(vty, " ip ospf hello-interval %u",
|
|
||||||
params->v_hello);
|
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
|
||||||
vty_out(vty, " %s",
|
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
|
||||||
vty_out(vty, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Router Dead Interval print. */
|
/* Router Dead Interval print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, v_wait)
|
if (OSPF_IF_PARAM_CONFIGURED(params, v_wait)
|
||||||
&& params->v_wait
|
&& params->v_wait
|
||||||
!= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT) {
|
!= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT) {
|
||||||
vty_out(vty, " ip ospf dead-interval ");
|
vty_out(vty, " ip ospf dead-interval ");
|
||||||
|
|
||||||
/* fast hello ? */
|
/* fast hello ? */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params,
|
if (OSPF_IF_PARAM_CONFIGURED(params,
|
||||||
fast_hello))
|
fast_hello))
|
||||||
vty_out(vty,
|
vty_out(vty,
|
||||||
"minimal hello-multiplier %d",
|
"minimal hello-multiplier %d",
|
||||||
params->fast_hello);
|
params->fast_hello);
|
||||||
else
|
else
|
||||||
vty_out(vty, "%u", params->v_wait);
|
vty_out(vty, "%u",
|
||||||
|
params->v_wait);
|
||||||
|
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
vty_out(vty, " %s",
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Router Priority print. */
|
/* Router Priority print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, priority)
|
if (OSPF_IF_PARAM_CONFIGURED(params, priority)
|
||||||
&& params->priority
|
&& params->priority
|
||||||
!= OSPF_ROUTER_PRIORITY_DEFAULT) {
|
!= OSPF_ROUTER_PRIORITY_DEFAULT) {
|
||||||
vty_out(vty, " ip ospf priority %u",
|
vty_out(vty, " ip ospf priority %u",
|
||||||
params->priority);
|
params->priority);
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
vty_out(vty, " %s",
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retransmit Interval print. */
|
/* Retransmit Interval print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params,
|
if (OSPF_IF_PARAM_CONFIGURED(params,
|
||||||
retransmit_interval)
|
retransmit_interval)
|
||||||
&& params->retransmit_interval
|
&& params->retransmit_interval
|
||||||
!= OSPF_RETRANSMIT_INTERVAL_DEFAULT) {
|
!= OSPF_RETRANSMIT_INTERVAL_DEFAULT) {
|
||||||
vty_out(vty, " ip ospf retransmit-interval %u",
|
vty_out(vty, " ip ospf retransmit-interval %u",
|
||||||
params->retransmit_interval);
|
params->retransmit_interval);
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
vty_out(vty, " %s",
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transmit Delay print. */
|
/* Transmit Delay print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, transmit_delay)
|
if (OSPF_IF_PARAM_CONFIGURED(params,
|
||||||
&& params->transmit_delay
|
transmit_delay)
|
||||||
!= OSPF_TRANSMIT_DELAY_DEFAULT) {
|
&& params->transmit_delay
|
||||||
vty_out(vty, " ip ospf transmit-delay %u",
|
!= OSPF_TRANSMIT_DELAY_DEFAULT) {
|
||||||
params->transmit_delay);
|
vty_out(vty, " ip ospf transmit-delay %u",
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
params->transmit_delay);
|
||||||
vty_out(vty, " %s",
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Area print. */
|
/* Area print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
|
if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
|
||||||
if (ospf->instance)
|
if (ospf->instance)
|
||||||
vty_out(vty, " ip ospf %d",
|
vty_out(vty, " ip ospf %d",
|
||||||
ospf->instance);
|
ospf->instance);
|
||||||
else
|
else
|
||||||
vty_out(vty, " ip ospf");
|
vty_out(vty, " ip ospf");
|
||||||
|
|
||||||
|
|
||||||
size_t buflen = MAX(strlen("4294967295"),
|
size_t buflen = MAX(strlen("4294967295"),
|
||||||
strlen("255.255.255.255"));
|
strlen("255.255.255.255"));
|
||||||
char buf[buflen];
|
char buf[buflen];
|
||||||
|
|
||||||
area_id2str(buf, sizeof(buf),
|
area_id2str(buf, sizeof(buf),
|
||||||
¶ms->if_area,
|
¶ms->if_area,
|
||||||
params->if_area_id_fmt);
|
params->if_area_id_fmt);
|
||||||
vty_out(vty, " area %s", buf);
|
vty_out(vty, " area %s", buf);
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
vty_out(vty, " %s",
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* bfd print. */
|
/* bfd print. */
|
||||||
ospf_bfd_write_config(vty, params);
|
if (params->bfd_info)
|
||||||
|
ospf_bfd_write_config(vty, params);
|
||||||
|
|
||||||
/* MTU ignore print. */
|
/* MTU ignore print. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, mtu_ignore)
|
if (OSPF_IF_PARAM_CONFIGURED(params, mtu_ignore)
|
||||||
&& params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT) {
|
&& params->mtu_ignore !=
|
||||||
if (params->mtu_ignore == 0)
|
OSPF_MTU_IGNORE_DEFAULT) {
|
||||||
vty_out(vty, " no ip ospf mtu-ignore");
|
if (params->mtu_ignore == 0)
|
||||||
else
|
vty_out(vty, " no ip ospf mtu-ignore");
|
||||||
vty_out(vty, " ip ospf mtu-ignore");
|
else
|
||||||
if (params != IF_DEF_PARAMS(ifp))
|
vty_out(vty, " ip ospf mtu-ignore");
|
||||||
vty_out(vty, " %s",
|
if (params != IF_DEF_PARAMS(ifp))
|
||||||
|
vty_out(vty, " %s",
|
||||||
inet_ntoa(rn->p.u.prefix4));
|
inet_ntoa(rn->p.u.prefix4));
|
||||||
vty_out(vty, "\n");
|
vty_out(vty, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (rn == NULL)
|
if (rn == NULL)
|
||||||
rn = route_top(IF_OIFS_PARAMS(ifp));
|
rn = route_top(
|
||||||
else
|
IF_OIFS_PARAMS(ifp));
|
||||||
rn = route_next(rn);
|
else
|
||||||
|
rn = route_next(rn);
|
||||||
|
|
||||||
if (rn == NULL)
|
if (rn == NULL)
|
||||||
break;
|
break;
|
||||||
params = rn->info;
|
params = rn->info;
|
||||||
if (params != NULL)
|
if (params != NULL)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (rn);
|
} while (rn);
|
||||||
|
|
||||||
ospf_opaque_config_write_if(vty, ifp);
|
ospf_opaque_config_write_if(vty, ifp);
|
||||||
|
|
||||||
vty_endframe(vty, NULL);
|
vty_endframe(vty, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return write;
|
return write;
|
||||||
}
|
}
|
||||||
@ -9888,12 +9897,10 @@ static int config_write_interface_one(struct vty *vty, struct ospf *ospf)
|
|||||||
static int config_write_interface(struct vty *vty)
|
static int config_write_interface(struct vty *vty)
|
||||||
{
|
{
|
||||||
int write = 0;
|
int write = 0;
|
||||||
struct ospf *ospf = NULL;
|
struct ospf *ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
|
||||||
struct listnode *node = NULL;
|
|
||||||
|
|
||||||
/* Traverse all ospf [vrf] instances */
|
/* Pass Default ospf instances to display MI-OSPF instance id */
|
||||||
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf))
|
write += config_write_interface_one(vty, ospf);
|
||||||
write += config_write_interface_one(vty, ospf);
|
|
||||||
|
|
||||||
return write;
|
return write;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user