When a link between two routers goes down, each router deletes the paths reported by their peer and sends out an update to other peers. However, when this update is sent out, it needs to be adjusted to have the local router's nexthop data (as set by UpdatePathAttrs()). The gobgp code is not applying this change, so the nexthop data is wrong and the peers receive an impossible nexthop value (no direct connection).
I believe each call to CreateUpdateMsgFromPaths() should have a corresponding loop calling UpdatePathAttrs() for each path to be sent.
When a link between two routers goes down, each router deletes the paths reported by their peer and sends out an update to other peers. However, when this update is sent out, it needs to be adjusted to have the local router's nexthop data (as set by UpdatePathAttrs()). The gobgp code is not applying this change, so the nexthop data is wrong and the peers receive an impossible nexthop value (no direct connection).
I believe each call to CreateUpdateMsgFromPaths() should have a corresponding loop calling UpdatePathAttrs() for each path to be sent.