diff options
Diffstat (limited to 'ospfd/ospf_zebra.c')
| -rw-r--r-- | ospfd/ospf_zebra.c | 44 |
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; |
