You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@fujita Sorry for trouble you again. Recently I looked at the implementation of global rib for bmp and did some testing, and found that there are may be a issue?
Here is the relevant code for processing:
case *watchEventBestPath:
info := &table.PeerInfo{
Address: net.ParseIP("0.0.0.0").To4(),
AS: b.s.bgpConfig.Global.Config.As,
ID: net.ParseIP(b.s.bgpConfig.Global.Config.RouterId).To4(),
}
for _, p := range msg.PathList {
u := table.CreateUpdateMsgFromPaths([]*table.Path{p})[0]
if payload, err := u.Serialize(); err != nil {
return false
} else if err = write(bmpPeerRoute(bmp.BMP_PEER_TYPE_LOCAL_RIB, false, 0, true, info, p.GetTimestamp().Unix(), payload)); err != nil {
return false
}
}
the question is, if the TOPO is like this:
gobgpd-----router1
|
|_______router2
and gobgpd enable multipath, router1 and router2 send the same destination route to gobgpd. So gobgpd will add two equivalent routing to global rib. But in bmp case, the above logic actually only handles the case where there is only one routing. So bmp message it is not match the real situation.
We modified some code (mainly passing in oldpathlist for comparison with msg. MultiPathList and if multipah is enabled then go to the new logic), and the measured effect is that in the above scenario, the update message can be sent correctly.
I'm not quite sure what the reason is for ignoring multipath here. and If it weren't for the fact that dealing with multipath creates other problems, can I commit the relevant changes to override this scenario?
The text was updated successfully, but these errors were encountered:
@fujita Sorry for trouble you again. Recently I looked at the implementation of global rib for bmp and did some testing, and found that there are may be a issue?
Here is the relevant code for processing:
case *watchEventBestPath:
info := &table.PeerInfo{
Address: net.ParseIP("0.0.0.0").To4(),
AS: b.s.bgpConfig.Global.Config.As,
ID: net.ParseIP(b.s.bgpConfig.Global.Config.RouterId).To4(),
}
for _, p := range msg.PathList {
u := table.CreateUpdateMsgFromPaths([]*table.Path{p})[0]
if payload, err := u.Serialize(); err != nil {
return false
} else if err = write(bmpPeerRoute(bmp.BMP_PEER_TYPE_LOCAL_RIB, false, 0, true, info, p.GetTimestamp().Unix(), payload)); err != nil {
return false
}
}
the question is, if the TOPO is like this:
gobgpd-----router1
|
|_______router2
and gobgpd enable multipath, router1 and router2 send the same destination route to gobgpd. So gobgpd will add two equivalent routing to global rib. But in bmp case, the above logic actually only handles the case where there is only one routing. So bmp message it is not match the real situation.
We modified some code (mainly passing in oldpathlist for comparison with msg. MultiPathList and if multipah is enabled then go to the new logic), and the measured effect is that in the above scenario, the update message can be sent correctly.
I'm not quite sure what the reason is for ignoring multipath here. and If it weren't for the fact that dealing with multipath creates other problems, can I commit the relevant changes to override this scenario?
The text was updated successfully, but these errors were encountered: