func (s *Server) GetRib(arg *api.Arguments, stream api.Grpc_GetRibServer) error { var reqType int switch arg.Resource { case api.Resource_LOCAL: reqType = REQ_LOCAL_RIB case api.Resource_GLOBAL: reqType = REQ_GLOBAL_RIB default: return fmt.Errorf("unsupported resource type: %v", arg.Resource) } rf, err := convertAf2Rf(arg.Af) if err != nil { return err } req := NewGrpcRequest(reqType, arg.RouterId, rf, nil) s.bgpServerCh <- req for res := range req.ResponseCh { if err := res.Err(); err != nil { log.Debug(err.Error()) return err } if err := stream.Send(res.Data.(*api.Destination)); err != nil { return err } } return nil }
func (s *Server) GetRib(arg *api.Arguments, stream api.Grpc_GetRibServer) error { var reqType int switch arg.Resource { case api.Resource_LOCAL: reqType = REQ_LOCAL_RIB case api.Resource_GLOBAL: reqType = REQ_GLOBAL_RIB case api.Resource_ADJ_IN: reqType = REQ_ADJ_RIB_IN case api.Resource_ADJ_OUT: reqType = REQ_ADJ_RIB_OUT case api.Resource_VRF: reqType = REQ_VRF default: return fmt.Errorf("unsupported resource type: %v", arg.Resource) } req := NewGrpcRequest(reqType, arg.Name, bgp.RouteFamily(arg.Rf), nil) s.bgpServerCh <- req return handleMultipleResponses(req, func(res *GrpcResponse) error { return stream.Send(res.Data.(*api.Destination)) }) }