Skip to content

Commit df7297d

Browse files
safchaindvandra
authored andcommitted
gremlin: fix nexthop for IP being default and destination
1 parent aac588b commit df7297d

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

topology/nexthop.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,30 +54,47 @@ func GetNextHop(node *graph.Node, ip net.IP) (*NextHop, error) {
5454
for _, t := range *rts {
5555
var defaultRouteIP net.IP
5656
var defaultIfIndex int64
57+
var nh *NextHop
58+
59+
getNeighbor := func(ip net.IP) string {
60+
if neighbors != nil {
61+
return neighbors.getMAC(ip)
62+
}
63+
return ""
64+
}
5765

5866
for _, r := range t.Routes {
5967
ipnet := net.IPNet(r.Prefix)
6068
if r.Prefix.IsDefaultRoute() {
6169
defaultRouteIP = r.NextHops[0].IP
6270
defaultIfIndex = r.NextHops[0].IfIndex
6371
} else if ipnet.Contains(ip) {
64-
nextIP := r.NextHops[0].IP
65-
nh := &NextHop{IfIndex: r.NextHops[0].IfIndex}
66-
if nextIP != nil {
67-
nh.IP = nextIP
68-
if neighbors != nil {
69-
nh.MAC = neighbors.getMAC(nextIP)
70-
}
72+
nh = &NextHop{IfIndex: r.NextHops[0].IfIndex}
73+
74+
if r.NextHops[0].IP != nil {
75+
nh.IP = r.NextHops[0].IP
76+
nh.MAC = getNeighbor(nh.IP)
77+
78+
// dedicated NH so return here
79+
return nh, nil
7180
}
72-
return nh, nil
81+
82+
// same network but maybe a dedicated route, keep checking
83+
nh.IP = ip
84+
nh.MAC = getNeighbor(nh.IP)
7385
}
7486
}
7587

88+
// one route found
89+
if nh != nil {
90+
return nh, nil
91+
}
92+
93+
// no route found try with the default
7694
if defaultRouteIP != nil {
7795
nh := &NextHop{IP: defaultRouteIP, IfIndex: defaultIfIndex}
78-
if neighbors != nil {
79-
nh.MAC = neighbors.getMAC(defaultRouteIP)
80-
}
96+
nh.MAC = getNeighbor(nh.IP)
97+
8198
return nh, nil
8299
}
83100
}

0 commit comments

Comments
 (0)