char *name;
/* EIGRP Router ID. */
- uint32_t router_id; /* Configured automatically. */
- uint32_t router_id_static; /* Configured manually. */
+ struct in_addr router_id; /* Configured automatically. */
+ struct in_addr router_id_static; /* Configured manually. */
struct list *eiflist; /* eigrp interfaces */
uint8_t passive_interface_default; /* passive-interface default */
uint32_t metric;
} route_map[ZEBRA_ROUTE_MAX];
+ /* distribute_ctx */
+ struct distribute_ctx *distribute_ctx;
+
QOBJ_FIELDS
};
DECLARE_QOBJ_TYPE(eigrp)
int write = 0;
/* Distribute configuration. */
- write += config_write_distribute(vty);
+ write += config_write_distribute(vty, eigrp->distribute_ctx);
return write;
}
write++;
- if (!eigrp->networks)
- return write;
-
/* Router ID print. */
- if (eigrp->router_id_static != 0) {
- struct in_addr router_id_static;
- router_id_static.s_addr = htonl(eigrp->router_id_static);
+ if (eigrp->router_id_static.s_addr != 0) {
vty_out(vty, " eigrp router-id %s\n",
- inet_ntoa(router_id_static));
+ inet_ntoa(eigrp->router_id_static));
}
/* Network area print. */
return CMD_SUCCESS;
}
- DEFUN (eigrp_router_id,
+ DEFPY (eigrp_router_id,
eigrp_router_id_cmd,
- "eigrp router-id A.B.C.D",
+ "eigrp router-id A.B.C.D$addr",
"EIGRP specific commands\n"
"Router ID for this EIGRP process\n"
"EIGRP Router-ID in IP address format\n")
{
- // struct eigrp *eigrp = vty->index;
- /*TODO: */
+ VTY_DECLVAR_CONTEXT(eigrp, eigrp);
+
+ eigrp->router_id_static = addr;
return CMD_SUCCESS;
}
- DEFUN (no_eigrp_router_id,
+ DEFPY (no_eigrp_router_id,
no_eigrp_router_id_cmd,
- "no eigrp router-id A.B.C.D",
+ "no eigrp router-id [A.B.C.D$addr]",
NO_STR
"EIGRP specific commands\n"
"Router ID for this EIGRP process\n"
"EIGRP Router-ID in IP address format\n")
{
- // struct eigrp *eigrp = vty->index;
- /*TODO: */
+ VTY_DECLVAR_CONTEXT(eigrp, eigrp);
+
+ eigrp->router_id_static.s_addr = 0;
return CMD_SUCCESS;
}
#include "keychain.h"
#include "libfrr.h"
#include "lib_errors.h"
+#include "distribute.h"
#include "eigrpd/eigrp_structs.h"
#include "eigrpd/eigrpd.h"
#include "eigrpd/eigrp_network.h"
#include "eigrpd/eigrp_topology.h"
#include "eigrpd/eigrp_memory.h"
+#include "eigrpd/eigrp_filter.h"
DEFINE_QOBJ_TYPE(eigrp)
{
struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
struct interface *ifp;
- uint32_t router_id, router_id_old;
+ struct in_addr router_id, router_id_old;
router_id_old = eigrp->router_id;
- if (eigrp->router_id_static != 0)
+ if (eigrp->router_id_static.s_addr != 0)
router_id = eigrp->router_id_static;
- else if (eigrp->router_id != 0)
+ else if (eigrp->router_id.s_addr != 0)
router_id = eigrp->router_id;
else
- router_id = router_id_zebra.s_addr;
+ router_id = router_id_zebra;
eigrp->router_id = router_id;
- if (router_id_old != router_id) {
+ if (router_id_old.s_addr != router_id.s_addr) {
// if (IS_DEBUG_EIGRP_EVENT)
// zlog_debug("Router-ID[NEW:%s]: Update",
// inet_ntoa(eigrp->router_id));
/* init information relevant to peers */
eigrp->vrid = 0;
eigrp->AS = atoi(AS);
- eigrp->router_id = 0L;
- eigrp->router_id_static = 0L;
+ eigrp->router_id.s_addr = 0;
+ eigrp->router_id_static.s_addr = 0;
eigrp->sequence_number = 1;
/*Configure default K Values for EIGRP Process*/
eigrp->routemap[EIGRP_FILTER_IN] = NULL;
eigrp->routemap[EIGRP_FILTER_OUT] = NULL;
+ /* Distribute list install. */
+ eigrp->distribute_ctx = distribute_list_ctx_create(
+ vrf_lookup_by_id(VRF_DEFAULT));
+ distribute_list_add_hook(eigrp->distribute_ctx,
+ eigrp_distribute_update);
+ distribute_list_delete_hook(eigrp->distribute_ctx,
+ eigrp_distribute_update);
QOBJ_REG(eigrp, eigrp);
return eigrp;
}
listnode_delete(eigrp_om->eigrp, eigrp);
stream_free(eigrp->ibuf);
+ distribute_list_delete(&eigrp->distribute_ctx);
XFREE(MTYPE_EIGRP_TOP, eigrp);
}