code: func (c *Catalog) ListNodes(args *structs.DCSpecificRequest, reply *structs.IndexedNodes) error {
  	if done, err := c.srv.forward("Catalog.ListNodes", args, args, reply); done {
  		return err
  	}
  
  	filter, err := bexpr.CreateFilter(args.Filter, nil, reply.Nodes)
  	if err != nil {
  		return err
  	}
  
  	return c.srv.blockingQuery(
  		&args.QueryOptions,
  		&reply.QueryMeta,
  		func(ws memdb.WatchSet, state *state.Store) error {
  			var index uint64
  			var nodes structs.Nodes
  			var err error
  			if len(args.NodeMetaFilters) > 0 {
  				index, nodes, err = state.NodesByMeta(ws, args.NodeMetaFilters)
  			} else {
  				index, nodes, err = state.Nodes(ws)
  			}
  			if err != nil {
  				return err
  			}
  
  			reply.Index, reply.Nodes = index, nodes
  			if err := c.srv.filterACL(args.Token, reply); err != nil {
  				return err
  			}
  
  			raw, err := filter.Execute(reply.Nodes)
  			if err != nil {
  				return err
  			}
  			reply.Nodes = raw.(structs.Nodes)
  
  			return c.srv.sortNodesByDistanceFrom(args.Source, reply.Nodes)
  		})
  }
docs: // ListNodes is used to query the nodes in a DC