mirror of
https://github.com/osrg/gobgp.git
synced 2024-05-11 05:55:10 +00:00
move gRPC-related code for REQ_START_SERVER to grpc_server.go
Signed-off-by: FUJITA Tomonori <[email protected]>
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user