func (s *Server) MonitorBestChanged(arg *api.Arguments, stream api.Grpc_MonitorBestChangedServer) error { var reqType int switch arg.Resource { case api.Resource_GLOBAL: reqType = REQ_MONITOR_GLOBAL_BEST_CHANGED default: return fmt.Errorf("unsupported resource type: %v", arg.Resource) } rf, err := convertAf2Rf(arg.Af) if err != nil { return err } req := NewGrpcRequest(reqType, "", rf, nil) s.bgpServerCh <- req for res := range req.ResponseCh { if err = res.Err(); err != nil { log.Debug(err.Error()) goto END } if err = stream.Send(res.Data.(*api.Path)); err != nil { goto END } } END: req.EndCh <- struct{}{} return err }
func (s *Server) MonitorBestChanged(arg *api.Arguments, stream api.Grpc_MonitorBestChangedServer) error { var reqType int switch arg.Resource { case api.Resource_GLOBAL: reqType = REQ_MONITOR_GLOBAL_BEST_CHANGED default: return fmt.Errorf("unsupported resource type: %v", arg.Resource) } req := NewGrpcRequest(reqType, "", bgp.RouteFamily(arg.Rf), nil) s.bgpServerCh <- req return handleMultipleResponses(req, func(res *GrpcResponse) error { return stream.Send(res.Data.(*api.Destination)) }) }