static int rip_triggered_update(struct thread *);
static int rip_update_jitter(unsigned long);
+static void rip_distribute_update(struct distribute_ctx *ctx,
+ struct distribute *dist);
+
/* RIP output routes type. */
enum { rip_all_route, rip_changed_route };
return 0;
}
-static int rip_route_rte(struct rip_info *rinfo)
+int rip_route_rte(struct rip_info *rinfo)
{
return (rinfo->type == ZEBRA_ROUTE_RIP
&& rinfo->sub_type == RIP_ROUTE_RTE);
}
/* All interface filter check. */
- dist = distribute_lookup(NULL);
+ dist = distribute_lookup(rip->distribute_ctx, NULL);
if (dist) {
if (dist->list[distribute]) {
alist = access_list_lookup(AFI_IP,
zlog_debug(
"packet RIPv%d is dropped because authentication disabled",
packet->version);
+ ripd_notif_send_auth_type_failure(ifp->name);
rip_peer_bad_packet(&from);
return -1;
}
zlog_debug(
"RIPv1"
" dropped because authentication enabled");
+ ripd_notif_send_auth_type_failure(ifp->name);
rip_peer_bad_packet(&from);
return -1;
}
if (IS_RIP_DEBUG_PACKET)
zlog_debug(
"RIPv2 authentication failed: no auth RTE in packet");
+ ripd_notif_send_auth_type_failure(ifp->name);
rip_peer_bad_packet(&from);
return -1;
}
zlog_debug(
"RIPv2"
" dropped because authentication enabled");
+ ripd_notif_send_auth_type_failure(ifp->name);
rip_peer_bad_packet(&from);
return -1;
}
if (IS_RIP_DEBUG_PACKET)
zlog_debug("RIPv2 %s authentication failure",
auth_desc);
+ ripd_notif_send_auth_failure(ifp->name);
rip_peer_bad_packet(&from);
return -1;
}
/* Create read and timer thread. */
rip_event(RIP_READ, rip->sock);
rip_event(RIP_UPDATE_EVENT, 1);
-
+ /* Distribute list install. */
+ rip->distribute_ctx = distribute_list_ctx_create(
+ vrf_lookup_by_id(VRF_DEFAULT));
+ distribute_list_add_hook(rip->distribute_ctx,
+ rip_distribute_update);
+ distribute_list_delete_hook(rip->distribute_ctx,
+ rip_distribute_update);
return 0;
}
vty_out(vty, " garbage collect after %u seconds\n", rip->garbage_time);
/* Filtering status show. */
- config_show_distribute(vty);
+ config_show_distribute(vty, rip->distribute_ctx);
/* Default metric information. */
vty_out(vty, " Default redistribution metric is %u\n",
nb_cli_show_dnode_cmds(vty, dnode, false);
/* Distribute configuration. */
- write += config_write_distribute(vty);
+ write += config_write_distribute(vty,
+ rip->distribute_ctx);
/* Interface routemap configuration */
write += config_write_if_rmap(vty);
static struct cmd_node rip_node = {RIP_NODE, "%s(config-router)# ", 1};
/* Distribute-list update functions. */
-static void rip_distribute_update(struct distribute *dist)
+static void rip_distribute_update(struct distribute_ctx *ctx,
+ struct distribute *dist)
{
struct interface *ifp;
struct rip_interface *ri;
{
struct distribute *dist;
- dist = distribute_lookup(ifp->name);
+ if (!rip)
+ return;
+ dist = distribute_lookup(rip->distribute_ctx, ifp->name);
if (dist)
- rip_distribute_update(dist);
+ rip_distribute_update(rip->distribute_ctx, dist);
}
/* Update all interface's distribute list. */
if (rip->route_map[i].name)
free(rip->route_map[i].name);
- XFREE(MTYPE_ROUTE_TABLE, rip->table);
- XFREE(MTYPE_ROUTE_TABLE, rip->neighbor);
+ route_table_finish(rip->table);
+ route_table_finish(rip->neighbor);
+ distribute_list_delete(&rip->distribute_ctx);
XFREE(MTYPE_RIP, rip);
rip = NULL;
}
rip_redistribute_clean();
}
-/* Reset all values to the default settings. */
-void rip_reset(void)
-{
- /* Reset global counters. */
- rip_global_route_changes = 0;
- rip_global_queries = 0;
-
- /* Call ripd related reset functions. */
- rip_debug_reset();
- rip_route_map_reset();
-
- /* Call library reset functions. */
- vty_reset();
- access_list_reset();
- prefix_list_reset();
-
- distribute_list_reset();
-
- rip_interfaces_reset();
- rip_distance_reset();
-
- rip_zclient_reset();
-}
-
static void rip_if_rmap_update(struct if_rmap *if_rmap)
{
struct interface *ifp;
return;
ri = ifp->info;
-
if (if_rmap->routemap[IF_RMAP_IN]) {
rmap = route_map_lookup_by_name(if_rmap->routemap[IF_RMAP_IN]);
if (rmap)
/* Distribute list install. */
distribute_list_init(RIP_NODE);
- distribute_list_add_hook(rip_distribute_update);
- distribute_list_delete_hook(rip_distribute_update);
/* Route-map */
rip_route_map_init();