diff --git a/lib/luxi.py b/lib/luxi.py
index 2f434f6362c577c76b12e539d9d235bb7798277d..9e2930e9f997d9f819540b89727982c562d8c2c0 100644
--- a/lib/luxi.py
+++ b/lib/luxi.py
@@ -61,6 +61,7 @@ REQ_QUERY_JOBS = "QueryJobs"
 REQ_QUERY_INSTANCES = "QueryInstances"
 REQ_QUERY_NODES = "QueryNodes"
 REQ_QUERY_GROUPS = "QueryGroups"
+REQ_QUERY_NETWORKS = "QueryNetworks"
 REQ_QUERY_EXPORTS = "QueryExports"
 REQ_QUERY_CONFIG_VALUES = "QueryConfigValues"
 REQ_QUERY_CLUSTER_INFO = "QueryClusterInfo"
@@ -539,6 +540,9 @@ class Client(object):
   def QueryGroups(self, names, fields, use_locking):
     return self.CallMethod(REQ_QUERY_GROUPS, (names, fields, use_locking))
 
+  def QueryNetworks(self, names, fields, use_locking):
+    return self.CallMethod(REQ_QUERY_NETWORKS, (names, fields, use_locking))
+
   def QueryExports(self, nodes, use_locking):
     return self.CallMethod(REQ_QUERY_EXPORTS, (nodes, use_locking))
 
diff --git a/lib/server/masterd.py b/lib/server/masterd.py
index aa56df8aaaddca39737644b698a17c5f1e2c5958..9efbf71d84b78c13a03ab3c96444bd99baa7dd53 100644
--- a/lib/server/masterd.py
+++ b/lib/server/masterd.py
@@ -301,6 +301,15 @@ class ClientOps:
       op = opcodes.OpGroupQuery(names=names, output_fields=fields)
       return self._Query(op)
 
+    elif method == luxi.REQ_QUERY_NETWORKS:
+      (names, fields, use_locking) = args
+      logging.info("Received network query request for %s", names)
+      if use_locking:
+        raise errors.OpPrereqError("Sync queries are not allowed",
+                                   errors.ECODE_INVAL)
+      op = opcodes.OpNetworkQuery(names=names, output_fields=fields)
+      return self._Query(op)
+
     elif method == luxi.REQ_QUERY_EXPORTS:
       nodes, use_locking = args
       if use_locking: