move gRPC-related code for REQ_START_SERVER to grpc_server.go

Signed-off-by: FUJITA Tomonori <[email protected]>
This commit is contained in:
FUJITA Tomonori
2016-07-26 12:04:04 +09:00
parent f623f8d538
commit e0e421bbca
4 changed files with 66 additions and 76 deletions
+1 -1
View File
@@ -206,7 +206,7 @@ func main() {
if c == nil {
c = newConfig
if err := bgpServer.SetGlobalType(newConfig.Global); err != nil {
if err := bgpServer.Start(&newConfig.Global); err != nil {
log.Fatalf("failed to set global config: %s", err)
}
if newConfig.Zebra.Config.Enabled {
+34 -3
View File
@@ -1732,11 +1732,42 @@ func (s *Server) GetServer(ctx context.Context, arg *api.GetServerRequest) (*api
}
func (s *Server) StartServer(ctx context.Context, arg *api.StartServerRequest) (*api.StartServerResponse, error) {
d, err := s.get(REQ_START_SERVER, arg)
if err != nil {
g := arg.Global
if net.ParseIP(g.RouterId) == nil {
return nil, fmt.Errorf("invalid router-id format: %s", g.RouterId)
}
families := make([]config.AfiSafi, 0, len(g.Families))
for _, f := range g.Families {
name := config.AfiSafiType(bgp.RouteFamily(f).String())
families = append(families, config.AfiSafi{
Config: config.AfiSafiConfig{
AfiSafiName: name,
Enabled: true,
},
State: config.AfiSafiState{
AfiSafiName: name,
},
})
}
b := &config.BgpConfigSet{
Global: config.Global{
Config: config.GlobalConfig{
As: g.As,
RouterId: g.RouterId,
Port: g.ListenPort,
LocalAddressList: g.ListenAddresses,
},
MplsLabelRange: config.MplsLabelRange{
MinLabel: g.MplsLabelMin,
MaxLabel: g.MplsLabelMax,
},
AfiSafis: families,
},
}
if err := config.SetDefaultConfigValues(nil, b); err != nil {
return nil, err
}
return d.(*api.StartServerResponse), err
return &api.StartServerResponse{}, s.bgpServer.Start(&b.Global)
}
func (s *Server) StopServer(ctx context.Context, arg *api.StopServerRequest) (*api.StopServerResponse, error) {
+30 -71
View File
@@ -1275,77 +1275,43 @@ END:
return msgs
}
func (server *BgpServer) handleModConfig(grpcReq *GrpcRequest) error {
var c *config.Global
switch arg := grpcReq.Data.(type) {
case *api.StartServerRequest:
g := arg.Global
if net.ParseIP(g.RouterId) == nil {
return fmt.Errorf("invalid router-id format: %s", g.RouterId)
}
families := make([]config.AfiSafi, 0, len(g.Families))
for _, f := range g.Families {
name := config.AfiSafiType(bgp.RouteFamily(f).String())
families = append(families, config.AfiSafi{
Config: config.AfiSafiConfig{
AfiSafiName: name,
Enabled: true,
},
State: config.AfiSafiState{
AfiSafiName: name,
},
})
}
b := &config.BgpConfigSet{
Global: config.Global{
Config: config.GlobalConfig{
As: g.As,
RouterId: g.RouterId,
Port: g.ListenPort,
LocalAddressList: g.ListenAddresses,
},
MplsLabelRange: config.MplsLabelRange{
MinLabel: g.MplsLabelMin,
MaxLabel: g.MplsLabelMax,
},
AfiSafis: families,
},
}
if err := config.SetDefaultConfigValues(nil, b); err != nil {
return err
}
c = &b.Global
case *config.Global:
c = arg
}
func (s *BgpServer) Start(c *config.Global) (err error) {
ch := make(chan struct{})
defer func() { <-ch }()
if server.bgpConfig.Global.Config.As != 0 {
return fmt.Errorf("gobgp is already started")
}
s.mgmtCh <- func() {
defer close(ch)
if c.Config.Port > 0 {
acceptCh := make(chan *net.TCPConn, 4096)
for _, addr := range c.Config.LocalAddressList {
l, err := NewTCPListener(addr, uint32(c.Config.Port), acceptCh)
if err != nil {
return err
if s.bgpConfig.Global.Config.As != 0 {
err = fmt.Errorf("gobgp is already started")
return
}
if c.Config.Port > 0 {
acceptCh := make(chan *net.TCPConn, 4096)
for _, addr := range c.Config.LocalAddressList {
var l *TCPListener
l, err = NewTCPListener(addr, uint32(c.Config.Port), acceptCh)
if err != nil {
return
}
s.listeners = append(s.listeners, l)
}
server.listeners = append(server.listeners, l)
s.acceptCh = acceptCh
}
server.acceptCh = acceptCh
}
rfs, _ := config.AfiSafis(c.AfiSafis).ToRfList()
server.globalRib = table.NewTableManager(rfs, c.MplsLabelRange.MinLabel, c.MplsLabelRange.MaxLabel)
rfs, _ := config.AfiSafis(c.AfiSafis).ToRfList()
s.globalRib = table.NewTableManager(rfs, c.MplsLabelRange.MinLabel, c.MplsLabelRange.MaxLabel)
p := config.RoutingPolicy{}
if err := server.handlePolicy(p); err != nil {
return err
p := config.RoutingPolicy{}
if err = s.handlePolicy(p); err != nil {
return
}
s.bgpConfig.Global = *c
// update route selection options
table.SelectionOptions = c.RouteSelectionOptions.Config
table.UseMultiplePaths = c.UseMultiplePaths.Config
}
server.bgpConfig.Global = *c
// update route selection options
table.SelectionOptions = c.RouteSelectionOptions.Config
table.UseMultiplePaths = c.UseMultiplePaths.Config
return nil
}
@@ -1407,13 +1373,6 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) {
Data: &g,
}
close(grpcReq.ResponseCh)
case REQ_START_SERVER:
err := server.handleModConfig(grpcReq)
grpcReq.ResponseCh <- &GrpcResponse{
ResponseErr: err,
Data: &api.StartServerResponse{},
}
close(grpcReq.ResponseCh)
case REQ_GLOBAL_RIB, REQ_LOCAL_RIB:
arg := grpcReq.Data.(*api.GetRibRequest)
rib := server.globalRib
+1 -1
View File
@@ -26,7 +26,7 @@ func TestModPolicyAssign(t *testing.T) {
assert := assert.New(t)
s := NewBgpServer()
go s.Serve()
s.SetGlobalType(config.Global{
s.Start(&config.Global{
Config: config.GlobalConfig{
As: 1,
RouterId: "1.1.1.1",