[prev in list] [next in list] [prev in thread] [next in thread]
List: quagga-dev
Subject: [quagga-dev 9550] [PATCH 4/5] ripngd: code simplification for redistribution.
From: Matthieu Boutier <boutier () pps ! jussieu ! fr>
Date: 2012-07-20 16:30:25
Message-ID: 1342801827-1522-5-git-send-email-boutier () pps ! jussieu ! fr
[Download RAW message or body]
From: Matthieu Boutier <boutier@pps.univ-paris-diderot.fr>
Use loops and variables instead of doing each cases by hand.
Use boolean instead of having 2 almost identical functions.
---
ripngd/ripngd.c | 118 +++++++++++++-------------------------------------------
1 file changed, 27 insertions(+), 91 deletions(-)
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index e4c56ef..cc86195 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -475,32 +475,36 @@ ripng_timeout_update (struct ripng_info *rinfo)
}
static int
-ripng_incoming_filter (struct prefix_ipv6 *p, struct ripng_interface *ri)
+ripng_filter (int output, struct prefix_ipv6 *p, struct ripng_interface *ri)
{
struct distribute *dist;
struct access_list *alist;
struct prefix_list *plist;
+ int distribute = output ? DISTRIBUTE_OUT : DISTRIBUTE_IN;
+ int ripng_distribute = output ? RIPNG_FILTER_OUT : RIPNG_FILTER_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,
+ output ? "out" : "in");
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,
+ output ? "out" : "in");
return -1;
}
}
@@ -509,104 +513,36 @@ 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]);
-
- 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);
- return -1;
- }
- }
- }
- if (dist->prefix[DISTRIBUTE_IN])
- {
- plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_IN]);
-
- 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;
-}
+ alist = access_list_lookup (AFI_IP6, dist->list[distribute]);
-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);
+ zlog_debug ("%s/%d filtered by distribute %s",
+ inet6_ntoa (p->prefix), p->prefixlen,
+ output ? "out" : "in");
return -1;
}
}
}
- if (dist->prefix[DISTRIBUTE_OUT])
+ if (dist->prefix[distribute])
{
- plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_OUT]);
-
+ 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 out",
- inet6_ntoa (p->prefix), p->prefixlen);
+ zlog_debug ("%s/%d filtered by prefix-list %s",
+ inet6_ntoa (p->prefix), p->prefixlen,
+ output ? "out" : "in");
return -1;
}
}
@@ -645,7 +581,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 (0, &p, ri);
if (ret < 0)
return;
@@ -1636,7 +1572,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 (1, p, ri);
if (ret < 0)
continue;
@@ -1753,7 +1689,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 (1, p, ri);
if (ret < 0)
continue;
--
1.7.11.1
_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
http://lists.quagga.net/mailman/listinfo/quagga-dev
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic