summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gobgp/cmd/common.go28
1 files changed, 12 insertions, 16 deletions
diff --git a/gobgp/cmd/common.go b/gobgp/cmd/common.go
index af3d1686..14e61737 100644
--- a/gobgp/cmd/common.go
+++ b/gobgp/cmd/common.go
@@ -172,16 +172,20 @@ type Path struct {
func ApiStruct2Path(p *gobgpapi.Path) ([]*Path, error) {
nlris := make([]bgp.AddrPrefixInterface, 0, 1)
- data := p.Nlri
- if p.Family == uint32(bgp.RF_IPv4_UC) && len(data) > 0 {
- nlri := &bgp.IPAddrPrefix{}
- err := nlri.DecodeFromBytes(data)
- if err != nil {
- return nil, err
- }
- nlris = append(nlris, nlri)
+ if len(p.Nlri) == 0 {
+ return nil, fmt.Errorf("path doesn't have nlri")
+ }
+ afi, safi := bgp.RouteFamilyToAfiSafi(bgp.RouteFamily(p.Family))
+ nlri, err := bgp.NewPrefixFromRouteFamily(afi, safi)
+ if err != nil {
+ return nil, err
}
+ if err := nlri.DecodeFromBytes(p.Nlri); err != nil {
+ return nil, err
+ }
+ nlris = append(nlris, nlri)
+
pattr := make([]bgp.PathAttributeInterface, 0, len(p.Pattrs))
for _, attr := range p.Pattrs {
p, err := bgp.GetPathAttribute(attr)
@@ -193,14 +197,6 @@ func ApiStruct2Path(p *gobgpapi.Path) ([]*Path, error) {
if err != nil {
return nil, err
}
-
- switch p.GetType() {
- case bgp.BGP_ATTR_TYPE_MP_REACH_NLRI:
- mpreach := p.(*bgp.PathAttributeMpReachNLRI)
- for _, nlri := range mpreach.Value {
- nlris = append(nlris, nlri)
- }
- }
pattr = append(pattr, p)
}