]> git.proxmox.com Git - mirror_frr.git/blobdiff - ldpd/ldp_zebra.c
Merge pull request #3069 from donaldsharp/bgp_nexthop_address
[mirror_frr.git] / ldpd / ldp_zebra.c
index e703a9ff61adad1896e7c36e45f43b3e775ecf4e..c8b775cb8e8bf96416a8703cf9aa52a62fbb198b 100644 (file)
@@ -142,9 +142,9 @@ zebra_send_mpls_labels(int cmd, struct kroute *kr)
                stream_put_in_addr(s, &kr->nexthop.v4);
                break;
        case AF_INET6:
-               stream_write(s, (u_char *)&kr->prefix.v6, 16);
+               stream_write(s, (uint8_t *)&kr->prefix.v6, 16);
                stream_putc(s, kr->prefixlen);
-               stream_write(s, (u_char *)&kr->nexthop.v6, 16);
+               stream_write(s, (uint8_t *)&kr->nexthop.v6, 16);
                break;
        default:
                fatalx("kr_change: unknown af");
@@ -450,18 +450,38 @@ ldp_zebra_read_route(int command, struct zclient *zclient, zebra_size_t length,
        /* loop through all the nexthops */
        for (i = 0; i < api.nexthop_num; i++) {
                api_nh = &api.nexthops[i];
-
-               switch (kr.af) {
-               case AF_INET:
+               switch (api_nh->type) {
+               case NEXTHOP_TYPE_IPV4:
+                       if (kr.af != AF_INET)
+                               continue;
+                       kr.nexthop.v4 = api_nh->gate.ipv4;
+                       kr.ifindex = 0;
+                       break;
+               case NEXTHOP_TYPE_IPV4_IFINDEX:
+                       if (kr.af != AF_INET)
+                               continue;
                        kr.nexthop.v4 = api_nh->gate.ipv4;
+                       kr.ifindex = api_nh->ifindex;
                        break;
-               case AF_INET6:
+               case NEXTHOP_TYPE_IPV6:
+                       if (kr.af != AF_INET6)
+                               continue;
                        kr.nexthop.v6 = api_nh->gate.ipv6;
+                       kr.ifindex = 0;
                        break;
-               default:
+               case NEXTHOP_TYPE_IPV6_IFINDEX:
+                       if (kr.af != AF_INET6)
+                               continue;
+                       kr.nexthop.v6 = api_nh->gate.ipv6;
+                       kr.ifindex = api_nh->ifindex;
+                       break;
+               case NEXTHOP_TYPE_IFINDEX:
+                       if (!(kr.flags & F_CONNECTED))
+                               continue;
                        break;
+               default:
+                       continue;
                }
-               kr.ifindex = api_nh->ifindex;;
 
                debug_zebra_in("route %s %s/%d nexthop %s ifindex %u (%s)",
                    (add) ? "add" : "delete", log_addr(kr.af, &kr.prefix),