diff options
Diffstat (limited to 'server/rpki.go')
-rw-r--r-- | server/rpki.go | 88 |
1 files changed, 30 insertions, 58 deletions
diff --git a/server/rpki.go b/server/rpki.go index 1463fd9b..fb675314 100644 --- a/server/rpki.go +++ b/server/rpki.go @@ -21,11 +21,11 @@ import ( "io" "net" "sort" + "strconv" "time" log "github.com/Sirupsen/logrus" "github.com/armon/go-radix" - api "github.com/osrg/gobgp/api" "github.com/osrg/gobgp/config" "github.com/osrg/gobgp/packet/bgp" "github.com/osrg/gobgp/packet/rtr" @@ -77,21 +77,7 @@ func (r *ROA) Equal(roa *ROA) bool { return false } -func (r *ROA) toApiStruct() *api.Roa { - host, port, _ := net.SplitHostPort(r.Src) - return &api.Roa{ - As: r.AS, - Maxlen: uint32(r.MaxLen), - Prefixlen: uint32(r.Prefix.Length), - Prefix: r.Prefix.Prefix.String(), - Conf: &api.RPKIConf{ - Address: host, - RemotePort: port, - }, - } -} - -type roas []*api.Roa +type roas []*ROA func (r roas) Len() int { return len(r) @@ -105,13 +91,13 @@ func (r roas) Less(i, j int) bool { r1 := r[i] r2 := r[j] - if r1.Maxlen < r1.Maxlen { + if r1.MaxLen < r1.MaxLen { return true - } else if r1.Maxlen > r1.Maxlen { + } else if r1.MaxLen > r1.MaxLen { return false } - if r1.As < r2.As { + if r1.AS < r2.AS { return true } return false @@ -465,57 +451,43 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) *GrpcResponse { recordsV4, prefixesV4 := f(c.Roas[bgp.RF_IPv4_UC]) recordsV6, prefixesV6 := f(c.Roas[bgp.RF_IPv6_UC]) - l := make([]*api.Rpki, 0, len(c.clientMap)) + l := make([]*config.RpkiServer, 0, len(c.clientMap)) for _, client := range c.clientMap { - state := client.state + state := &client.state + addr, port, _ := net.SplitHostPort(client.host) - received := &state.RpkiMessages.RpkiReceived - sent := client.state.RpkiMessages.RpkiSent - up := true + l = append(l, &config.RpkiServer{ + Config: config.RpkiServerConfig{ + Address: addr, + Port: func() uint32 { p, _ := strconv.Atoi(port); return uint32(p) }(), + }, + State: client.state, + }) + if client.conn == nil { - up = false + state.Up = false + } else { + state.Up = true } - f := func(m map[string]uint32, key string) uint32 { if r, ok := m[key]; ok { return r } return 0 } - - rpki := &api.Rpki{ - Conf: &api.RPKIConf{ - Address: addr, - RemotePort: port, - }, - State: &api.RPKIState{ - Uptime: state.Uptime, - Downtime: state.Downtime, - Up: up, - RecordIpv4: f(recordsV4, client.host), - RecordIpv6: f(recordsV6, client.host), - PrefixIpv4: f(prefixesV4, client.host), - PrefixIpv6: f(prefixesV6, client.host), - Serial: client.serialNumber, - ReceivedIpv4: received.Ipv4Prefix, - ReceivedIpv6: received.Ipv6Prefix, - SerialNotify: received.SerialNotify, - CacheReset: received.CacheReset, - CacheResponse: received.CacheResponse, - EndOfData: received.EndOfData, - Error: received.Error, - SerialQuery: sent.SerialQuery, - ResetQuery: sent.ResetQuery, - }, - } - l = append(l, rpki) + state.RecordsV4 = f(recordsV4, client.host) + state.RecordsV6 = f(recordsV6, client.host) + state.PrefixesV4 = f(prefixesV4, client.host) + state.PrefixesV6 = f(prefixesV6, client.host) + state.SerialNumber = client.serialNumber + } + return &GrpcResponse{ + Data: l, } - return &GrpcResponse{Data: &api.GetRpkiResponse{Servers: l}} case REQ_ROA: if len(c.clientMap) == 0 { return &GrpcResponse{ ResponseErr: fmt.Errorf("RPKI server isn't configured."), - Data: &api.GetRoaResponse{}, } } var rfList []bgp.RouteFamily @@ -527,14 +499,14 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) *GrpcResponse { default: rfList = []bgp.RouteFamily{bgp.RF_IPv4_UC, bgp.RF_IPv6_UC} } - l := make([]*api.Roa, 0) + l := make([]*ROA, 0) for _, rf := range rfList { if tree, ok := c.Roas[rf]; ok { tree.Walk(func(s string, v interface{}) bool { b, _ := v.(*roaBucket) var roaList roas for _, r := range b.entries { - roaList = append(roaList, r.toApiStruct()) + roaList = append(roaList, r) } sort.Sort(roaList) for _, roa := range roaList { @@ -544,7 +516,7 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) *GrpcResponse { }) } } - return &GrpcResponse{Data: &api.GetRoaResponse{Roas: l}} + return &GrpcResponse{Data: l} } return nil } |