mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-02 20:06:06 +00:00
ripngd: code simplification for redistribution.
Use loops and variables instead of doing each cases by hand. Use boolean instead of having 2 almost identical functions.
This commit is contained in:
parent
7c989d74b5
commit
644ed6c5de
118
ripngd/ripngd.c
118
ripngd/ripngd.c
@ -610,32 +610,36 @@ ripng_timeout_update (struct ripng_info *rinfo)
|
||||
}
|
||||
|
||||
static int
|
||||
ripng_incoming_filter (struct prefix_ipv6 *p, struct ripng_interface *ri)
|
||||
ripng_filter (int ripng_distribute, struct prefix_ipv6 *p,
|
||||
struct ripng_interface *ri)
|
||||
{
|
||||
struct distribute *dist;
|
||||
struct access_list *alist;
|
||||
struct prefix_list *plist;
|
||||
int distribute = ripng_distribute == RIPNG_FILTER_OUT ?
|
||||
DISTRIBUTE_OUT : DISTRIBUTE_IN;
|
||||
const char *inout = ripng_distribute == RIPNG_FILTER_OUT ? "out" : "in";
|
||||
|
||||
/* Input distribute-list filtering. */
|
||||
if (ri->list[RIPNG_FILTER_IN])
|
||||
if (ri->list[ripng_distribute])
|
||||
{
|
||||
if (access_list_apply (ri->list[RIPNG_FILTER_IN],
|
||||
if (access_list_apply (ri->list[ripng_distribute],
|
||||
(struct prefix *) p) == FILTER_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d filtered by distribute in",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
zlog_debug ("%s/%d filtered by distribute %s",
|
||||
inet6_ntoa (p->prefix), p->prefixlen, inout);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (ri->prefix[RIPNG_FILTER_IN])
|
||||
if (ri->prefix[ripng_distribute])
|
||||
{
|
||||
if (prefix_list_apply (ri->prefix[RIPNG_FILTER_IN],
|
||||
if (prefix_list_apply (ri->prefix[ripng_distribute],
|
||||
(struct prefix *) p) == PREFIX_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d filtered by prefix-list in",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
zlog_debug ("%s/%d filtered by prefix-list %s",
|
||||
inet6_ntoa (p->prefix), p->prefixlen, inout);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -644,104 +648,34 @@ ripng_incoming_filter (struct prefix_ipv6 *p, struct ripng_interface *ri)
|
||||
dist = distribute_lookup (NULL);
|
||||
if (dist)
|
||||
{
|
||||
if (dist->list[DISTRIBUTE_IN])
|
||||
if (dist->list[distribute])
|
||||
{
|
||||
alist = access_list_lookup (AFI_IP6, dist->list[DISTRIBUTE_IN]);
|
||||
|
||||
alist = access_list_lookup (AFI_IP6, dist->list[distribute]);
|
||||
|
||||
if (alist)
|
||||
{
|
||||
if (access_list_apply (alist,
|
||||
(struct prefix *) p) == FILTER_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d filtered by distribute in",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
zlog_debug ("%s/%d filtered by distribute %s",
|
||||
inet6_ntoa (p->prefix), p->prefixlen, inout);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dist->prefix[DISTRIBUTE_IN])
|
||||
if (dist->prefix[distribute])
|
||||
{
|
||||
plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_IN]);
|
||||
|
||||
plist = prefix_list_lookup (AFI_IP6, dist->prefix[distribute]);
|
||||
|
||||
if (plist)
|
||||
{
|
||||
if (prefix_list_apply (plist,
|
||||
(struct prefix *) p) == PREFIX_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d filtered by prefix-list in",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ripng_outgoing_filter (struct prefix_ipv6 *p, struct ripng_interface *ri)
|
||||
{
|
||||
struct distribute *dist;
|
||||
struct access_list *alist;
|
||||
struct prefix_list *plist;
|
||||
|
||||
if (ri->list[RIPNG_FILTER_OUT])
|
||||
{
|
||||
if (access_list_apply (ri->list[RIPNG_FILTER_OUT],
|
||||
(struct prefix *) p) == FILTER_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d is filtered by distribute out",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (ri->prefix[RIPNG_FILTER_OUT])
|
||||
{
|
||||
if (prefix_list_apply (ri->prefix[RIPNG_FILTER_OUT],
|
||||
(struct prefix *) p) == PREFIX_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d is filtered by prefix-list out",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* All interface filter check. */
|
||||
dist = distribute_lookup (NULL);
|
||||
if (dist)
|
||||
{
|
||||
if (dist->list[DISTRIBUTE_OUT])
|
||||
{
|
||||
alist = access_list_lookup (AFI_IP6, dist->list[DISTRIBUTE_OUT]);
|
||||
|
||||
if (alist)
|
||||
{
|
||||
if (access_list_apply (alist,
|
||||
(struct prefix *) p) == FILTER_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d filtered by distribute out",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dist->prefix[DISTRIBUTE_OUT])
|
||||
{
|
||||
plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_OUT]);
|
||||
|
||||
if (plist)
|
||||
{
|
||||
if (prefix_list_apply (plist,
|
||||
(struct prefix *) p) == PREFIX_DENY)
|
||||
{
|
||||
if (IS_RIPNG_DEBUG_PACKET)
|
||||
zlog_debug ("%s/%d filtered by prefix-list out",
|
||||
inet6_ntoa (p->prefix), p->prefixlen);
|
||||
zlog_debug ("%s/%d filtered by prefix-list %s",
|
||||
inet6_ntoa (p->prefix), p->prefixlen, inout);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -781,7 +715,7 @@ ripng_route_process (struct rte *rte, struct sockaddr_in6 *from,
|
||||
/* Apply input filters. */
|
||||
ri = ifp->info;
|
||||
|
||||
ret = ripng_incoming_filter (&p, ri);
|
||||
ret = ripng_filter (RIPNG_FILTER_IN, &p, ri);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
@ -1676,7 +1610,7 @@ ripng_output_process (struct interface *ifp, struct sockaddr_in6 *to,
|
||||
rinfo->nexthop_out = rinfo->nexthop;
|
||||
|
||||
/* Apply output filters. */
|
||||
ret = ripng_outgoing_filter (p, ri);
|
||||
ret = ripng_filter (RIPNG_FILTER_OUT, p, ri);
|
||||
if (ret < 0)
|
||||
continue;
|
||||
|
||||
@ -1805,7 +1739,7 @@ ripng_output_process (struct interface *ifp, struct sockaddr_in6 *to,
|
||||
memset(&aggregate->nexthop_out, 0, sizeof(aggregate->nexthop_out));
|
||||
|
||||
/* Apply output filters.*/
|
||||
ret = ripng_outgoing_filter (p, ri);
|
||||
ret = ripng_filter (RIPNG_FILTER_OUT, p, ri);
|
||||
if (ret < 0)
|
||||
continue;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user