zebra: add grpc api

Signed-off-by: FUJITA Tomonori <[email protected]>
This commit is contained in:
FUJITA Tomonori
2016-08-26 17:29:38 +09:00
parent c8bb5752f6
commit 982a5b448f
5 changed files with 506 additions and 426 deletions
+480 -422
View File
File diff suppressed because it is too large Load Diff
+9
View File
@@ -50,6 +50,7 @@ service GobgpApi {
rpc ResetRpki(ResetRpkiRequest) returns (ResetRpkiResponse) {}
rpc SoftResetRpki(SoftResetRpkiRequest) returns (SoftResetRpkiResponse) {}
rpc GetRoa(GetRoaRequest) returns (GetRoaResponse) {}
rpc EnableZebra(EnableZebraRequest) returns (EnableZebraResponse) {}
rpc AddVrf(AddVrfRequest) returns (AddVrfResponse) {}
rpc DeleteVrf(DeleteVrfRequest) returns (DeleteVrfResponse) {}
rpc GetVrf(GetVrfRequest) returns (GetVrfResponse) {}
@@ -289,6 +290,14 @@ message SoftResetRpkiRequest {
message SoftResetRpkiResponse {
}
message EnableZebraRequest {
string url = 1;
repeated string route_types = 2;
}
message EnableZebraResponse {
}
message GetVrfRequest {
}
+15
View File
@@ -688,6 +688,21 @@ func (s *Server) GetRoa(ctx context.Context, arg *GetRoaRequest) (*GetRoaRespons
return &GetRoaResponse{Roas: l}, nil
}
func (s *Server) EnableZebra(ctx context.Context, arg *EnableZebraRequest) (*EnableZebraResponse, error) {
l := []config.InstallProtocolType{}
for _, p := range arg.RouteTypes {
if err := config.InstallProtocolType(p).Validate(); err != nil {
return &EnableZebraResponse{}, err
} else {
l = append(l, config.InstallProtocolType(p))
}
}
return &EnableZebraResponse{}, s.bgpServer.StartZebraClient(&config.ZebraConfig{
Url: arg.Url,
RedistributeRouteTypeList: l,
})
}
func (s *Server) GetVrf(ctx context.Context, arg *GetVrfRequest) (*GetVrfResponse, error) {
toApi := func(v *table.Vrf) *Vrf {
f := func(rts []bgp.ExtendedCommunityInterface) [][]byte {
+1 -1
View File
@@ -212,7 +212,7 @@ func main() {
log.Fatalf("failed to set global config: %s", err)
}
if newConfig.Zebra.Config.Enabled {
if err := bgpServer.StartZebraClient(&newConfig.Zebra); err != nil {
if err := bgpServer.StartZebraClient(&newConfig.Zebra.Config); err != nil {
log.Fatalf("failed to set zebra config: %s", err)
}
}
+1 -3
View File
@@ -875,7 +875,7 @@ func (s *BgpServer) StartCollector(c *config.CollectorConfig) (err error) {
return err
}
func (s *BgpServer) StartZebraClient(x *config.Zebra) (err error) {
func (s *BgpServer) StartZebraClient(c *config.ZebraConfig) (err error) {
ch := make(chan struct{})
defer func() { <-ch }()
@@ -885,8 +885,6 @@ func (s *BgpServer) StartZebraClient(x *config.Zebra) (err error) {
if s.zclient != nil {
err = fmt.Errorf("already connected to Zebra")
} else {
c := x.Config
protos := make([]string, 0, len(c.RedistributeRouteTypeList))
for _, p := range c.RedistributeRouteTypeList {
protos = append(protos, string(p))