Skip to content

Commit ff689d7

Browse files
committed
Make RIBIn/RIBOut of BMP neighbors accessible
1 parent bfe8627 commit ff689d7

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

protocols/bgp/server/bmp_router.go

+44
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
"github.com/bio-routing/bio-rd/protocols/bgp/packet"
1616
bmppkt "github.com/bio-routing/bio-rd/protocols/bmp/packet"
1717
"github.com/bio-routing/bio-rd/routingtable"
18+
"github.com/bio-routing/bio-rd/routingtable/adjRIBIn"
19+
"github.com/bio-routing/bio-rd/routingtable/adjRIBOut"
1820
"github.com/bio-routing/bio-rd/routingtable/filter"
1921
"github.com/bio-routing/bio-rd/routingtable/vrf"
2022
"github.com/bio-routing/tflow2/convert"
@@ -197,6 +199,48 @@ func (r *Router) processInitiationMsg(msg *bmppkt.InitiationMessage) {
197199
r.logger.Info(logMsg)
198200
}
199201

202+
func (r *Router) getNeighborAddressFamily(addr *bnet.IP, afi uint16, safi uint8) (*fsmAddressFamily, error) {
203+
if safi != packet.UnicastSAFI {
204+
return nil, fmt.Errorf("Unsupported safi, only unicast is supported")
205+
}
206+
207+
for _, neigh := range r.neighborManager.list() {
208+
if *neigh.fsm.peer.addr == *addr {
209+
af := neigh.fsm.addressFamily(afi, safi)
210+
if af == nil {
211+
return nil, fmt.Errorf("Address family not available")
212+
}
213+
return af, nil
214+
}
215+
}
216+
217+
return nil, fmt.Errorf("Could not find neighbor with ip %s", addr.String())
218+
}
219+
220+
// GetNeighborRIBIn returns the AdjRIBIn of a BMP neighbor
221+
func (r *Router) GetNeighborRIBIn(addr *bnet.IP, afi uint16, safi uint8) (*adjRIBIn.AdjRIBIn, error) {
222+
neighAF, err := r.getNeighborAddressFamily(addr, afi, safi)
223+
if err != nil {
224+
return nil, errors.Wrap(err, "Could not get RIBIn")
225+
}
226+
if neighAF.adjRIBIn == nil {
227+
return nil, fmt.Errorf("RIBIn not available")
228+
}
229+
return neighAF.adjRIBIn.(*adjRIBIn.AdjRIBIn), nil
230+
}
231+
232+
// GetNeighborRIBOut returns the AdjRIBOut of a BMP neighbor
233+
func (r *Router) GetNeighborRIBOut(addr *bnet.IP, afi uint16, safi uint8) (*adjRIBOut.AdjRIBOut, error) {
234+
neighAF, err := r.getNeighborAddressFamily(addr, afi, safi)
235+
if err != nil {
236+
return nil, errors.Wrap(err, "Could not get RIBIn")
237+
}
238+
if neighAF.adjRIBOut == nil {
239+
return nil, fmt.Errorf("RIBOut not available")
240+
}
241+
return neighAF.adjRIBOut.(*adjRIBOut.AdjRIBOut), nil
242+
}
243+
200244
func (r *Router) processTerminationMsg(msg *bmppkt.TerminationMessage) {
201245
const (
202246
stringType = 0

0 commit comments

Comments
 (0)