code: func (r *Routes) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error) {
  	klog.V(4).Infof("ListRoutes(%v)", clusterName)
  
  	nodeNamesByAddr := make(map[string]types.NodeName)
  	err := foreachServer(r.compute, servers.ListOpts{}, func(srv *servers.Server) (bool, error) {
  		addrs, err := nodeAddresses(srv)
  		if err != nil {
  			return false, err
  		}
  
  		name := mapServerToNodeName(srv)
  		for _, addr := range addrs {
  			nodeNamesByAddr[addr.Address] = name
  		}
  
  		return true, nil
  	})
  	if err != nil {
  		return nil, err
  	}
  
  	router, err := routers.Get(r.network, r.opts.RouterID).Extract()
  	if err != nil {
  		return nil, err
  	}
  
  	var routes []*cloudprovider.Route
  	for _, item := range router.Routes {
  		nodeName, foundNode := nodeNamesByAddr[item.NextHop]
  		if !foundNode {
  			nodeName = types.NodeName(item.NextHop)
  		}
  		route := cloudprovider.Route{
  			Name:            item.DestinationCIDR,
  			TargetNode:      nodeName, //contains the nexthop address if node was not found
  			Blackhole:       !foundNode,
  			DestinationCIDR: item.DestinationCIDR,
  		}
  		routes = append(routes, &route)
  	}
  
  	return routes, nil
  }
docs: // ListRoutes lists all managed routes that belong to the specified clusterName