diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-09-14 08:23:27 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-09-14 08:31:19 -0400 |
| commit | 10fbd59a57f5f5b9ebacd3d50c2529a984b637b9 (patch) | |
| tree | 7a3653079436a35338e339c7a98c93fdcd21c971 | |
| parent | 68558b13099589c5def8873448fa419293b789f3 (diff) | |
zebra: Refactor nexthop sending
When building a stream of nexthop information,
refactor the code that writes it to 1 function.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
| -rw-r--r-- | zebra/zserv.c | 100 |
1 files changed, 33 insertions, 67 deletions
diff --git a/zebra/zserv.c b/zebra/zserv.c index 020a252371..aad0b15a88 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c @@ -748,6 +748,36 @@ zsend_redistribute_route (int cmd, struct zserv *client, struct prefix *p, } static int +zsend_write_nexthop (struct stream *s, struct nexthop *nexthop) +{ + stream_putc (s, nexthop->type); + switch (nexthop->type) + { + case NEXTHOP_TYPE_IPV4: + stream_put_in_addr (s, &nexthop->gate.ipv4); + break; + case NEXTHOP_TYPE_IPV4_IFINDEX: + stream_put_in_addr (s, &nexthop->gate.ipv4); + stream_putl (s, nexthop->ifindex); + break; + case NEXTHOP_TYPE_IPV6: + stream_put (s, &nexthop->gate.ipv6, 16); + break; + case NEXTHOP_TYPE_IPV6_IFINDEX: + stream_put (s, &nexthop->gate.ipv6, 16); + stream_putl (s, nexthop->ifindex); + break; + case NEXTHOP_TYPE_IFINDEX: + stream_putl (s, nexthop->ifindex); + break; + default: + /* do nothing */ + break; + } + return 1; +} + +static int zsend_nexthop_lookup (struct zserv *client, afi_t afi, safi_t safi, vrf_id_t vrf_id, union g_addr *addr) { @@ -789,33 +819,7 @@ zsend_nexthop_lookup (struct zserv *client, afi_t afi, safi_t safi, * chain of nexthops. */ for (nexthop = rib->nexthop; nexthop; nexthop = nexthop->next) if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)) - { - stream_putc (s, nexthop->type); - switch (nexthop->type) - { - case NEXTHOP_TYPE_IPV4: - stream_put_in_addr (s, &nexthop->gate.ipv4); - break; - case NEXTHOP_TYPE_IPV4_IFINDEX: - stream_put_in_addr (s, &nexthop->gate.ipv4); - stream_putl (s, nexthop->ifindex); - break; - case NEXTHOP_TYPE_IPV6: - stream_put (s, &nexthop->gate.ipv6, 16); - break; - case NEXTHOP_TYPE_IPV6_IFINDEX: - stream_put (s, &nexthop->gate.ipv6, 16); - stream_putl (s, nexthop->ifindex); - break; - case NEXTHOP_TYPE_IFINDEX: - stream_putl (s, nexthop->ifindex); - break; - default: - /* do nothing */ - break; - } - num++; - } + num += zsend_write_nexthop (s, nexthop); stream_putc_at (s, nump, num); } else @@ -977,26 +981,7 @@ zsend_ipv4_nexthop_lookup_mrib (struct zserv *client, struct in_addr addr, struc * chain of nexthops. */ for (nexthop = rib->nexthop; nexthop; nexthop = nexthop->next) if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)) - { - stream_putc (s, nexthop->type); - switch (nexthop->type) - { - case NEXTHOP_TYPE_IPV4: - stream_put_in_addr (s, &nexthop->gate.ipv4); - break; - case NEXTHOP_TYPE_IPV4_IFINDEX: - stream_put_in_addr (s, &nexthop->gate.ipv4); - stream_putl (s, nexthop->ifindex); - break; - case NEXTHOP_TYPE_IFINDEX: - stream_putl (s, nexthop->ifindex); - break; - default: - /* do nothing */ - break; - } - num++; - } + num += zsend_write_nexthop (s, nexthop); stream_putc_at (s, nump, num); /* store nexthop_num */ } @@ -1042,26 +1027,7 @@ zsend_ipv4_import_lookup (struct zserv *client, struct prefix_ipv4 *p, for (nexthop = rib->nexthop; nexthop; nexthop = nexthop->next) if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB) || nexthop_has_fib_child(nexthop)) - { - stream_putc (s, nexthop->type); - switch (nexthop->type) - { - case NEXTHOP_TYPE_IPV4: - stream_put_in_addr (s, &nexthop->gate.ipv4); - break; - case NEXTHOP_TYPE_IPV4_IFINDEX: - stream_put_in_addr (s, &nexthop->gate.ipv4); - stream_putl (s, nexthop->ifindex); - break; - case NEXTHOP_TYPE_IFINDEX: - stream_putl (s, nexthop->ifindex); - break; - default: - /* do nothing */ - break; - } - num++; - } + num += zsend_write_nexthop (s, nexthop); stream_putc_at (s, nump, num); } else |
