return ret;
}
}
- ospf_interface_area_set(ospf, ifp);
- ospf->if_ospf_cli_count++;
+ if (!ospf_interface_area_is_already_set(ospf,
+ ifp)) {
+ ospf_interface_area_set(ospf, ifp);
+ ospf->if_ospf_cli_count++;
+ }
}
}
return CMD_SUCCESS;
}
if (ospf->vrf_id != VRF_UNKNOWN)
- ifp = if_get_by_name(argv[1]->arg, ospf->vrf_id, 0);
+ ifp = if_get_by_name(argv[1]->arg, ospf->vrf_id);
if (ifp == NULL) {
vty_out(vty, "interface %s not found.\n", (char *)argv[1]->arg);
}
if (ospf->vrf_id != VRF_UNKNOWN)
- ifp = if_get_by_name(argv[2]->arg, ospf->vrf_id, 0);
+ ifp = if_get_by_name(argv[2]->arg, ospf->vrf_id);
if (ifp == NULL) {
vty_out(vty, "interface %s not found.\n", (char *)argv[2]->arg);
ospf_area_range_set(ospf, area_id, &p, 0);
ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
format);
+ ospf_area_range_substitute_unset(ospf, area_id, &p);
return CMD_SUCCESS;
}
const char *ospf_shortcut_mode_descr_str[] = {"Default", "Enabled", "Disabled"};
static void show_ip_ospf_area(struct vty *vty, struct ospf_area *area,
- json_object *json_areas, uint8_t use_json)
+ json_object *json_areas, bool use_json)
{
json_object *json_area = NULL;
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
char *vrf_name = NULL;
bool all_vrf = FALSE;
/* vrf input is provided could be all or specific vrf*/
if (vrf_name) {
+ bool ospf_output = FALSE;
+
use_vrf = 1;
+
if (all_vrf) {
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
if (!ospf->oi_running)
continue;
+ ospf_output = TRUE;
ret = show_ip_ospf_common(vty, ospf, json,
use_vrf);
}
json_object_to_json_string_ext(
json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
- }
+ } else if (!ospf_output)
+ vty_out(vty, "%% OSPF instance not found\n");
return ret;
}
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
if ((ospf == NULL) || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
} else {
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
/* Display default ospf (instance 0) info */
if (ospf == NULL || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
}
int idx_number = 3;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
int ret = CMD_SUCCESS;
json_object *json = NULL;
static void show_ip_ospf_interface_sub(struct vty *vty, struct ospf *ospf,
struct interface *ifp,
json_object *json_interface_sub,
- uint8_t use_json)
+ bool use_json)
{
int is_up;
struct ospf_neighbor *nbr;
static int show_ip_ospf_interface_common(struct vty *vty, struct ospf *ospf,
char *intf_name, uint8_t use_vrf,
- json_object *json, uint8_t use_json)
+ json_object *json, bool use_json)
{
struct interface *ifp;
struct vrf *vrf = vrf_lookup_by_id(ospf->vrf_id);
static void show_ip_ospf_interface_traffic_sub(struct vty *vty,
struct ospf_interface *oi,
json_object *json_interface_sub,
- uint8_t use_json)
+ bool use_json)
{
if (use_json) {
json_object_int_add(json_interface_sub, "ifIndex",
/* OSPFv2 Packet Counters */
static int show_ip_ospf_interface_traffic_common(
struct vty *vty, struct ospf *ospf, char *intf_name, json_object *json,
- int display_once, uint8_t use_vrf, uint8_t use_json)
+ int display_once, uint8_t use_vrf, bool use_json)
{
struct vrf *vrf = NULL;
struct interface *ifp = NULL;
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
char *vrf_name = NULL, *intf_name = NULL;
bool all_vrf = FALSE;
json_object_to_json_string_ext(
json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
- }
+ } else if (!ospf)
+ vty_out(vty, "%% OSPF instance not found\n");
return ret;
}
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
if (ospf == NULL || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
ret = show_ip_ospf_interface_common(vty, ospf, intf_name,
/* Display default ospf (instance 0) info */
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
if (ospf == NULL || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
ret = show_ip_ospf_interface_common(vty, ospf, intf_name,
int idx_intf = 0;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
char *intf_name = NULL;
int ret = CMD_SUCCESS;
json_object *json = NULL;
bool all_vrf = FALSE;
int inst = 0;
int idx_vrf = 0, idx_intf = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
json_object *json = NULL;
int ret = CMD_SUCCESS;
int display_once = 0;
static void show_ip_ospf_neighbor_sub(struct vty *vty,
struct ospf_interface *oi,
- json_object *json, uint8_t use_json)
+ json_object *json, bool use_json)
{
struct route_node *rn;
struct ospf_neighbor *nbr, *prev_nbr = NULL;
}
static int show_ip_ospf_neighbor_common(struct vty *vty, struct ospf *ospf,
- json_object *json, uint8_t use_json,
+ json_object *json, bool use_json,
uint8_t use_vrf)
{
struct ospf_interface *oi;
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
char *vrf_name = NULL;
bool all_vrf = FALSE;
json_object_to_json_string_ext(
json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
- }
+ } else if (!ospf)
+ vty_out(vty, "OSPF instance not found\n");
return ret;
}
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
if (ospf == NULL || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
} else {
/* Display default ospf (instance 0) info */
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
if (ospf == NULL || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
}
int idx_number = 3;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
json_object *json = NULL;
int ret = CMD_SUCCESS;
}
static int show_ip_ospf_neighbor_all_common(struct vty *vty, struct ospf *ospf,
- json_object *json, uint8_t use_json,
+ json_object *json, bool use_json,
uint8_t use_vrf)
{
struct listnode *node;
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
char *vrf_name = NULL;
bool all_vrf = FALSE;
int idx_number = 3;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
json_object *json = NULL;
int ret = CMD_SUCCESS;
static int show_ip_ospf_neighbor_int_common(struct vty *vty, struct ospf *ospf,
int arg_base,
struct cmd_token **argv,
- uint8_t use_json, uint8_t use_vrf)
+ bool use_json, uint8_t use_vrf)
{
struct interface *ifp;
struct route_node *rn;
ospf_show_vrf_name(ospf, vty, json, use_vrf);
- ifp = if_lookup_by_name_all_vrf(argv[arg_base]->arg);
+ ifp = if_lookup_by_name(argv[arg_base]->arg, ospf->vrf_id);
if (!ifp) {
if (use_json)
json_object_boolean_true_add(json, "noSuchIface");
DEFUN (show_ip_ospf_neighbor_int,
show_ip_ospf_neighbor_int_cmd,
- "show ip ospf neighbor IFNAME [json]",
+ "show ip ospf [vrf <NAME>] neighbor IFNAME [json]",
SHOW_STR
IP_STR
"OSPF information\n"
+ VRF_CMD_HELP_STR
"Neighbor list\n"
"Interface name\n"
JSON_STR)
{
struct ospf *ospf;
- int idx_ifname = 4;
- uint8_t uj = use_json(argc, argv);
- struct listnode *node = NULL;
+ int idx_ifname = 0;
+ int idx_vrf = 0;
+ bool uj = use_json(argc, argv);
int ret = CMD_SUCCESS;
struct interface *ifp = NULL;
+ char *vrf_name = NULL;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+ struct vrf *vrf = NULL;
+
+ if (argv_find(argv, argc, "vrf", &idx_vrf))
+ vrf_name = argv[idx_vrf + 1]->arg;
+ if (vrf_name && strmatch(vrf_name, VRF_DEFAULT_NAME))
+ vrf_name = NULL;
+ if (vrf_name) {
+ vrf = vrf_lookup_by_name(vrf_name);
+ if (vrf)
+ vrf_id = vrf->vrf_id;
+ }
+ ospf = ospf_lookup_by_vrf_id(vrf_id);
+
+ if (!ospf || !ospf->oi_running)
+ return ret;
if (!uj)
show_ip_ospf_neighbour_header(vty);
- ifp = if_lookup_by_name_all_vrf(argv[idx_ifname]->arg);
- for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
- if (!ospf->oi_running)
- continue;
- if (!ifp || ifp->vrf_id != ospf->vrf_id)
- continue;
- ret = show_ip_ospf_neighbor_int_common(vty, ospf, idx_ifname,
- argv, uj, 0);
- }
+ argv_find(argv, argc, "IFNAME", &idx_ifname);
+ ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);
+ if (!ifp)
+ return ret;
+
+ ret = show_ip_ospf_neighbor_int_common(vty, ospf, idx_ifname,
+ argv, uj, 0);
return ret;
}
int idx_ifname = 5;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
if (!uj)
show_ip_ospf_neighbour_header(vty);
static void show_ip_ospf_nbr_nbma_detail_sub(struct vty *vty,
struct ospf_interface *oi,
struct ospf_nbr_nbma *nbr_nbma,
- uint8_t use_json,
- json_object *json)
+ bool use_json, json_object *json)
{
char timebuf[OSPF_TIME_DUMP_SIZE];
json_object *json_sub = NULL;
static void show_ip_ospf_neighbor_detail_sub(struct vty *vty,
struct ospf_interface *oi,
struct ospf_neighbor *nbr,
- json_object *json,
- uint8_t use_json)
+ json_object *json, bool use_json)
{
char timebuf[OSPF_TIME_DUMP_SIZE];
json_object *json_sub = NULL;
static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
int arg_base,
struct cmd_token **argv,
- uint8_t use_json, uint8_t use_vrf)
+ bool use_json, uint8_t use_vrf)
{
struct listnode *node;
struct ospf_neighbor *nbr;
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
int ret = CMD_SUCCESS;
int idx_router_id = 5;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
instance = strtoul(argv[idx_number]->arg, NULL, 10);
ospf = ospf_lookup_instance(instance);
static int show_ip_ospf_neighbor_detail_common(struct vty *vty,
struct ospf *ospf,
- json_object *json,
- uint8_t use_json,
+ json_object *json, bool use_json,
uint8_t use_vrf)
{
struct ospf_interface *oi;
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
char *vrf_name = NULL;
bool all_vrf = FALSE;
int idx_number = 3;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
json_object *json = NULL;
int ret = CMD_SUCCESS;
static int show_ip_ospf_neighbor_detail_all_common(struct vty *vty,
struct ospf *ospf,
json_object *json,
- uint8_t use_json,
+ bool use_json,
uint8_t use_vrf)
{
struct listnode *node;
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
char *vrf_name = NULL;
bool all_vrf = FALSE;
int idx_number = 3;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
json_object *json = NULL;
int ret = CMD_SUCCESS;
struct ospf *ospf,
int arg_base,
struct cmd_token **argv,
- uint8_t use_json)
+ bool use_json)
{
struct ospf_interface *oi;
struct interface *ifp;
vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
}
- ifp = if_lookup_by_name_all_vrf(argv[arg_base]->arg);
+ ifp = if_lookup_by_name(argv[arg_base]->arg, ospf->vrf_id);
if (!ifp) {
if (!use_json)
vty_out(vty, "No such interface.\n");
JSON_STR)
{
struct ospf *ospf;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
struct listnode *node = NULL;
int ret = CMD_SUCCESS;
+ bool ospf_output = FALSE;
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
if (!ospf->oi_running)
continue;
+ ospf_output = TRUE;
ret = show_ip_ospf_neighbor_int_detail_common(vty, ospf, 0,
argv, uj);
}
+ if (!ospf_output)
+ vty_out(vty, "%% OSPF instance not found\n");
+
return ret;
}
int idx_ifname = 5;
struct ospf *ospf;
unsigned short instance = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
instance = strtoul(argv[idx_number]->arg, NULL, 10);
ospf = ospf_lookup_instance(instance);
OSPF_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
if (vrf_name) {
+ bool ospf_output = FALSE;
+
use_vrf = 1;
+
if (all_vrf) {
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
if (!ospf->oi_running)
continue;
+ ospf_output = TRUE;
ret = show_ip_ospf_database_common(
vty, ospf, idx_vrf ? 2 : 0, argc, argv,
use_vrf);
}
+
+ if (!ospf_output)
+ vty_out(vty, "%% OSPF instance not found\n");
} else {
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
- if (ospf == NULL || !ospf->oi_running)
+ if (ospf == NULL || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
ret = (show_ip_ospf_database_common(
vty, ospf, idx_vrf ? 2 : 0, argc, argv,
use_vrf));
} else {
/* Display default ospf (instance 0) info */
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
- if (ospf == NULL || !ospf->oi_running)
+ if (ospf == NULL || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
+
ret = show_ip_ospf_database_common(vty, ospf, 0, argc, argv,
use_vrf);
}
}
} else {
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
- if ((ospf == NULL) || !ospf->oi_running)
+ if ((ospf == NULL) || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
+
ret = (show_ip_ospf_database_common(
vty, ospf, idx ? 2 : 0, argc, argv, use_vrf));
}
} else {
/* Display default ospf (instance 0) info */
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
- if (ospf == NULL || !ospf->oi_running)
+ if (ospf == NULL || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
+
ret = (show_ip_ospf_database_common(vty, ospf, 0, argc, argv,
use_vrf));
}
if (ospf == NULL)
return CMD_NOT_MY_INSTANCE;
- if (!ospf->oi_running)
+ if (!ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
return show_ip_ospf_database_common(vty, ospf, 1, argc, argv, 0);
}
ospf = ospf_lookup_instance(instance);
if (ospf == NULL)
return CMD_NOT_MY_INSTANCE;
- if (!ospf->oi_running)
+ if (!ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
+
return (show_ip_ospf_database_type_adv_router_common(
vty, ospf, idx ? 1 : 0, argc, argv, use_vrf));
}
OSPF_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
if (vrf_name) {
+ bool ospf_output = FALSE;
+
use_vrf = 1;
+
if (all_vrf) {
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
if (!ospf->oi_running)
continue;
+ ospf_output = TRUE;
ret = show_ip_ospf_database_type_adv_router_common(
vty, ospf, idx ? 1 : 0, argc, argv,
use_vrf);
}
+ if (!ospf_output)
+ vty_out(vty, "%% OSPF instance not found\n");
} else {
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
- if ((ospf == NULL) || !ospf->oi_running)
+ if ((ospf == NULL) || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
+
ret = show_ip_ospf_database_type_adv_router_common(
vty, ospf, idx ? 1 : 0, argc, argv, use_vrf);
}
} else {
/* Display default ospf (instance 0) info */
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
- if (ospf == NULL || !ospf->oi_running)
+ if (ospf == NULL || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
+
ret = show_ip_ospf_database_type_adv_router_common(
vty, ospf, idx ? 1 : 0, argc, argv, use_vrf);
}
return CMD_SUCCESS;
ospf_routemap_unset(red);
+ ospf_redist_del(ospf, source, 0);
+
return ospf_redistribute_unset(ospf, source, 0);
}
return CMD_SUCCESS;
ospf_routemap_unset(red);
+ ospf_redist_del(ospf, source, instance);
+
return ospf_redistribute_unset(ospf, source, instance);
}
int metric = -1;
struct ospf_redist *red;
int idx = 0;
+ int cur_originate = ospf->default_originate;
+ int sameRtmap = 0;
+ char *rtmap = NULL;
red = ospf_redist_add(ospf, DEFAULT_ROUTE, 0);
idx = 1;
/* Get route-map */
if (argv_find(argv, argc, "WORD", &idx))
- ospf_routemap_set(red, argv[idx]->arg);
+ rtmap = argv[idx]->arg;
+
+ /* To check ,if user is providing same route map */
+ if ((rtmap == ROUTEMAP_NAME(red)) ||
+ (rtmap && ROUTEMAP_NAME(red)
+ && (strcmp(rtmap, ROUTEMAP_NAME(red)) == 0)))
+ sameRtmap = 1;
+
+ /* Don't allow if the same lsa is aleardy originated. */
+ if ((sameRtmap)
+ && (red->dmetric.type == type)
+ && (red->dmetric.value == metric)
+ && (cur_originate == default_originate))
+ return CMD_SUCCESS;
+
+ /* Updating Metric details */
+ red->dmetric.type = type;
+ red->dmetric.value = metric;
+
+ /* updating route map details */
+ if (rtmap)
+ ospf_routemap_set(red, rtmap);
else
ospf_routemap_unset(red);
return CMD_SUCCESS;
ospf_routemap_unset(red);
+ ospf_redist_del(ospf, DEFAULT_ROUTE, 0);
+
return ospf_redistribute_default_unset(ospf);
}
OSPF_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
if (vrf_name) {
+ bool ospf_output = FALSE;
+
use_vrf = 1;
+
if (all_vrf) {
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
if (!ospf->oi_running)
continue;
+ ospf_output = TRUE;
ret = show_ip_ospf_border_routers_common(
vty, ospf, use_vrf);
}
+
+ if (!ospf_output)
+ vty_out(vty, "%% OSPF instance not found\n");
} else {
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
- if (ospf == NULL || !ospf->oi_running)
+ if (ospf == NULL || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
ret = show_ip_ospf_border_routers_common(vty, ospf,
use_vrf);
} else {
/* Display default ospf (instance 0) info */
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
- if (ospf == NULL || !ospf->oi_running)
+ if (ospf == NULL || !ospf->oi_running) {
+ vty_out(vty, "%% OSPF instance not found\n");
return CMD_SUCCESS;
+ }
+
ret = show_ip_ospf_border_routers_common(vty, ospf, use_vrf);
}
int inst = 0;
int idx_vrf = 0;
uint8_t use_vrf = 0;
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
json_object *json = NULL;
if (uj)
/* vrf input is provided could be all or specific vrf*/
if (vrf_name) {
+ bool ospf_output = FALSE;
+
use_vrf = 1;
+
if (all_vrf) {
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
if (!ospf->oi_running)
continue;
+ ospf_output = TRUE;
ret = show_ip_ospf_route_common(vty, ospf, json,
use_vrf);
}
vty_out(vty, "%s\n",
json_object_to_json_string(json));
json_object_free(json);
- }
+ } else if (!ospf_output)
+ vty_out(vty, "%% OSPF instance not found\n");
return ret;
}
ospf = ospf_lookup_by_inst_name(inst, vrf_name);
if (ospf == NULL || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
} else {
/* Display default ospf (instance 0) info */
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
if (ospf == NULL || !ospf->oi_running) {
- if (uj)
+ if (uj) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
+ } else
+ vty_out(vty, "%% OSPF instance not found\n");
+
return CMD_SUCCESS;
}
}
"Show OSPF VRFs \n"
JSON_STR)
{
- uint8_t uj = use_json(argc, argv);
+ bool uj = use_json(argc, argv);
json_object *json = NULL;
json_object *json_vrfs = NULL;
struct ospf *ospf = NULL;
DEFUN (clear_ip_ospf_interface,
clear_ip_ospf_interface_cmd,
- "clear ip ospf interface [IFNAME]",
+ "clear ip ospf [vrf <NAME>] interface [IFNAME]",
CLEAR_STR
IP_STR
"OSPF information\n"
+ VRF_CMD_HELP_STR
"Interface information\n"
"Interface name\n")
{
- int idx_ifname = 4;
+ int idx_ifname = 0;
+ int idx_vrf = 0;
struct interface *ifp;
struct listnode *node;
struct ospf *ospf = NULL;
+ char *vrf_name = NULL;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+ struct vrf *vrf = NULL;
- if (argc == 4) /* Clear all the ospfv2 interfaces. */
- {
+ if (argv_find(argv, argc, "vrf", &idx_vrf))
+ vrf_name = argv[idx_vrf + 1]->arg;
+ if (vrf_name && strmatch(vrf_name, VRF_DEFAULT_NAME))
+ vrf_name = NULL;
+ if (vrf_name) {
+ vrf = vrf_lookup_by_name(vrf_name);
+ if (vrf)
+ vrf_id = vrf->vrf_id;
+ }
+ if (!argv_find(argv, argc, "IFNAME", &idx_ifname)) {
+ /* Clear all the ospfv2 interfaces. */
for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) {
- struct vrf *vrf = vrf_lookup_by_id(ospf->vrf_id);
+ if (vrf_id != ospf->vrf_id)
+ continue;
+ if (!vrf)
+ vrf = vrf_lookup_by_id(ospf->vrf_id);
FOR_ALL_INTERFACES (vrf, ifp)
ospf_interface_clear(ifp);
}
} else {
/* Interface name is specified. */
- ifp = if_lookup_by_name_all_vrf(argv[idx_ifname]->arg);
+ ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);
if (ifp == NULL)
vty_out(vty, "No such interface name\n");
else