#include "rib.h"
#include "vrf.h"
-#include "zebra/zserv.h"
+#include "zebra/zebra_router.h"
#include "zebra/zapi_msg.h"
#include "zebra/zebra_vrf.h"
#include "zebra/router-id.h"
#include "zebra/redistribute.h"
-/* master zebra server structure */
-extern struct zebra_t zebrad;
-
static struct connected *router_id_find_node(struct list *l,
struct connected *ifc)
{
struct connected *c;
struct zebra_vrf *zvrf = vrf_info_get(vrf_id);
- p->u.prefix4.s_addr = 0;
+ p->u.prefix4.s_addr = INADDR_ANY;
p->family = AF_INET;
p->prefixlen = 32;
- if (zvrf->rid_user_assigned.u.prefix4.s_addr)
+ if (zvrf->rid_user_assigned.u.prefix4.s_addr != INADDR_ANY)
p->u.prefix4.s_addr = zvrf->rid_user_assigned.u.prefix4.s_addr;
else if (!list_isempty(zvrf->rid_lo_sorted_list)) {
node = listtail(zvrf->rid_lo_sorted_list);
router_id_get(&p2, vrf_id);
- for (ALL_LIST_ELEMENTS_RO(zebrad.client_list, node, client))
+ for (ALL_LIST_ELEMENTS_RO(zrouter.client_list, node, client))
zsend_router_id_update(client, &p2, vrf_id);
}
router_id_get(&before, zvrf_id(zvrf));
- if (!strncmp(ifc->ifp->name, "lo", 2)
- || !strncmp(ifc->ifp->name, "dummy", 5))
+ if (if_is_loopback(ifc->ifp))
l = zvrf->rid_lo_sorted_list;
else
l = zvrf->rid_all_sorted_list;
if (prefix_same(&before, &after))
return;
- for (ALL_LIST_ELEMENTS_RO(zebrad.client_list, node, client))
+ for (ALL_LIST_ELEMENTS_RO(zrouter.client_list, node, client))
zsend_router_id_update(client, &after, zvrf_id(zvrf));
}
router_id_get(&before, zvrf_id(zvrf));
- if (!strncmp(ifc->ifp->name, "lo", 2)
- || !strncmp(ifc->ifp->name, "dummy", 5))
+ if (if_is_loopback(ifc->ifp))
l = zvrf->rid_lo_sorted_list;
else
l = zvrf->rid_all_sorted_list;
if (prefix_same(&before, &after))
return;
- for (ALL_LIST_ELEMENTS_RO(zebrad.client_list, node, client))
+ for (ALL_LIST_ELEMENTS_RO(zrouter.client_list, node, client))
zsend_router_id_update(client, &after, zvrf_id(zvrf));
}
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
if ((zvrf = vrf->info) != NULL)
- if (zvrf->rid_user_assigned.u.prefix4.s_addr) {
+ if (zvrf->rid_user_assigned.u.prefix4.s_addr
+ != INADDR_ANY) {
if (zvrf_id(zvrf) == VRF_DEFAULT)
vty_out(vty, "router-id %s\n",
inet_ntoa(
rid.family = AF_INET;
if (argc > 2)
- VRF_GET_ID(vrf_id, argv[idx_name]->arg);
+ VRF_GET_ID(vrf_id, argv[idx_name]->arg, false);
router_id_set(&rid, vrf_id);
rid.family = AF_INET;
if (argc > 3)
- VRF_GET_ID(vrf_id, argv[idx_name]->arg);
+ VRF_GET_ID(vrf_id, argv[idx_name]->arg, false);
router_id_set(&rid, vrf_id);
return CMD_SUCCESS;
}
+DEFUN (show_router_id,
+ show_router_id_cmd,
+ "show router-id [vrf NAME]",
+ SHOW_STR
+ "Show the configured router-id\n"
+ VRF_CMD_HELP_STR)
+{
+ int idx_name = 3;
+
+ vrf_id_t vrf_id = VRF_DEFAULT;
+ struct zebra_vrf *zvrf;
+
+ if (argc > 2)
+ VRF_GET_ID(vrf_id, argv[idx_name]->arg, false);
+
+ zvrf = vrf_info_get(vrf_id);
+
+ if ((zvrf != NULL) && (zvrf->rid_user_assigned.u.prefix4.s_addr)) {
+ vty_out(vty, "zebra:\n");
+ if (vrf_id == VRF_DEFAULT)
+ vty_out(vty, " router-id %s vrf default\n",
+ inet_ntoa(zvrf->rid_user_assigned.u.prefix4));
+ else
+ vty_out(vty, " router-id %s vrf %s\n",
+ inet_ntoa(zvrf->rid_user_assigned.u.prefix4),
+ argv[idx_name]->arg);
+ }
+
+ return CMD_SUCCESS;
+}
static int router_id_cmp(void *a, void *b)
{
{
install_element(CONFIG_NODE, &router_id_cmd);
install_element(CONFIG_NODE, &no_router_id_cmd);
+ install_element(VIEW_NODE, &show_router_id_cmd);
}
void router_id_init(struct zebra_vrf *zvrf)