summaryrefslogtreecommitdiff
path: root/ospfd/ospf_zebra.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_zebra.c')
-rw-r--r--ospfd/ospf_zebra.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index c7bf38eb68..c0b94a3360 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -34,6 +34,8 @@
#include "filter.h"
#include "plist.h"
#include "log.h"
+#include "lib/bfd.h"
+#include "nexthop.h"
#include "ospfd/ospfd.h"
#include "ospfd/ospf_interface.h"
@@ -51,6 +53,7 @@
#ifdef HAVE_SNMP
#include "ospfd/ospf_snmp.h"
#endif /* HAVE_SNMP */
+#include "ospfd/ospf_te.h"
/* Zebra structure to hold current status. */
struct zclient *zclient = NULL;
@@ -329,6 +332,24 @@ ospf_interface_address_delete (int command, struct zclient *zclient,
return 0;
}
+static int
+ospf_interface_link_params (int command, struct zclient *zclient,
+ zebra_size_t length)
+{
+ struct interface *ifp;
+
+ ifp = zebra_interface_link_params_read (zclient->ibuf);
+
+ if (ifp == NULL)
+ return 0;
+
+ /* Update TE TLV */
+ ospf_mpls_te_update_if (ifp);
+
+ return 0;
+}
+
+
void
ospf_zebra_add (struct prefix_ipv4 *p, struct ospf_route *or)
{
@@ -392,18 +413,18 @@ ospf_zebra_add (struct prefix_ipv4 *p, struct ospf_route *or)
(path->nexthop.s_addr != INADDR_ANY &&
path->ifindex != 0))
{
- stream_putc (s, ZEBRA_NEXTHOP_IPV4_IFINDEX);
+ stream_putc (s, NEXTHOP_TYPE_IPV4_IFINDEX);
stream_put_in_addr (s, &path->nexthop);
stream_putl (s, path->ifindex);
}
else if (path->nexthop.s_addr != INADDR_ANY)
{
- stream_putc (s, ZEBRA_NEXTHOP_IPV4);
+ stream_putc (s, NEXTHOP_TYPE_IPV4);
stream_put_in_addr (s, &path->nexthop);
}
else
{
- stream_putc (s, ZEBRA_NEXTHOP_IFINDEX);
+ stream_putc (s, NEXTHOP_TYPE_IFINDEX);
if (path->ifindex)
stream_putl (s, path->ifindex);
else
@@ -413,18 +434,18 @@ ospf_zebra_add (struct prefix_ipv4 *p, struct ospf_route *or)
if (path->nexthop.s_addr != INADDR_ANY &&
path->ifindex != 0)
{
- stream_putc (s, ZEBRA_NEXTHOP_IPV4_IFINDEX);
+ stream_putc (s, NEXTHOP_TYPE_IPV4_IFINDEX);
stream_put_in_addr (s, &path->nexthop);
stream_putl (s, path->ifindex);
}
else if (path->nexthop.s_addr != INADDR_ANY)
{
- stream_putc (s, ZEBRA_NEXTHOP_IPV4);
+ stream_putc (s, NEXTHOP_TYPE_IPV4);
stream_put_in_addr (s, &path->nexthop);
}
else
{
- stream_putc (s, ZEBRA_NEXTHOP_IFINDEX);
+ stream_putc (s, NEXTHOP_TYPE_IFINDEX);
if (path->ifindex)
stream_putl (s, path->ifindex);
else
@@ -513,18 +534,18 @@ ospf_zebra_delete (struct prefix_ipv4 *p, struct ospf_route *or)
if (path->nexthop.s_addr != INADDR_ANY &&
path->ifindex != 0)
{
- stream_putc (s, ZEBRA_NEXTHOP_IPV4_IFINDEX);
+ stream_putc (s, NEXTHOP_TYPE_IPV4_IFINDEX);
stream_put_in_addr (s, &path->nexthop);
stream_putl (s, path->ifindex);
}
else if (path->nexthop.s_addr != INADDR_ANY)
{
- stream_putc (s, ZEBRA_NEXTHOP_IPV4);
+ stream_putc (s, NEXTHOP_TYPE_IPV4);
stream_put_in_addr (s, &path->nexthop);
}
else
{
- stream_putc (s, ZEBRA_NEXTHOP_IFINDEX);
+ stream_putc (s, NEXTHOP_TYPE_IFINDEX);
stream_putl (s, path->ifindex);
}
@@ -1558,6 +1579,9 @@ ospf_distance_apply (struct prefix_ipv4 *p, struct ospf_route *or)
static void
ospf_zebra_connected (struct zclient *zclient)
{
+ /* Send the client registration */
+ bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
+
zclient_send_reg_requests (zclient, VRF_DEFAULT);
}
@@ -1575,6 +1599,8 @@ ospf_zebra_init (struct thread_master *master, u_short instance)
zclient->interface_down = ospf_interface_state_down;
zclient->interface_address_add = ospf_interface_address_add;
zclient->interface_address_delete = ospf_interface_address_delete;
+ zclient->interface_link_params = ospf_interface_link_params;
+
zclient->ipv4_route_add = ospf_zebra_read_ipv4;
zclient->ipv4_route_delete = ospf_zebra_read_ipv4;
zclient->redistribute_route_ipv4_add = ospf_zebra_read_ipv4;