summaryrefslogtreecommitdiff
path: root/eigrpd/eigrp_zebra.c
diff options
context:
space:
mode:
authorwhitespace / reindent <invalid@invalid.invalid>2017-07-17 14:03:14 +0200
committerwhitespace / reindent <invalid@invalid.invalid>2017-07-17 14:04:07 +0200
commitd62a17aedeb0eebdba98238874bb13d62c48dbf9 (patch)
tree3b319b1d61c8b85b4d1f06adf8b844bb8a9b5107 /eigrpd/eigrp_zebra.c
parent888ac268a0077fc9ebd1218cec6ae472af0bfc40 (diff)
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'` Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'eigrpd/eigrp_zebra.c')
-rw-r--r--eigrpd/eigrp_zebra.c748
1 files changed, 364 insertions, 384 deletions
diff --git a/eigrpd/eigrp_zebra.c b/eigrpd/eigrp_zebra.c
index 38ce757cd0..1ee1237f75 100644
--- a/eigrpd/eigrp_zebra.c
+++ b/eigrpd/eigrp_zebra.c
@@ -53,21 +53,21 @@
#include "eigrpd/eigrp_topology.h"
#include "eigrpd/eigrp_fsm.h"
-static int eigrp_interface_add (int , struct zclient *, zebra_size_t, vrf_id_t);
-static int eigrp_interface_delete (int , struct zclient *,
- zebra_size_t, vrf_id_t);
-static int eigrp_interface_address_add (int, struct zclient *,
- zebra_size_t, vrf_id_t vrf_id);
-static int eigrp_interface_address_delete (int, struct zclient *,
- zebra_size_t, vrf_id_t vrf_id);
-static int eigrp_interface_state_up (int, struct zclient *,
- zebra_size_t, vrf_id_t vrf_id);
-static int eigrp_interface_state_down (int, struct zclient *,
- zebra_size_t, vrf_id_t vrf_id);
-static struct interface * zebra_interface_if_lookup (struct stream *);
-
-static int eigrp_zebra_read_ipv4 (int , struct zclient *,
- zebra_size_t, vrf_id_t vrf_id);
+static int eigrp_interface_add(int, struct zclient *, zebra_size_t, vrf_id_t);
+static int eigrp_interface_delete(int, struct zclient *, zebra_size_t,
+ vrf_id_t);
+static int eigrp_interface_address_add(int, struct zclient *, zebra_size_t,
+ vrf_id_t vrf_id);
+static int eigrp_interface_address_delete(int, struct zclient *, zebra_size_t,
+ vrf_id_t vrf_id);
+static int eigrp_interface_state_up(int, struct zclient *, zebra_size_t,
+ vrf_id_t vrf_id);
+static int eigrp_interface_state_down(int, struct zclient *, zebra_size_t,
+ vrf_id_t vrf_id);
+static struct interface *zebra_interface_if_lookup(struct stream *);
+
+static int eigrp_zebra_read_ipv4(int, struct zclient *, zebra_size_t,
+ vrf_id_t vrf_id);
/* Zebra structure to hold current status. */
struct zclient *zclient = NULL;
@@ -77,475 +77,455 @@ extern struct thread_master *master;
struct in_addr router_id_zebra;
/* Router-id update message from zebra. */
-static int
-eigrp_router_id_update_zebra (int command, struct zclient *zclient,
- zebra_size_t length, vrf_id_t vrf_id)
+static int eigrp_router_id_update_zebra(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct eigrp *eigrp;
- struct prefix router_id;
- zebra_router_id_update_read (zclient->ibuf,&router_id);
+ struct eigrp *eigrp;
+ struct prefix router_id;
+ zebra_router_id_update_read(zclient->ibuf, &router_id);
- router_id_zebra = router_id.u.prefix4;
+ router_id_zebra = router_id.u.prefix4;
- eigrp = eigrp_lookup ();
+ eigrp = eigrp_lookup();
- if (eigrp != NULL)
- eigrp_router_id_update (eigrp);
+ if (eigrp != NULL)
+ eigrp_router_id_update(eigrp);
- return 0;
+ return 0;
}
-static void
-eigrp_zebra_connected (struct zclient *zclient)
+static void eigrp_zebra_connected(struct zclient *zclient)
{
- zclient_send_reg_requests (zclient, VRF_DEFAULT);
+ zclient_send_reg_requests(zclient, VRF_DEFAULT);
}
-void
-eigrp_zebra_init (void)
+void eigrp_zebra_init(void)
{
- zclient = zclient_new (master);
-
- zclient_init (zclient, ZEBRA_ROUTE_EIGRP, 0);
- zclient->zebra_connected = eigrp_zebra_connected;
- zclient->router_id_update = eigrp_router_id_update_zebra;
- zclient->interface_add = eigrp_interface_add;
- zclient->interface_delete = eigrp_interface_delete;
- zclient->interface_up = eigrp_interface_state_up;
- zclient->interface_down = eigrp_interface_state_down;
- zclient->interface_address_add = eigrp_interface_address_add;
- zclient->interface_address_delete = eigrp_interface_address_delete;
- zclient->redistribute_route_ipv4_add = eigrp_zebra_read_ipv4;
- zclient->redistribute_route_ipv4_del = eigrp_zebra_read_ipv4;
+ zclient = zclient_new(master);
+
+ zclient_init(zclient, ZEBRA_ROUTE_EIGRP, 0);
+ zclient->zebra_connected = eigrp_zebra_connected;
+ zclient->router_id_update = eigrp_router_id_update_zebra;
+ zclient->interface_add = eigrp_interface_add;
+ zclient->interface_delete = eigrp_interface_delete;
+ zclient->interface_up = eigrp_interface_state_up;
+ zclient->interface_down = eigrp_interface_state_down;
+ zclient->interface_address_add = eigrp_interface_address_add;
+ zclient->interface_address_delete = eigrp_interface_address_delete;
+ zclient->redistribute_route_ipv4_add = eigrp_zebra_read_ipv4;
+ zclient->redistribute_route_ipv4_del = eigrp_zebra_read_ipv4;
}
/* Zebra route add and delete treatment. */
-static int
-eigrp_zebra_read_ipv4 (int command, struct zclient *zclient,
- zebra_size_t length, vrf_id_t vrf_id)
+static int eigrp_zebra_read_ipv4(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct stream *s;
- struct zapi_ipv4 api;
- struct prefix_ipv4 p;
- struct eigrp *eigrp;
-
- s = zclient->ibuf;
-
- /* Type, flags, message. */
- api.type = stream_getc (s);
- api.instance = stream_getw (s);
- api.flags = stream_getc (s);
- api.message = stream_getc (s);
-
- /* IPv4 prefix. */
- memset (&p, 0, sizeof (struct prefix_ipv4));
- p.family = AF_INET;
- p.prefixlen = stream_getc (s);
- stream_get (&p.prefix, s, PSIZE (p.prefixlen));
-
- if (IPV4_NET127(ntohl(p.prefix.s_addr)))
- return 0;
-
- /* Nexthop, ifindex, distance, metric. */
- if (CHECK_FLAG (api.message, ZAPI_MESSAGE_NEXTHOP))
- {
- api.nexthop_num = stream_getc (s);
- stream_get_ipv4 (s);
- }
- if (CHECK_FLAG (api.message, ZAPI_MESSAGE_IFINDEX))
- {
- api.ifindex_num = stream_getc (s);
- /* XXX assert(api.ifindex_num == 1); */
- stream_getl (s); /* ifindex, unused */
- }
- if (CHECK_FLAG (api.message, ZAPI_MESSAGE_DISTANCE))
- api.distance = stream_getc (s);
- if (CHECK_FLAG (api.message, ZAPI_MESSAGE_METRIC))
- api.metric = stream_getl (s);
-
- eigrp = eigrp_lookup ();
- if (eigrp == NULL)
- return 0;
-
- if (command == ZEBRA_IPV4_ROUTE_ADD)
- {
-
- }
- else /* if (command == ZEBRA_IPV4_ROUTE_DELETE) */
- {
-
- }
-
- return 0;
+ struct stream *s;
+ struct zapi_ipv4 api;
+ struct prefix_ipv4 p;
+ struct eigrp *eigrp;
+
+ s = zclient->ibuf;
+
+ /* Type, flags, message. */
+ api.type = stream_getc(s);
+ api.instance = stream_getw(s);
+ api.flags = stream_getc(s);
+ api.message = stream_getc(s);
+
+ /* IPv4 prefix. */
+ memset(&p, 0, sizeof(struct prefix_ipv4));
+ p.family = AF_INET;
+ p.prefixlen = stream_getc(s);
+ stream_get(&p.prefix, s, PSIZE(p.prefixlen));
+
+ if (IPV4_NET127(ntohl(p.prefix.s_addr)))
+ return 0;
+
+ /* Nexthop, ifindex, distance, metric. */
+ if (CHECK_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP)) {
+ api.nexthop_num = stream_getc(s);
+ stream_get_ipv4(s);
+ }
+ if (CHECK_FLAG(api.message, ZAPI_MESSAGE_IFINDEX)) {
+ api.ifindex_num = stream_getc(s);
+ /* XXX assert(api.ifindex_num == 1); */
+ stream_getl(s); /* ifindex, unused */
+ }
+ if (CHECK_FLAG(api.message, ZAPI_MESSAGE_DISTANCE))
+ api.distance = stream_getc(s);
+ if (CHECK_FLAG(api.message, ZAPI_MESSAGE_METRIC))
+ api.metric = stream_getl(s);
+
+ eigrp = eigrp_lookup();
+ if (eigrp == NULL)
+ return 0;
+
+ if (command == ZEBRA_IPV4_ROUTE_ADD) {
+
+ } else /* if (command == ZEBRA_IPV4_ROUTE_DELETE) */
+ {
+ }
+
+ return 0;
}
/* Inteface addition message from zebra. */
-static int
-eigrp_interface_add (int command, struct zclient *zclient, zebra_size_t length,
- vrf_id_t vrf_id)
+static int eigrp_interface_add(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct interface *ifp;
+ struct interface *ifp;
- ifp = zebra_interface_add_read (zclient->ibuf, vrf_id);
+ ifp = zebra_interface_add_read(zclient->ibuf, vrf_id);
- assert (ifp->info);
+ assert(ifp->info);
- if (!EIGRP_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), type))
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), type);
- IF_DEF_PARAMS (ifp)->type = eigrp_default_iftype (ifp);
- }
+ if (!EIGRP_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp), type)) {
+ SET_IF_PARAM(IF_DEF_PARAMS(ifp), type);
+ IF_DEF_PARAMS(ifp)->type = eigrp_default_iftype(ifp);
+ }
- eigrp_if_update (ifp);
+ eigrp_if_update(ifp);
- return 0;
+ return 0;
}
-static int
-eigrp_interface_delete (int command, struct zclient *zclient,
- zebra_size_t length, vrf_id_t vrf_id)
+static int eigrp_interface_delete(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct interface *ifp;
- struct stream *s;
- struct route_node *rn;
-
- s = zclient->ibuf;
- /* zebra_interface_state_read () updates interface structure in iflist */
- ifp = zebra_interface_state_read (s, vrf_id);
-
- if (ifp == NULL)
- return 0;
-
- if (if_is_up (ifp))
- zlog_warn ("Zebra: got delete of %s, but interface is still up",
- ifp->name);
-
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- zlog_debug("Zebra: interface delete %s index %d flags %llx metric %d mtu %d",
- ifp->name, ifp->ifindex, (unsigned long long)ifp->flags, ifp->metric, ifp->mtu);
-
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if (rn->info)
- eigrp_if_free ((struct eigrp_interface *) rn->info, INTERFACE_DOWN_BY_ZEBRA);
-
- ifp->ifindex = IFINDEX_INTERNAL;
- return 0;
+ struct interface *ifp;
+ struct stream *s;
+ struct route_node *rn;
+
+ s = zclient->ibuf;
+ /* zebra_interface_state_read () updates interface structure in iflist
+ */
+ ifp = zebra_interface_state_read(s, vrf_id);
+
+ if (ifp == NULL)
+ return 0;
+
+ if (if_is_up(ifp))
+ zlog_warn("Zebra: got delete of %s, but interface is still up",
+ ifp->name);
+
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE))
+ zlog_debug(
+ "Zebra: interface delete %s index %d flags %llx metric %d mtu %d",
+ ifp->name, ifp->ifindex, (unsigned long long)ifp->flags,
+ ifp->metric, ifp->mtu);
+
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn))
+ if (rn->info)
+ eigrp_if_free((struct eigrp_interface *)rn->info,
+ INTERFACE_DOWN_BY_ZEBRA);
+
+ ifp->ifindex = IFINDEX_INTERNAL;
+ return 0;
}
-static int
-eigrp_interface_address_add (int command, struct zclient *zclient,
- zebra_size_t length, vrf_id_t vrf_id)
+static int eigrp_interface_address_add(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct connected *c;
+ struct connected *c;
- c = zebra_interface_address_read (command, zclient->ibuf, vrf_id);
+ c = zebra_interface_address_read(command, zclient->ibuf, vrf_id);
- if (c == NULL)
- return 0;
+ if (c == NULL)
+ return 0;
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- {
- char buf[128];
- prefix2str (c->address, buf, sizeof (buf));
- zlog_debug ("Zebra: interface %s address add %s", c->ifp->name, buf);
- }
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE)) {
+ char buf[128];
+ prefix2str(c->address, buf, sizeof(buf));
+ zlog_debug("Zebra: interface %s address add %s", c->ifp->name,
+ buf);
+ }
- eigrp_if_update (c->ifp);
+ eigrp_if_update(c->ifp);
- return 0;
+ return 0;
}
-static int
-eigrp_interface_address_delete (int command, struct zclient *zclient,
- zebra_size_t length, vrf_id_t vrf_id)
+static int eigrp_interface_address_delete(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct connected *c;
- struct interface *ifp;
- struct eigrp_interface *ei;
- struct route_node *rn;
- struct prefix p;
+ struct connected *c;
+ struct interface *ifp;
+ struct eigrp_interface *ei;
+ struct route_node *rn;
+ struct prefix p;
- c = zebra_interface_address_read (command, zclient->ibuf, vrf_id);
+ c = zebra_interface_address_read(command, zclient->ibuf, vrf_id);
- if (c == NULL)
- return 0;
+ if (c == NULL)
+ return 0;
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- {
- char buf[128];
- prefix2str (c->address, buf, sizeof (buf));
- zlog_debug ("Zebra: interface %s address delete %s", c->ifp->name, buf);
- }
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE)) {
+ char buf[128];
+ prefix2str(c->address, buf, sizeof(buf));
+ zlog_debug("Zebra: interface %s address delete %s",
+ c->ifp->name, buf);
+ }
- ifp = c->ifp;
- p = *c->address;
- p.prefixlen = IPV4_MAX_PREFIXLEN;
+ ifp = c->ifp;
+ p = *c->address;
+ p.prefixlen = IPV4_MAX_PREFIXLEN;
- rn = route_node_lookup (IF_OIFS (ifp), &p);
- if (!rn)
- {
- connected_free (c);
- return 0;
- }
+ rn = route_node_lookup(IF_OIFS(ifp), &p);
+ if (!rn) {
+ connected_free(c);
+ return 0;
+ }
- assert (rn->info);
- ei = rn->info;
+ assert(rn->info);
+ ei = rn->info;
- /* Call interface hook functions to clean up */
- eigrp_if_free (ei, INTERFACE_DOWN_BY_ZEBRA);
+ /* Call interface hook functions to clean up */
+ eigrp_if_free(ei, INTERFACE_DOWN_BY_ZEBRA);
- connected_free (c);
+ connected_free(c);
- return 0;
+ return 0;
}
-static int
-eigrp_interface_state_up (int command, struct zclient *zclient,
- zebra_size_t length, vrf_id_t vrf_id)
+static int eigrp_interface_state_up(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct interface *ifp;
- struct eigrp_interface *ei;
- struct route_node *rn;
+ struct interface *ifp;
+ struct eigrp_interface *ei;
+ struct route_node *rn;
- ifp = zebra_interface_if_lookup (zclient->ibuf);
+ ifp = zebra_interface_if_lookup(zclient->ibuf);
- if (ifp == NULL)
- return 0;
+ if (ifp == NULL)
+ return 0;
- /* Interface is already up. */
- if (if_is_operative (ifp))
- {
- /* Temporarily keep ifp values. */
- struct interface if_tmp;
- memcpy (&if_tmp, ifp, sizeof (struct interface));
+ /* Interface is already up. */
+ if (if_is_operative(ifp)) {
+ /* Temporarily keep ifp values. */
+ struct interface if_tmp;
+ memcpy(&if_tmp, ifp, sizeof(struct interface));
- zebra_interface_if_set_value (zclient->ibuf, ifp);
+ zebra_interface_if_set_value(zclient->ibuf, ifp);
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- zlog_debug ("Zebra: Interface[%s] state update.", ifp->name);
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE))
+ zlog_debug("Zebra: Interface[%s] state update.",
+ ifp->name);
- if (if_tmp.bandwidth != ifp->bandwidth)
- {
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- zlog_debug ("Zebra: Interface[%s] bandwidth change %d -> %d.",
- ifp->name, if_tmp.bandwidth, ifp->bandwidth);
+ if (if_tmp.bandwidth != ifp->bandwidth) {
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE))
+ zlog_debug(
+ "Zebra: Interface[%s] bandwidth change %d -> %d.",
+ ifp->name, if_tmp.bandwidth,
+ ifp->bandwidth);
- // eigrp_if_recalculate_output_cost (ifp);
- }
+ // eigrp_if_recalculate_output_cost (ifp);
+ }
- if (if_tmp.mtu != ifp->mtu)
- {
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- zlog_debug ("Zebra: Interface[%s] MTU change %u -> %u.",
- ifp->name, if_tmp.mtu, ifp->mtu);
+ if (if_tmp.mtu != ifp->mtu) {
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE))
+ zlog_debug(
+ "Zebra: Interface[%s] MTU change %u -> %u.",
+ ifp->name, if_tmp.mtu, ifp->mtu);
- /* Must reset the interface (simulate down/up) when MTU changes. */
- eigrp_if_reset (ifp);
- }
- return 0;
- }
+ /* Must reset the interface (simulate down/up) when MTU
+ * changes. */
+ eigrp_if_reset(ifp);
+ }
+ return 0;
+ }
- zebra_interface_if_set_value (zclient->ibuf, ifp);
+ zebra_interface_if_set_value(zclient->ibuf, ifp);
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- zlog_debug ("Zebra: Interface[%s] state change to up.", ifp->name);
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE))
+ zlog_debug("Zebra: Interface[%s] state change to up.",
+ ifp->name);
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- if ((ei = rn->info) == NULL)
- continue;
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ if ((ei = rn->info) == NULL)
+ continue;
- eigrp_if_up (ei);
- }
+ eigrp_if_up(ei);
+ }
- return 0;
+ return 0;
}
-static int
-eigrp_interface_state_down (int command, struct zclient *zclient,
- zebra_size_t length, vrf_id_t vrf_id)
+static int eigrp_interface_state_down(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
{
- struct interface *ifp;
- struct eigrp_interface *ei;
- struct route_node *node;
+ struct interface *ifp;
+ struct eigrp_interface *ei;
+ struct route_node *node;
- ifp = zebra_interface_state_read (zclient->ibuf, vrf_id);
+ ifp = zebra_interface_state_read(zclient->ibuf, vrf_id);
- if (ifp == NULL)
- return 0;
+ if (ifp == NULL)
+ return 0;
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_INTERFACE))
- zlog_debug ("Zebra: Interface[%s] state change to down.", ifp->name);
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_INTERFACE))
+ zlog_debug("Zebra: Interface[%s] state change to down.",
+ ifp->name);
- for (node = route_top (IF_OIFS (ifp)); node; node = route_next (node))
- {
- if ((ei = node->info) == NULL)
- continue;
- eigrp_if_down (ei);
- }
+ for (node = route_top(IF_OIFS(ifp)); node; node = route_next(node)) {
+ if ((ei = node->info) == NULL)
+ continue;
+ eigrp_if_down(ei);
+ }
- return 0;
+ return 0;
}
-static struct interface *
-zebra_interface_if_lookup (struct stream *s)
+static struct interface *zebra_interface_if_lookup(struct stream *s)
{
- char ifname_tmp[INTERFACE_NAMSIZ];
+ char ifname_tmp[INTERFACE_NAMSIZ];
- /* Read interface name. */
- stream_get (ifname_tmp, s, INTERFACE_NAMSIZ);
+ /* Read interface name. */
+ stream_get(ifname_tmp, s, INTERFACE_NAMSIZ);
- /* And look it up. */
- return if_lookup_by_name_len (ifname_tmp,
- strnlen (ifname_tmp, INTERFACE_NAMSIZ),
- VRF_DEFAULT);
+ /* And look it up. */
+ return if_lookup_by_name_len(
+ ifname_tmp, strnlen(ifname_tmp, INTERFACE_NAMSIZ), VRF_DEFAULT);
}
-void
-eigrp_zebra_route_add (struct prefix_ipv4 *p, struct list *successors)
+void eigrp_zebra_route_add(struct prefix_ipv4 *p, struct list *successors)
{
- struct eigrp_neighbor_entry *te;
- struct listnode *node;
- u_char message;
- u_char flags;
- int psize;
- struct stream *s;
-
- if (zclient->redist[AFI_IP][ZEBRA_ROUTE_EIGRP])
- {
- message = 0;
- flags = 0;
-
- /* EIGRP pass nexthop and metric */
- SET_FLAG (message, ZAPI_MESSAGE_NEXTHOP);
-
- /* Make packet. */
- s = zclient->obuf;
- stream_reset (s);
-
- /* Put command, type, flags, message. */
- zclient_create_header (s, ZEBRA_IPV4_ROUTE_ADD, VRF_DEFAULT);
- stream_putc (s, ZEBRA_ROUTE_EIGRP);
- stream_putw (s, 0);
- stream_putl (s, flags);
- stream_putc (s, message);
- stream_putw (s, SAFI_UNICAST);
-
- /* Put prefix information. */
- psize = PSIZE (p->prefixlen);
- stream_putc (s, p->prefixlen);
- stream_write (s, (u_char *) & p->prefix, psize);
-
- /* Nexthop count. */
- stream_putc (s, successors->count);
-
- /* Nexthop, ifindex, distance and metric information. */
- for (ALL_LIST_ELEMENTS_RO (successors, node, te))
- {
- if (te->adv_router->src.s_addr)
- {
- stream_putc (s, NEXTHOP_TYPE_IPV4_IFINDEX);
- stream_put_in_addr (s, &te->adv_router->src);
- }
- else
- stream_putc (s, NEXTHOP_TYPE_IFINDEX);
- stream_putl (s, te->ei->ifp->ifindex);
- }
-
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE))
- {
- char buf[2][INET_ADDRSTRLEN];
- zlog_debug ("Zebra: Route add %s/%d nexthop %s",
- inet_ntop(AF_INET, &p->prefix, buf[0], sizeof (buf[0])),
- p->prefixlen,
- inet_ntop(AF_INET, 0 /*&p->nexthop*/, buf[1], sizeof (buf[1])));
- }
-
- stream_putw_at (s, 0, stream_get_endp (s));
-
- zclient_send_message (zclient);
- }
+ struct eigrp_neighbor_entry *te;
+ struct listnode *node;
+ u_char message;
+ u_char flags;
+ int psize;
+ struct stream *s;
+
+ if (zclient->redist[AFI_IP][ZEBRA_ROUTE_EIGRP]) {
+ message = 0;
+ flags = 0;
+
+ /* EIGRP pass nexthop and metric */
+ SET_FLAG(message, ZAPI_MESSAGE_NEXTHOP);
+
+ /* Make packet. */
+ s = zclient->obuf;
+ stream_reset(s);
+
+ /* Put command, type, flags, message. */
+ zclient_create_header(s, ZEBRA_IPV4_ROUTE_ADD, VRF_DEFAULT);
+ stream_putc(s, ZEBRA_ROUTE_EIGRP);
+ stream_putw(s, 0);
+ stream_putl(s, flags);
+ stream_putc(s, message);
+ stream_putw(s, SAFI_UNICAST);
+
+ /* Put prefix information. */
+ psize = PSIZE(p->prefixlen);
+ stream_putc(s, p->prefixlen);
+ stream_write(s, (u_char *)&p->prefix, psize);
+
+ /* Nexthop count. */
+ stream_putc(s, successors->count);
+
+ /* Nexthop, ifindex, distance and metric information. */
+ for (ALL_LIST_ELEMENTS_RO(successors, node, te)) {
+ if (te->adv_router->src.s_addr) {
+ stream_putc(s, NEXTHOP_TYPE_IPV4_IFINDEX);
+ stream_put_in_addr(s, &te->adv_router->src);
+ } else
+ stream_putc(s, NEXTHOP_TYPE_IFINDEX);
+ stream_putl(s, te->ei->ifp->ifindex);
+ }
+
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_REDISTRIBUTE)) {
+ char buf[2][INET_ADDRSTRLEN];
+ zlog_debug("Zebra: Route add %s/%d nexthop %s",
+ inet_ntop(AF_INET, &p->prefix, buf[0],
+ sizeof(buf[0])),
+ p->prefixlen,
+ inet_ntop(AF_INET, 0 /*&p->nexthop*/, buf[1],
+ sizeof(buf[1])));
+ }
+
+ stream_putw_at(s, 0, stream_get_endp(s));
+
+ zclient_send_message(zclient);
+ }
}
-void
-eigrp_zebra_route_delete (struct prefix_ipv4 *p)
+void eigrp_zebra_route_delete(struct prefix_ipv4 *p)
{
- struct zapi_ipv4 api;
-
- if (zclient->redist[AFI_IP][ZEBRA_ROUTE_EIGRP])
- {
- api.vrf_id = VRF_DEFAULT;
- api.type = ZEBRA_ROUTE_EIGRP;
- api.instance = 0;
- api.flags = 0;
- api.message = 0;
- api.safi = SAFI_UNICAST;
- zapi_ipv4_route (ZEBRA_IPV4_ROUTE_DELETE, zclient, p, &api);
-
- if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE))
- {
- char buf[2][INET_ADDRSTRLEN];
- zlog_debug ("Zebra: Route del %s/%d nexthop %s",
- inet_ntop (AF_INET, &p->prefix, buf[0], sizeof (buf[0])),
- p->prefixlen,
- inet_ntop (AF_INET, 0 /*&p->nexthop*/, buf[1], sizeof (buf[1])));
- }
- }
-
- return;
+ struct zapi_ipv4 api;
+
+ if (zclient->redist[AFI_IP][ZEBRA_ROUTE_EIGRP]) {
+ api.vrf_id = VRF_DEFAULT;
+ api.type = ZEBRA_ROUTE_EIGRP;
+ api.instance = 0;
+ api.flags = 0;
+ api.message = 0;
+ api.safi = SAFI_UNICAST;
+ zapi_ipv4_route(ZEBRA_IPV4_ROUTE_DELETE, zclient, p, &api);
+
+ if (IS_DEBUG_EIGRP(zebra, ZEBRA_REDISTRIBUTE)) {
+ char buf[2][INET_ADDRSTRLEN];
+ zlog_debug("Zebra: Route del %s/%d nexthop %s",
+ inet_ntop(AF_INET, &p->prefix, buf[0],
+ sizeof(buf[0])),
+ p->prefixlen,
+ inet_ntop(AF_INET, 0 /*&p->nexthop*/, buf[1],
+ sizeof(buf[1])));
+ }
+ }
+
+ return;
}
-int
-eigrp_is_type_redistributed (int type)
+int eigrp_is_type_redistributed(int type)
{
- return ((DEFAULT_ROUTE_TYPE (type)) ?
- vrf_bitmap_check (zclient->default_information, VRF_DEFAULT) :
- vrf_bitmap_check (zclient->redist[AFI_IP][type], VRF_DEFAULT));
+ return ((DEFAULT_ROUTE_TYPE(type))
+ ? vrf_bitmap_check(zclient->default_information,
+ VRF_DEFAULT)
+ : vrf_bitmap_check(zclient->redist[AFI_IP][type],
+ VRF_DEFAULT));
}
-int
-eigrp_redistribute_set (struct eigrp *eigrp, int type, struct eigrp_metrics metric)
+int eigrp_redistribute_set(struct eigrp *eigrp, int type,
+ struct eigrp_metrics metric)
{
- if (eigrp_is_type_redistributed (type))
- {
- if (eigrp_metrics_is_same(metric, eigrp->dmetric[type]))
- {
- eigrp->dmetric[type] = metric;
- }
+ if (eigrp_is_type_redistributed(type)) {
+ if (eigrp_metrics_is_same(metric, eigrp->dmetric[type])) {
+ eigrp->dmetric[type] = metric;
+ }
- eigrp_external_routes_refresh (eigrp, type);
+ eigrp_external_routes_refresh(eigrp, type);
- // if (IS_DEBUG_EIGRP(zebra, ZEBRA_REDISTRIBUTE))
- // zlog_debug ("Redistribute[%s]: Refresh Type[%d], Metric[%d]",
- // eigrp_redist_string(type),
- // metric_type (eigrp, type), metric_value (eigrp, type));
- return CMD_SUCCESS;
- }
+ // if (IS_DEBUG_EIGRP(zebra, ZEBRA_REDISTRIBUTE))
+ // zlog_debug ("Redistribute[%s]: Refresh Type[%d],
+ // Metric[%d]",
+ // eigrp_redist_string(type),
+ // metric_type (eigrp, type), metric_value
+ // (eigrp, type));
+ return CMD_SUCCESS;
+ }
- eigrp->dmetric[type] = metric;
+ eigrp->dmetric[type] = metric;
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient,
- AFI_IP, type, 0, VRF_DEFAULT);
+ zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, type, 0,
+ VRF_DEFAULT);
- ++eigrp->redistribute;
+ ++eigrp->redistribute;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-int
-eigrp_redistribute_unset (struct eigrp *eigrp, int type)
+int eigrp_redistribute_unset(struct eigrp *eigrp, int type)
{
- if (eigrp_is_type_redistributed (type))
- {
- memset(&eigrp->dmetric[type], 0, sizeof(struct eigrp_metrics));
- zclient_redistribute (ZEBRA_REDISTRIBUTE_DELETE, zclient,
- AFI_IP, type, 0, VRF_DEFAULT);
- --eigrp->redistribute;
- }
+ if (eigrp_is_type_redistributed(type)) {
+ memset(&eigrp->dmetric[type], 0, sizeof(struct eigrp_metrics));
+ zclient_redistribute(ZEBRA_REDISTRIBUTE_DELETE, zclient, AFI_IP,
+ type, 0, VRF_DEFAULT);
+ --eigrp->redistribute;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-