1
0
Fork 0

bgpwtf/cccampix/peeringdb: allow multiple routers per peer

Change-Id: I84200cc0056d569e962c104cf082ce10f9c4025f
master
q3k 2019-08-02 13:38:22 +02:00
parent 9ed8b9606d
commit 0607abae1d
2 changed files with 40 additions and 8 deletions

View File

@ -60,19 +60,36 @@ func (s *service) GetIXMembers(ctx context.Context, req *pb.GetIXMembersRequest)
netidsNet[net.ID] = &net
}
// Make unique ASNs.
asns := make(map[int64]*pb.PeeringDBMember)
for _, netixlan := range js.Data {
member, ok := asns[netixlan.ASN]
if !ok {
asns[netixlan.ASN] = &pb.PeeringDBMember{
Asn: netixlan.ASN,
Name: netidsNet[netixlan.NetID].Name,
Routers: []*pb.PeeringDBMember_Router{},
}
member = asns[netixlan.ASN]
}
member.Routers = append(member.Routers, &pb.PeeringDBMember_Router{
Ipv4: netixlan.IPv4,
Ipv6: netixlan.IPv6,
})
}
// Build joined response.
res := &pb.GetIXMembersResponse{
Members: make([]*pb.GetIXMembersResponse_Member, len(js.Data)),
Members: make([]*pb.PeeringDBMember, len(asns)),
}
for i, netixlan := range js.Data {
res.Members[i] = &pb.GetIXMembersResponse_Member{
Asn: netixlan.ASN,
Ipv4: netixlan.IPv4,
Ipv6: netixlan.IPv6,
Name: netidsNet[netixlan.NetID].Name,
}
i = 0
for _, member := range asns {
res.Members[i] = member
i += 1
}
return res, nil

View File

@ -6,6 +6,21 @@ message GetIXMembersRequest {
int64 id = 1;
}
message PeeringDBMember {
int64 asn = 1;
// AS/network name.
string name = 2;
message Router {
// Per PeeringDB, at least one of the following two address families
// will be set.
string ipv4 = 1;
string ipv6 = 2;
}
repeated Router routers = 3;
}
message GetIXMembersResponse {
message Member {
int64 asn = 1;