]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: adapt to new nvmeof APIs
authorNizamudeen A <nia@redhat.com>
Fri, 12 Jan 2024 08:41:18 +0000 (14:11 +0530)
committerNizamudeen A <nia@redhat.com>
Tue, 30 Jan 2024 10:09:35 +0000 (15:39 +0530)
Fixes: https://tracker.ceph.com/issues/64201
Signed-off-by: Nizamudeen A <nia@redhat.com>
15 files changed:
ceph.spec.in
debian/control
src/pybind/mgr/cephadm/services/nvmeof.py
src/pybind/mgr/dashboard/constraints.txt
src/pybind/mgr/dashboard/controllers/nvmeof.py
src/pybind/mgr/dashboard/module.py
src/pybind/mgr/dashboard/openapi.yaml
src/pybind/mgr/dashboard/requirements.txt
src/pybind/mgr/dashboard/services/nvmeof_cli.py
src/pybind/mgr/dashboard/services/nvmeof_client.py
src/pybind/mgr/dashboard/services/nvmeof_conf.py
src/pybind/mgr/dashboard/services/proto/gateway.proto
src/pybind/mgr/dashboard/services/proto/gateway_pb2.py
src/pybind/mgr/dashboard/services/proto/gateway_pb2_grpc.py
src/pybind/mgr/dashboard/tox.ini

index 58ccf067997a771c504faaf4084d5292c25bf8c7..d061803099ea6772789aa4b77b0637e507dd678d 100644 (file)
@@ -625,6 +625,8 @@ Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
 Requires:       ceph-grafana-dashboards = %{_epoch_prefix}%{version}-%{release}
 Requires:       ceph-prometheus-alerts = %{_epoch_prefix}%{version}-%{release}
 Requires:       python%{python3_pkgversion}-setuptools
+Requires:       python%{python3_pkgversion}-grpcio
+Requires:       python%{python3_pkgversion}-grpcio-tools
 %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler}
 Requires:       python%{python3_pkgversion}-cherrypy
 Requires:       python%{python3_pkgversion}-routes
index f1bdec95a2efd0db494a61bcd7ad311339c2ed0d..b4967b398f4d8d1f46d07c38d727b6e22d0a2233 100644 (file)
@@ -96,6 +96,7 @@ Build-Depends: automake,
                tox <pkg.ceph.check>,
                python3-coverage <pkg.ceph.check>,
                python3-dateutil <pkg.ceph.check>,
+               python3-grpcio <pkg.ceph.check>,
                python3-openssl <pkg.ceph.check>,
                python3-prettytable <pkg.ceph.check>,
                python3-requests <pkg.ceph.check>,
index 32cb71b67447953afa13c882ab69d8384ef12157..7d2de75f67f97a4bc745f59ed1201af6812389de 100644 (file)
@@ -121,7 +121,7 @@ class NvmeofService(CephService):
             'name': daemon.hostname,
         })
         if not ret:
-            logger.info(f'{daemon.hostname} removed from iscsi gateways dashboard config')
+            logger.info(f'{daemon.hostname} removed from nvmeof gateways dashboard config')
 
         # and any certificates being used for mTLS
 
index 590a8c1e1c42c9fa5f61f638db5c8bf35cc52080..fd6141048800a599907d89e73886bc8dd0279c90 100644 (file)
@@ -4,5 +4,3 @@ bcrypt~=3.1
 python3-saml~=1.4
 requests~=2.26
 Routes~=2.4
-grpcio~=1.48
-grpcio-tools~=1.48
index 6458c47a885677227dc326e0be73cb83a9f014f9..125b93dc3cc7e281cf2aceb6f5d903e4c7636d36 100644 (file)
-# # import grpc
+# -*- coding: utf-8 -*-
+import json
+from typing import Optional
 
-# from .proto import gateway_pb2 as pb2
-# from .proto import gateway_pb2_grpc as pb2_grpc
+from ..security import Scope
+from . import APIDoc, APIRouter, CreatePermission, DeletePermission, Endpoint, \
+    EndpointDoc, ReadPermission, RESTController
 
+try:
+    from google.protobuf.json_format import MessageToJson
 
-# class NVMeoFClient(object):
-#     def __init__(self):
-#         self.host = '192.168.100.102'
+    from ..services.nvmeof_client import NVMeoFClient
+except ImportError:
+    MessageToJson = None
+else:
+    @APIRouter('/nvmeof/namespace', Scope.NVME_OF)
+    @APIDoc('NVMe-oF Namespace Management API', 'NVMe-oF')
+    class NvmeofNamespace(RESTController):
+        @ReadPermission
+        def list(self, subsystem_nqn: str):
+            """
+            List all NVMeoF namespaces
+            """
+            response = MessageToJson(NVMeoFClient().list_namespaces(subsystem_nqn))
+            return json.loads(response)
 
-# from ..cephnvmeof.control.cli import GatewayClient
+        @CreatePermission
+        def create(self, rbd_pool: str, rbd_image: str, subsystem_nqn: str,
+                   create_image: Optional[bool] = True, image_size: Optional[int] = 1024,
+                   block_size: int = 512, nsid: Optional[int] = 1,
+                   uuid: Optional[str] = None, anagrpid: Optional[int] = 1):
+            """
+            Create a new NVMeoF namespace
+            :param rbd_pool: RBD pool name
+            :param rbd_image: RBD image name
+            :param subsystem_nqn: NVMeoF subsystem NQN
+            :param create_image: Create RBD image
+            :param image_size: RBD image size
+            :param block_size: NVMeoF namespace block size
+            :param nsid: NVMeoF namespace ID
+            :param uuid: NVMeoF namespace UUID
+            :param anagrpid: NVMeoF namespace ANA group ID
+            """
+            response = NVMeoFClient().create_namespace(rbd_pool, rbd_image,
+                                                       subsystem_nqn, block_size,
+                                                       nsid, uuid, anagrpid,
+                                                       create_image, image_size)
+            return json.loads(MessageToJson(response))
 
-from typing import Optional
-from ..security import Scope
-from ..services.nvmeof_client import NVMeoFClient
-# from ..services.proto import gateway_pb2 as pb2
-from . import APIDoc, APIRouter, RESTController, Endpoint, ReadPermission, CreatePermission, \
-    DeletePermission, allow_empty_body, UpdatePermission
-    
-
-@APIRouter('/nvmeof', Scope.NVME_OF)
-@APIDoc('NVMe-oF Management API', 'NVMe-oF')
-class Nvmeof(RESTController):
-    @ReadPermission
-    def list(self):
-        """List all NVMeoF gateways"""
-        return NVMeoFClient().get_subsystems()
-
-
-@APIRouter('/nvmeof/bdev', Scope.NVME_OF)
-@APIDoc('NVMe-oF Block Device Management API', 'NVMe-oF')
-class NvmeofBdev(RESTController):
-    @CreatePermission
-    def create(self, name: str, rbd_pool: str, rbd_image: str, block_size: int, uuid: Optional[str] = None):
-        """Create a new NVMeoF block device"""
-        return NVMeoFClient().create_bdev(name, rbd_pool, rbd_image, block_size, uuid)
-    
-    @DeletePermission
-    @allow_empty_body
-    def delete(self, name: str, force: bool):
-        """Delete an existing NVMeoF block device"""
-        return NVMeoFClient().delete_bdev(name, force)
-    
-    @Endpoint('PUT')
-    @UpdatePermission
-    @allow_empty_body
-    def resize(self, name: str, size: int):
-        """Resize an existing NVMeoF block device"""
-        return NVMeoFClient().resize_bdev(name, size)
-
-
-@APIRouter('/nvmeof/namespace', Scope.NVME_OF)
-@APIDoc('NVMe-oF Namespace Management API', 'NVMe-oF')
-class NvmeofNamespace(RESTController):
-    @CreatePermission
-    def create(self, subsystem_nqn: str, bdev_name: str, nsid: int, anagrpid: Optional[str] = None):
-        """Create a new NVMeoF namespace"""
-        return NVMeoFClient().create_namespace(subsystem_nqn, bdev_name, nsid, anagrpid)
-    
-    @Endpoint('DELETE', path='{subsystem_nqn}')
-    def delete(self, subsystem_nqn: str, nsid: int):
-        """Delete an existing NVMeoF namespace"""
-        return NVMeoFClient().delete_namespace(subsystem_nqn, nsid)
-    
-@APIRouter('/nvmeof/subsystem', Scope.NVME_OF)
-@APIDoc('NVMe-oF Subsystem Management API', 'NVMe-oF')
-class NvmeofSubsystem(RESTController):
-    @CreatePermission
-    def create(self, subsystem_nqn: str, serial_number: str, max_namespaces: int,
-                         ana_reporting: bool, enable_ha: bool) :
-        """Create a new NVMeoF subsystem"""
-        return NVMeoFClient().create_subsystem(subsystem_nqn, serial_number, max_namespaces,
-                                               ana_reporting, enable_ha)
-    
-    @Endpoint('DELETE', path='{subsystem_nqn}')
-    def delete(self, subsystem_nqn: str):
-        """Delete an existing NVMeoF subsystem"""
-        return NVMeoFClient().delete_subsystem(subsystem_nqn)
-
-
-@APIRouter('/nvmeof/hosts', Scope.NVME_OF)
-@APIDoc('NVMe-oF Host Management API', 'NVMe-oF')
-class NvmeofHost(RESTController):
-    @CreatePermission
-    def create(self, subsystem_nqn: str, host_nqn: str):
-        """Create a new NVMeoF host"""
-        return NVMeoFClient().add_host(subsystem_nqn, host_nqn)
-    
-    @Endpoint('DELETE')
-    def delete(self, subsystem_nqn: str, host_nqn: str):
-        """Delete an existing NVMeoF host"""
-        return NVMeoFClient().remove_host(subsystem_nqn, host_nqn)
-
-
-@APIRouter('/nvmeof/listener', Scope.NVME_OF)
-@APIDoc('NVMe-oF Listener Management API', 'NVMe-oF')
-class NvmeofListener(RESTController):
-    @CreatePermission
-    def create(self, nqn: str, gateway: str, trtype: str, adrfam: str,
-               traddr: str, trsvcid: str):
-        """Create a new NVMeoF listener"""
-        return NVMeoFClient().create_listener(nqn, gateway, trtype, adrfam, traddr, trsvcid)
-    
-    @Endpoint('DELETE')
-    def delete(self, nqn: str, gateway: str, trtype, adrfam,
-               traddr: str, trsvcid: str):
-        """Delete an existing NVMeoF listener"""
-        return NVMeoFClient().delete_listener(nqn, gateway, trtype, adrfam, traddr, trsvcid)
\ No newline at end of file
+        @Endpoint('DELETE', path='{subsystem_nqn}')
+        def delete(self, subsystem_nqn: str, nsid: int):
+            """
+            Delete an existing NVMeoF namespace
+            :param subsystem_nqn: NVMeoF subsystem NQN
+            :param nsid: NVMeoF namespace ID
+            """
+            response = NVMeoFClient().delete_namespace(subsystem_nqn, nsid)
+            return json.loads(MessageToJson(response))
+
+    @APIRouter('/nvmeof/subsystem', Scope.NVME_OF)
+    @APIDoc('NVMe-oF Subsystem Management API', 'NVMe-oF')
+    class NvmeofSubsystem(RESTController):
+        @ReadPermission
+        @EndpointDoc("List all NVMeoF gateways",
+                     parameters={
+                         'subsystem_nqn': (str, 'NVMeoF subsystem NQN'),
+                         'serial_number': (str, 'NVMeoF subsystem serial number')
+                     })
+        def list(self, subsystem_nqn: Optional[str] = None, serial_number: Optional[str] = None):
+            response = MessageToJson(NVMeoFClient().list_subsystems(
+                subsystem_nqn=subsystem_nqn, serial_number=serial_number))
+
+            return json.loads(response)
+
+        @CreatePermission
+        def create(self, subsystem_nqn: str, serial_number: Optional[str] = None,
+                   max_namespaces: Optional[int] = 256, ana_reporting: Optional[bool] = False,
+                   enable_ha: Optional[bool] = False):
+            """
+            Create a new NVMeoF subsystem
+
+            :param subsystem_nqn: NVMeoF subsystem NQN
+            :param serial_number: NVMeoF subsystem serial number
+            :param max_namespaces: NVMeoF subsystem maximum namespaces
+            :param ana_reporting: NVMeoF subsystem ANA reporting
+            :param enable_ha: NVMeoF subsystem enable HA
+            """
+            response = NVMeoFClient().create_subsystem(subsystem_nqn, serial_number, max_namespaces,
+                                                       ana_reporting, enable_ha)
+            return json.loads(MessageToJson(response))
+
+        @DeletePermission
+        @Endpoint('DELETE', path='{subsystem_nqn}')
+        def delete(self, subsystem_nqn: str):
+            """
+            Delete an existing NVMeoF subsystem
+            :param subsystem_nqn: NVMeoF subsystem NQN
+            """
+            response = NVMeoFClient().delete_subsystem(subsystem_nqn)
+            return json.loads(MessageToJson(response))
+
+    @APIRouter('/nvmeof/hosts', Scope.NVME_OF)
+    @APIDoc('NVMe-oF Host Management API', 'NVMe-oF')
+    class NvmeofHost(RESTController):
+        @ReadPermission
+        def list(self, subsystem_nqn: str):
+            """
+            List all NVMeoF hosts
+            :param subsystem_nqn: NVMeoF subsystem NQN
+            """
+            response = MessageToJson(NVMeoFClient().list_hosts(subsystem_nqn))
+            return json.loads(response)
+
+        @CreatePermission
+        def create(self, subsystem_nqn: str, host_nqn: str):
+            """
+            Create a new NVMeoF host
+            :param subsystem_nqn: NVMeoF subsystem NQN
+            :param host_nqn: NVMeoF host NQN
+            """
+            response = NVMeoFClient().add_host(subsystem_nqn, host_nqn)
+            return json.loads(MessageToJson(response))
+
+        @DeletePermission
+        def delete(self, subsystem_nqn: str, host_nqn: str):
+            """
+            Delete an existing NVMeoF host
+            :param subsystem_nqn: NVMeoF subsystem NQN
+            :param host_nqn: NVMeoF host NQN
+            """
+            response = NVMeoFClient().remove_host(subsystem_nqn, host_nqn)
+            return json.loads(MessageToJson(response))
+
+    @APIRouter('/nvmeof/listener', Scope.NVME_OF)
+    @APIDoc('NVMe-oF Listener Management API', 'NVMe-oF')
+    class NvmeofListener(RESTController):
+        @ReadPermission
+        def list(self, subsystem_nqn: str):
+            """
+            List all NVMeoF listeners
+            :param nqn: NVMeoF subsystem NQN
+            """
+            response = MessageToJson(NVMeoFClient().list_listeners(subsystem_nqn))
+            return json.loads(response)
+
+        @CreatePermission
+        def create(self, nqn: str, gateway: str, traddr: Optional[str] = None,
+                   trtype: Optional[str] = 'TCP', adrfam: Optional[str] = 'IPV4',
+                   trsvcid: Optional[int] = 4420,
+                   auto_ha_state: Optional[str] = 'AUTO_HA_UNSET'):
+            """
+            Create a new NVMeoF listener
+            :param nqn: NVMeoF subsystem NQN
+            :param gateway: NVMeoF gateway
+            :param traddr: NVMeoF transport address
+            :param trtype: NVMeoF transport type
+            :param adrfam: NVMeoF address family
+            :param trsvcid: NVMeoF transport service ID
+            :param auto_ha_state: NVMeoF auto HA state
+            """
+            response = NVMeoFClient().create_listener(nqn, gateway, traddr,
+                                                      trtype, adrfam, trsvcid, auto_ha_state)
+            return json.loads(MessageToJson(response))
+
+        @DeletePermission
+        def delete(self, nqn: str, gateway: str, traddr: Optional[str] = None,
+                   transport_type: Optional[str] = 'TCP', addr_family: Optional[str] = 'IPV4',
+                   transport_svc_id: Optional[int] = 4420):
+            """
+            Delete an existing NVMeoF listener
+            :param nqn: NVMeoF subsystem NQN
+            :param gateway: NVMeoF gateway
+            :param traddr: NVMeoF transport address
+            :param transport_type: NVMeoF transport type
+            :param addr_family: NVMeoF address family
+            :param transport_svc_id: NVMeoF transport service ID
+            """
+            response = NVMeoFClient().delete_listener(nqn, gateway, traddr, transport_type,
+                                                      addr_family, transport_svc_id)
+            return json.loads(MessageToJson(response))
+
+    @APIRouter('/nvmeof/gateway', Scope.NVME_OF)
+    @APIDoc('NVMe-oF Gateway Management API', 'NVMe-oF')
+    class NvmeofGateway(RESTController):
+        @ReadPermission
+        @Endpoint()
+        def info(self):
+            """
+            Get NVMeoF gateway information
+            """
+            response = MessageToJson(NVMeoFClient().gateway_info())
+            return json.loads(response)
index 24e947c7066c40f2a848154e2cc5ddbe3f5bd13d..41160b698aae67c0653fee05dcb89b50c625c440 100644 (file)
@@ -29,6 +29,7 @@ from mgr_util import ServerConfigException, build_url, \
 from . import mgr
 from .controllers import Router, json_error_page
 from .grafana import push_local_dashboards
+from .services import nvmeof_cli  # noqa # pylint: disable=unused-import
 from .services.auth import AuthManager, AuthManagerTool, JwtManager
 from .services.exception import dashboard_exception_handler
 from .services.rgw_client import configure_rgw_credentials
@@ -37,9 +38,6 @@ from .settings import handle_option_command, options_command_list, options_schem
 from .tools import NotificationQueue, RequestLoggingTool, TaskManager, \
     prepare_url_prefix, str_to_bool
 
-# pylint: disable=unused-import
-from .services import nvmeof_cli
-
 try:
     import cherrypy
     from cherrypy._cptools import HandlerWrapperTool
index 55a38701eb6d6c275ca8011a43e74e6bc2976400..b7bb688520c4b5155db091a564cc7ad3aad84d97 100644 (file)
@@ -7318,6 +7318,550 @@ paths:
       summary: Updates an NFS-Ganesha export
       tags:
       - NFS-Ganesha
+  /api/nvmeof/gateway/info:
+    get:
+      description: "\n            Get NVMeoF gateway information\n            "
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/hosts:
+    post:
+      description: "\n            Create a new NVMeoF host\n            :param subsystem_nqn:\
+        \ NVMeoF subsystem NQN\n            :param host_nqn: NVMeoF host NQN\n   \
+        \         "
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                host_nqn:
+                  type: string
+                subsystem_nqn:
+                  type: string
+              required:
+              - subsystem_nqn
+              - host_nqn
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/hosts/{subsystem_nqn}:
+    get:
+      description: "\n            List all NVMeoF hosts\n            :param subsystem_nqn:\
+        \ NVMeoF subsystem NQN\n            "
+      parameters:
+      - in: path
+        name: subsystem_nqn
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/hosts/{subsystem_nqn}/{host_nqn}:
+    delete:
+      description: "\n            Delete an existing NVMeoF host\n            :param\
+        \ subsystem_nqn: NVMeoF subsystem NQN\n            :param host_nqn: NVMeoF\
+        \ host NQN\n            "
+      parameters:
+      - in: path
+        name: subsystem_nqn
+        required: true
+        schema:
+          type: string
+      - in: path
+        name: host_nqn
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/listener:
+    get:
+      description: "\n            List all NVMeoF listeners\n            :param nqn:\
+        \ NVMeoF subsystem NQN\n            "
+      parameters:
+      - in: query
+        name: subsystem_nqn
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+    post:
+      description: "\n            Create a new NVMeoF listener\n            :param\
+        \ nqn: NVMeoF subsystem NQN\n            :param gateway: NVMeoF gateway\n\
+        \            :param traddr: NVMeoF transport address\n            :param trtype:\
+        \ NVMeoF transport type\n            :param adrfam: NVMeoF address family\n\
+        \            :param trsvcid: NVMeoF transport service ID\n            :param\
+        \ auto_ha_state: NVMeoF auto HA state\n            "
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                adrfam:
+                  default: IPV4
+                  type: string
+                auto_ha_state:
+                  default: AUTO_HA_UNSET
+                  type: string
+                gateway:
+                  type: string
+                nqn:
+                  type: string
+                traddr:
+                  type: string
+                trsvcid:
+                  default: 4420
+                  type: integer
+                trtype:
+                  default: TCP
+                  type: string
+              required:
+              - nqn
+              - gateway
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/listener/{nqn}/{gateway}:
+    delete:
+      description: "\n            Delete an existing NVMeoF listener\n           \
+        \ :param nqn: NVMeoF subsystem NQN\n            :param gateway: NVMeoF gateway\n\
+        \            :param traddr: NVMeoF transport address\n            :param transport_type:\
+        \ NVMeoF transport type\n            :param addr_family: NVMeoF address family\n\
+        \            :param transport_svc_id: NVMeoF transport service ID\n      \
+        \      "
+      parameters:
+      - in: path
+        name: nqn
+        required: true
+        schema:
+          type: string
+      - in: path
+        name: gateway
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: traddr
+        schema:
+          type: string
+      - default: TCP
+        in: query
+        name: transport_type
+        schema:
+          type: string
+      - default: IPV4
+        in: query
+        name: addr_family
+        schema:
+          type: string
+      - default: 4420
+        in: query
+        name: transport_svc_id
+        schema:
+          type: integer
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/namespace:
+    post:
+      description: "\n            Create a new NVMeoF namespace\n            :param\
+        \ rbd_pool: RBD pool name\n            :param rbd_image: RBD image name\n\
+        \            :param subsystem_nqn: NVMeoF subsystem NQN\n            :param\
+        \ create_image: Create RBD image\n            :param image_size: RBD image\
+        \ size\n            :param block_size: NVMeoF namespace block size\n     \
+        \       :param nsid: NVMeoF namespace ID\n            :param uuid: NVMeoF\
+        \ namespace UUID\n            :param anagrpid: NVMeoF namespace ANA group\
+        \ ID\n            "
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                anagrpid:
+                  default: 1
+                  type: integer
+                block_size:
+                  default: 512
+                  type: integer
+                create_image:
+                  default: true
+                  type: boolean
+                image_size:
+                  default: 1024
+                  type: integer
+                nsid:
+                  default: 1
+                  type: integer
+                rbd_image:
+                  type: string
+                rbd_pool:
+                  type: string
+                subsystem_nqn:
+                  type: string
+                uuid:
+                  type: string
+              required:
+              - rbd_pool
+              - rbd_image
+              - subsystem_nqn
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/namespace/{subsystem_nqn}:
+    get:
+      description: "\n            List all NVMeoF namespaces\n            "
+      parameters:
+      - in: path
+        name: subsystem_nqn
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/namespace/{subsystem_nqn}/{nsid}:
+    delete:
+      description: "\n            Delete an existing NVMeoF namespace\n          \
+        \  :param subsystem_nqn: NVMeoF subsystem NQN\n            :param nsid: NVMeoF\
+        \ namespace ID\n            "
+      parameters:
+      - in: path
+        name: subsystem_nqn
+        required: true
+        schema:
+          type: string
+      - in: path
+        name: nsid
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/subsystem:
+    get:
+      parameters:
+      - allowEmptyValue: true
+        description: NVMeoF subsystem NQN
+        in: query
+        name: subsystem_nqn
+        schema:
+          type: string
+      - allowEmptyValue: true
+        description: NVMeoF subsystem serial number
+        in: query
+        name: serial_number
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: List all NVMeoF gateways
+      tags:
+      - NVMe-oF
+    post:
+      description: "\n            Create a new NVMeoF subsystem\n\n            :param\
+        \ subsystem_nqn: NVMeoF subsystem NQN\n            :param serial_number: NVMeoF\
+        \ subsystem serial number\n            :param max_namespaces: NVMeoF subsystem\
+        \ maximum namespaces\n            :param ana_reporting: NVMeoF subsystem ANA\
+        \ reporting\n            :param enable_ha: NVMeoF subsystem enable HA\n  \
+        \          "
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                ana_reporting:
+                  default: false
+                  type: boolean
+                enable_ha:
+                  default: false
+                  type: boolean
+                max_namespaces:
+                  default: 256
+                  type: integer
+                serial_number:
+                  type: integer
+                subsystem_nqn:
+                  type: string
+              required:
+              - subsystem_nqn
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
+  /api/nvmeof/subsystem/{subsystem_nqn}:
+    delete:
+      description: "\n            Delete an existing NVMeoF subsystem\n          \
+        \  :param subsystem_nqn: NVMeoF subsystem NQN\n            "
+      parameters:
+      - in: path
+        name: subsystem_nqn
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - NVMe-oF
   /api/osd:
     get:
       parameters: []
@@ -13180,6 +13724,8 @@ tags:
   name: Monitor
 - description: NFS-Ganesha Cluster Management API
   name: NFS-Ganesha
+- description: NVMe-oF Gateway Management API
+  name: NVMe-oF
 - description: OSD management API
   name: OSD
 - description: OSD Perf Counters Management API
index 292971819c9c620ddd91b8c5c36f740f6c2aa86f..5643b55f9647bc4ca7cd3ed962602af87846d3ef 100644 (file)
@@ -11,3 +11,5 @@ pyyaml
 natsort
 setuptools
 jsonpatch
+grpcio==1.46.5
+grpcio-tools==1.46.5
index 5921ab48ea8b6c0a51ccdfe89622efa46418dd01..75a121a48d6e66f3106aa9dfd4a30d82567cf32c 100644 (file)
@@ -5,8 +5,9 @@ import json
 from mgr_module import CLICheckNonemptyFileInput, CLIReadCommand, CLIWriteCommand
 
 from ..rest_client import RequestException
-from .nvmeof_conf import NvmeofGatewaysConfig, NvmeofGatewayAlreadyExists, \
-    ManagedByOrchestratorException
+from .nvmeof_conf import ManagedByOrchestratorException, \
+    NvmeofGatewayAlreadyExists, NvmeofGatewaysConfig
+
 
 @CLIReadCommand('dashboard nvmeof-gateway-list')
 def list_nvmeof_gateways(_):
@@ -15,6 +16,7 @@ def list_nvmeof_gateways(_):
     '''
     return 0, json.dumps(NvmeofGatewaysConfig.get_gateways_config()), ''
 
+
 @CLIWriteCommand('dashboard nvmeof-gateway-add')
 @CLICheckNonemptyFileInput(desc='NVMe-oF gateway configuration')
 def add_nvmeof_gateway(_, inbuf, name: str):
@@ -32,6 +34,7 @@ def add_nvmeof_gateway(_, inbuf, name: str):
     except RequestException as ex:
         return -errno.EINVAL, '', str(ex)
 
+
 @CLIWriteCommand('dashboard nvmeof-gateway-rm')
 def remove_nvmeof_gateway(_, name: str):
     '''
index ff7c6dfc8ced32112b4e5c725e92df16dfe03dfe..bebaef7d9ecbed03ffe1dc11ef3f7932e1537250 100644 (file)
-from enum import Enum
+import logging
 from typing import Optional
-import grpc
-import json
 
-import logging
+from ..tools import str_to_bool
+from .nvmeof_conf import NvmeofGatewaysConfig
 
-from .proto import gateway_pb2 as pb2
-from .proto import gateway_pb2_grpc as pb2_grpc
+logger = logging.getLogger('nvmeof_client')
 
-from google.protobuf.json_format import MessageToJson
+try:
+    import grpc
 
-from .nvmeof_conf import NvmeofGatewaysConfig
-from ..tools import str_to_bool
+    from .proto import gateway_pb2 as pb2
+    from .proto import gateway_pb2_grpc as pb2_grpc
+except ImportError:
+    grpc = None
+else:
+    class NVMeoFClient(object):
+        def __init__(self):
+            logger.info('Initiating nvmeof gateway connection...')
 
-logger = logging.getLogger('nvmeof_client')
+            self.gateway_addr = list(NvmeofGatewaysConfig.get_gateways_config()[
+                                     'gateways'].values())[0]['service_url']
+            self.channel = grpc.insecure_channel(
+                '{}'.format(self.gateway_addr)
+            )
+            logger.info('Found nvmeof gateway at %s', self.gateway_addr)
+            self.stub = pb2_grpc.GatewayStub(self.channel)
+
+        def list_subsystems(self, subsystem_nqn: Optional[str] = None,
+                            serial_number: Optional[str] = None):
+            return self.stub.list_subsystems(pb2.list_subsystems_req(
+                subsystem_nqn=subsystem_nqn,
+                serial_number=serial_number
+            ))
+
+        def create_subsystem(self, subsystem_nqn: str, serial_number: str, max_namespaces: int,
+                             ana_reporting: bool, enable_ha: bool):
+            return self.stub.create_subsystem(pb2.create_subsystem_req(
+                subsystem_nqn=subsystem_nqn,
+                serial_number=serial_number,
+                max_namespaces=int(max_namespaces),
+                ana_reporting=str_to_bool(ana_reporting),
+                enable_ha=str_to_bool(enable_ha)
+            ))
+
+        def delete_subsystem(self, subsystem_nqn: str):
+            return self.stub.delete_subsystem(pb2.delete_subsystem_req(
+                subsystem_nqn=subsystem_nqn
+            ))
+
+        def list_namespaces(self, subsystem_nqn: str, nsid: Optional[int] = 1,
+                            uuid: Optional[str] = None):
+            return self.stub.list_namespaces(pb2.list_namespaces_req(
+                subsystem=subsystem_nqn,
+                nsid=int(nsid),
+                uuid=uuid
+            ))
 
+        def create_namespace(self, rbd_pool_name: str, rbd_image_name: str,
+                             subsystem_nqn: str, block_size: int = 512,
+                             nsid: Optional[int] = 1, uuid: Optional[str] = None,
+                             anagrpid: Optional[int] = 1, create_image: Optional[bool] = True,
+                             size: Optional[int] = 1024):
+            return self.stub.namespace_add(pb2.namespace_add_req(
+                rbd_pool_name=rbd_pool_name,
+                rbd_image_name=rbd_image_name,
+                subsystem_nqn=subsystem_nqn,
+                nsid=int(nsid),
+                block_size=block_size,
+                uuid=uuid,
+                anagrpid=anagrpid,
+                create_image=create_image,
+                size=size
+            ))
 
-class NVMeoFClient(object):
-    def __init__(self):
-        logger.info('Initiating nvmeof gateway connection...')
-
-        self.gateway_addr = list(NvmeofGatewaysConfig.get_gateways_config()['gateways'].values())[0]['service_url']
-        self.channel = grpc.insecure_channel(
-            '{}'.format(self.gateway_addr)
-        )
-        logger.info('Found nvmeof gateway at {}'.format(self.gateway_addr))
-        self.stub = pb2_grpc.GatewayStub(self.channel)
-
-    def get_subsystems(self):
-        response = self.stub.get_subsystems(pb2.get_subsystems_req())
-        return json.loads(MessageToJson(response))
-    
-    def create_bdev(self, name: str, rbd_pool: str, rbd_image: str, block_size: int, uuid: Optional[str] = None):
-        response = self.stub.create_bdev(pb2.create_bdev_req(
-            bdev_name=name,
-            rbd_pool_name=rbd_pool,
-            rbd_image_name=rbd_image,
-            block_size=block_size,
-            uuid=uuid
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def resize_bdev(self, name: str, size: int):
-        response = self.stub.resize_bdev(pb2.resize_bdev_req(
-            bdev_name=name,
-            new_size=size
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def delete_bdev(self, name: str, force: bool):
-        response = self.stub.delete_bdev(pb2.delete_bdev_req(
-            bdev_name=name,
-            force=str_to_bool(force)
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def create_subsystem(self, subsystem_nqn: str, serial_number: str, max_namespaces: int,
-                         ana_reporting: bool, enable_ha: bool) :
-        response = self.stub.create_subsystem(pb2.create_subsystem_req(
-            subsystem_nqn=subsystem_nqn,
-            serial_number=serial_number,
-            max_namespaces=int(max_namespaces),
-            ana_reporting=str_to_bool(ana_reporting),
-            enable_ha=str_to_bool(enable_ha)
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def delete_subsystem(self, subsystem_nqn: str):
-        response = self.stub.delete_subsystem(pb2.delete_subsystem_req(
-            subsystem_nqn=subsystem_nqn
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def create_namespace(self, subsystem_nqn: str, bdev_name: str, nsid: int, anagrpid: Optional[str] = None):
-        response = self.stub.add_namespace(pb2.add_namespace_req(
-            subsystem_nqn=subsystem_nqn,
-            bdev_name=bdev_name,
-            nsid=int(nsid),
-            anagrpid=anagrpid
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def delete_namespace(self, subsystem_nqn: str, nsid: int):
-        response = self.stub.remove_namespace(pb2.remove_namespace_req(
-            subsystem_nqn=subsystem_nqn,
-            nsid=nsid
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def add_host(self, subsystem_nqn: str, host_nqn: str):
-        response = self.stub.add_host(pb2.add_host_req(
-            subsystem_nqn=subsystem_nqn,
-            host_nqn=host_nqn
-        ))
-        return json.loads(MessageToJson(response))
-    
-    def remove_host(self, subsystem_nqn: str, host_nqn: str):
-        response = self.stub.remove_host(pb2.remove_host_req(
-            subsystem_nqn=subsystem_nqn,
-            host_nqn=host_nqn
-        ))
-        return json.loads(MessageToJson(response))
-
-    def create_listener(self, nqn: str, gateway: str, trtype: str, adrfam: str,
-                        traddr: str, trsvcid: str):
-        req = pb2.create_listener_req(
+        def delete_namespace(self, subsystem_nqn: str, nsid: int):
+            return self.stub.remove_namespace(pb2.remove_namespace_req(
+                subsystem_nqn=subsystem_nqn,
+                nsid=nsid
+            ))
+
+        def list_hosts(self, subsystem_nqn: str):
+            return self.stub.list_hosts(pb2.list_hosts_req(
+                subsystem=subsystem_nqn
+            ))
+
+        def add_host(self, subsystem_nqn: str, host_nqn: str):
+            return self.stub.add_host(pb2.add_host_req(
+                subsystem_nqn=subsystem_nqn,
+                host_nqn=host_nqn
+            ))
+
+        def remove_host(self, subsystem_nqn: str, host_nqn: str):
+            return self.stub.remove_host(pb2.remove_host_req(
+                subsystem_nqn=subsystem_nqn,
+                host_nqn=host_nqn
+            ))
+
+        def list_listeners(self, subsystem_nqn: str):
+            return self.stub.list_listeners(pb2.list_listeners_req(
+                subsystem=subsystem_nqn
+            ))
+
+        def create_listener(self, nqn: str, gateway: str, traddr: Optional[str] = None,
+                            transport_type: Optional[str] = 'TCP',
+                            addr_family: Optional[str] = 'IPV4',
+                            transport_svc_id: Optional[int] = 4420,
+                            auto_ha_state: Optional[str] = 'AUTO_HA_UNSET'):
+            traddr = None
+            if traddr is None:
+                addr = self.gateway_addr
+                ip_address, _ = addr.split(':')
+                traddr = self._escape_address_if_ipv6(ip_address)
+
+            req = pb2.create_listener_req(
                 nqn=nqn,
                 gateway_name=gateway,
-                trtype=pb2.TransportType.Value(trtype.upper()),
-                adrfam=pb2.AddressFamily.Value(adrfam.lower()),
                 traddr=traddr,
-                trsvcid=trsvcid,
+                trtype=pb2.TransportType.Value(transport_type.upper()),
+                adrfam=pb2.AddressFamily.Value(addr_family.lower()),
+                trsvcid=transport_svc_id,
+                auto_ha_state=pb2.AutoHAState.Value(auto_ha_state.upper())
             )
-        ret = self.stub.create_listener(req)
-        return json.loads(MessageToJson(ret))
-    
-    def delete_listener(self, nqn: str, gateway: str, trttype, adrfam,
-                        traddr: str, trsvcid: str):
-        response = self.stub.delete_listener(pb2.delete_listener_req(
-            nqn=nqn,
-            gateway_name=gateway,
-            trtype=trttype,
-            adrfam=adrfam,
-            traddr=traddr,
-            trsvcid=trsvcid
-        ))
-        return json.loads(MessageToJson(response))
+            return self.stub.create_listener(req)
+
+        def delete_listener(self, nqn: str, gateway: str, traddr: Optional[str] = None,
+                            transport_type: Optional[str] = 'TCP',
+                            addr_family: Optional[str] = 'IPV4',
+                            transport_svc_id: Optional[int] = 4420):
+            traddr = None
+            if traddr is None:
+                addr = self.gateway_addr
+                ip_address, _ = addr.split(':')
+                traddr = self._escape_address_if_ipv6(ip_address)
+
+            return self.stub.delete_listener(pb2.delete_listener_req(
+                nqn=nqn,
+                gateway_name=gateway,
+                traddr=traddr,
+                trtype=pb2.TransportType.Value(transport_type.upper()),
+                adrfam=pb2.AddressFamily.Value(addr_family.lower()),
+                trsvcid=int(transport_svc_id)
+            ))
+
+        def gateway_info(self):
+            return self.stub.get_gateway_info(pb2.get_gateway_info_req())
+
+        def _escape_address_if_ipv6(self, addr):
+            ret_addr = addr
+            if ":" in addr and not addr.strip().startswith("["):
+                ret_addr = f"[{addr}]"
+            return ret_addr
index 709635dc7db9430525ffa228121519337d6099bf..901098ea5665aa106ebe993e2c6006294208d341 100644 (file)
@@ -4,23 +4,28 @@ import json
 
 from .. import mgr
 
+
 class NvmeofGatewayAlreadyExists(Exception):
     def __init__(self, gateway_name):
         super(NvmeofGatewayAlreadyExists, self).__init__(
             "NVMe-oF gateway '{}' already exists".format(gateway_name))
 
+
 class NvmeofGatewayDoesNotExist(Exception):
     def __init__(self, hostname):
         super(NvmeofGatewayDoesNotExist, self).__init__(
             "NVMe-oF gateway '{}' does not exist".format(hostname))
 
+
 class ManagedByOrchestratorException(Exception):
     def __init__(self):
         super(ManagedByOrchestratorException, self).__init__(
             "NVMe-oF configuration is managed by the orchestrator")
 
+
 _NVMEOF_STORE_KEY = "_nvmeof_config"
 
+
 class NvmeofGatewaysConfig(object):
     @classmethod
     def _load_config_from_store(cls):
@@ -33,11 +38,11 @@ class NvmeofGatewaysConfig(object):
     @classmethod
     def _save_config(cls, config):
         mgr.set_store(_NVMEOF_STORE_KEY, json.dumps(config))
-    
+
     @classmethod
     def get_gateways_config(cls):
         return cls._load_config_from_store()
-    
+
     @classmethod
     def add_gateway(cls, name, service_url):
         config = cls.get_gateways_config()
@@ -45,7 +50,7 @@ class NvmeofGatewaysConfig(object):
             raise NvmeofGatewayAlreadyExists(name)
         config['gateways'][name] = {'service_url': service_url}
         cls._save_config(config)
-    
+
     @classmethod
     def remove_gateway(cls, name):
         config = cls.get_gateways_config()
index 85238c8210a3151a2b5a756032be960d437469b6..787aefb1ce9f7895aeb994b5b1f4d1101136efcf 100644 (file)
@@ -31,21 +31,21 @@ enum AddressFamily {
 enum LogLevel {
     DISABLED = 0;
     ERROR = 1;
-    WARN = 2;
+    WARNING = 2;
     NOTICE = 3;
     INFO = 4;
     DEBUG = 5;
 }
 
-service Gateway {
-       // Creates a bdev from an RBD image
-       rpc create_bdev(create_bdev_req) returns (bdev) {}
-
-       // Resizes a bdev
-       rpc resize_bdev(resize_bdev_req) returns (req_status) {}
+enum AutoHAState {
+    AUTO_HA_UNSET = 0;
+    AUTO_HA_OFF = 1;
+    AUTO_HA_ON = 2;
+}
 
-       // Deletes a bdev
-       rpc delete_bdev(delete_bdev_req) returns (req_status) {}
+service Gateway {
+       // Creates a namespace from an RBD image
+       rpc namespace_add(namespace_add_req) returns (nsid_status) {}
 
        // Creates a subsystem
        rpc create_subsystem(create_subsystem_req) returns(req_status) {}
@@ -53,11 +53,23 @@ service Gateway {
        // Deletes a subsystem
        rpc delete_subsystem(delete_subsystem_req) returns(req_status) {}
 
-       // Adds a namespace to a subsystem
-       rpc add_namespace(add_namespace_req) returns(nsid_status) {}
+       // List namespaces
+       rpc list_namespaces(list_namespaces_req) returns(namespaces_info) {}
+
+       // Resizes a namespace
+       rpc namespace_resize(namespace_resize_req) returns (req_status) {}
+
+       // Gets namespace's IO stats
+       rpc namespace_get_io_stats(namespace_get_io_stats_req) returns (namespace_io_stats_info) {}
+
+       // Sets namespace's qos limits
+       rpc namespace_set_qos_limits(namespace_set_qos_req) returns (req_status) {}
+
+       // Changes namespace's load balancing group
+       rpc namespace_change_load_balancing_group(namespace_change_load_balancing_group_req) returns (req_status) {}
 
-       // Removes a namespace from a subsystem
-       rpc remove_namespace(remove_namespace_req) returns(req_status) {}
+       // Deletes a namespace
+       rpc namespace_delete(namespace_delete_req) returns (req_status) {}
 
        // Adds a host to a subsystem
        rpc add_host(add_host_req) returns (req_status) {}
@@ -65,70 +77,104 @@ service Gateway {
        // Removes a host from a subsystem
        rpc remove_host(remove_host_req) returns (req_status) {}
 
+       // List hosts
+       rpc list_hosts(list_hosts_req) returns(hosts_info) {}
+
+       // List connections
+       rpc list_connections(list_connections_req) returns(connections_info) {}
+
        // Creates a listener for a subsystem at a given IP/Port
        rpc create_listener(create_listener_req) returns(req_status) {}
 
        // Deletes a listener from a subsystem at a given IP/Port
        rpc delete_listener(delete_listener_req) returns(req_status) {}
 
-       // Gets subsystems
-       rpc get_subsystems(get_subsystems_req) returns(subsystems_info) {}
+       // List listeners
+       rpc list_listeners(list_listeners_req) returns(listeners_info) {}
+
+       // List subsystems
+       rpc list_subsystems(list_subsystems_req) returns(subsystems_info) {}
 
        // Gets spdk nvmf log flags and level
        rpc get_spdk_nvmf_log_flags_and_level(get_spdk_nvmf_log_flags_and_level_req) returns(spdk_nvmf_log_flags_and_level_info) {}
 
-       // Disables spdk nvmf logs
-       rpc disable_spdk_nvmf_logs(disable_spdk_nvmf_logs_req) returns(req_status) {}
+        // Disables spdk nvmf logs
+        rpc disable_spdk_nvmf_logs(disable_spdk_nvmf_logs_req) returns(req_status) {}
 
        // Set spdk nvmf logs
        rpc set_spdk_nvmf_logs(set_spdk_nvmf_logs_req) returns(req_status) {}
 
-       // Set spdk nvmf logs
+       // Get gateway info
        rpc get_gateway_info(get_gateway_info_req) returns(gateway_info) {}
 }
 
 // Request messages
 
-message create_bdev_req {
-       string bdev_name = 1;
-       string rbd_pool_name = 2;
-       string rbd_image_name = 3;
-       int32 block_size = 4;
-       optional string uuid = 5;
+message namespace_add_req {
+       string rbd_pool_name = 1;
+       string rbd_image_name = 2;
+       string subsystem_nqn = 3;
+       optional uint32 nsid = 4;
+       uint32 block_size = 5;
+       optional string uuid = 6;
+       optional int32 anagrpid = 7;
+       optional bool create_image = 8;
+       optional uint32 size = 9;
 }
 
-message resize_bdev_req {
-       string bdev_name = 1;
-       int32 new_size = 2;
+message namespace_resize_req {
+       string subsystem_nqn = 1;
+       optional uint32 nsid = 2;
+       optional string uuid = 3;
+       uint32 new_size = 4;
 }
 
-message delete_bdev_req {
-       string bdev_name = 1;
-       bool force = 2;
+message namespace_get_io_stats_req {
+       string subsystem_nqn = 1;
+       optional uint32 nsid = 2;
+       optional string uuid = 3;
 }
 
-message create_subsystem_req {
+message namespace_set_qos_req {
        string subsystem_nqn = 1;
-       string serial_number = 2;
-       int32 max_namespaces = 3;
-       bool  ana_reporting  = 4;
-       bool  enable_ha      = 5;
+       optional uint32 nsid = 2;
+       optional string uuid = 3;
+       optional uint64 rw_ios_per_second = 4;
+       optional uint64 rw_mbytes_per_second = 5;
+       optional uint64 r_mbytes_per_second = 6;
+       optional uint64 w_mbytes_per_second = 7;
 }
 
-message delete_subsystem_req {
+message namespace_change_load_balancing_group_req {
        string subsystem_nqn = 1;
+       optional uint32 nsid = 2;
+       optional string uuid = 3;
+       int32 anagrpid = 4;
 }
 
-message add_namespace_req {
+message namespace_delete_req {
        string subsystem_nqn = 1;
-       string bdev_name = 2;
-       optional uint32 nsid = 3;
-       optional int32 anagrpid = 4;
+       optional uint32 nsid = 2;
+       optional string uuid = 3;
+}
+
+message create_subsystem_req {
+       string subsystem_nqn = 1;
+       string serial_number = 2;
+       optional uint32 max_namespaces = 3;
+       bool ana_reporting = 4;
+       bool enable_ha = 5;
 }
 
-message remove_namespace_req {
+message delete_subsystem_req {
        string subsystem_nqn = 1;
-       uint32 nsid = 2;
+       optional bool force = 2;
+}
+
+message list_namespaces_req {
+       string subsystem = 1;
+       optional uint32 nsid = 2;
+       optional string uuid = 3;
 }
 
 message add_host_req {
@@ -141,25 +187,40 @@ message remove_host_req {
        string host_nqn = 2;
 }
 
+message list_hosts_req {
+       string subsystem = 1;
+}
+
+message list_connections_req {
+       string subsystem = 1;
+}
+
 message create_listener_req {
        string nqn = 1;
        string gateway_name = 2;
-       TransportType trtype = 3;
-       AddressFamily adrfam = 4;
-       string traddr = 5;
-       string trsvcid = 6;
+       string traddr = 3;
+       optional TransportType trtype = 4;
+       optional AddressFamily adrfam = 5;
+       optional uint32 trsvcid = 6;
+       optional AutoHAState auto_ha_state = 7;
 }
 
 message delete_listener_req {
        string nqn = 1;
        string gateway_name = 2;
-       TransportType trtype = 3;
-       AddressFamily adrfam = 4;
-       string traddr = 5;
-       string trsvcid = 6;
+       string traddr = 3;
+       optional TransportType trtype = 4;
+       optional AddressFamily adrfam = 5;
+       optional uint32 trsvcid = 6;
+}
+
+message list_listeners_req {
+       string subsystem = 1;
 }
 
-message get_subsystems_req {
+message list_subsystems_req {
+       optional string subsystem_nqn = 1;
+       optional string serial_number = 2;
 }
 
 message get_spdk_nvmf_log_flags_and_level_req {
@@ -174,74 +235,175 @@ message set_spdk_nvmf_logs_req {
 }
 
 message get_gateway_info_req {
-       string cli_version = 1;
+       optional string cli_version = 1;
 }
 
 // Return messages 
 
-message bdev {
-       string bdev_name = 1;
-       bool status = 2;
+message bdev_status {
+       int32 status = 1;
+       string error_message = 2;
+       string bdev_name = 3;
 }
 
 message req_status {
-       bool status = 1;
+       int32 status = 1;
+       string error_message = 2;
 }
 
 message nsid_status {
-       uint32 nsid = 1;
-       bool status = 2;
+       int32 status = 1;
+       string error_message = 2;
+       uint32 nsid = 3;
 }
 
 message subsystems_info {
-       repeated subsystem subsystems = 1;
+       int32 status = 1;
+       string error_message = 2;
+       repeated subsystem subsystems = 3;
 }
 
 message subsystem {
        string nqn = 1;
-       string subtype = 2;
-       repeated listen_address listen_addresses = 3;
-       repeated host hosts = 4;
-       bool allow_any_host = 5;
-       optional string serial_number = 6;
-       optional string model_number = 7;
-       optional uint32 max_namespaces = 8;
-       optional uint32 min_cntlid = 9;
-       optional uint32 max_cntlid = 10;
-       repeated namespace namespaces = 11;
+       bool enable_ha = 2;
+       string serial_number = 3;
+       string model_number = 4;
+       uint32 min_cntlid = 5;
+       uint32 max_cntlid = 6;
+       uint32 namespace_count = 7;
+       string subtype = 8;
 }
 
 message gateway_info {
        string cli_version = 1;
-       string gateway_version = 2;
-       string gateway_name = 3;
-       string gateway_group = 4;
-       string gateway_addr = 5;
-       string gateway_port = 6;
-       bool status = 7;
+       string version = 2;
+       string name = 3;
+       string group = 4;
+       string addr = 5;
+       string port = 6;
+       bool bool_status = 7;
+       int32 status = 8;
+       string error_message = 9;
+       string spdk_version = 10;
+}
+
+message cli_version {
+       int32 status = 1;
+       string error_message = 2;
+       string version = 3;
+}
+
+message gw_version {
+       int32 status = 1;
+       string error_message = 2;
+       string version = 3;
 }
 
-message listen_address {
-       string transport = 1;
+message listener_info {
+       string gateway_name = 1;
        TransportType trtype = 2;
        AddressFamily adrfam = 3;
        string traddr = 4;
-       string trsvcid = 5;
+       uint32 trsvcid = 5;
+}
+
+message listeners_info {
+       int32 status = 1;
+       string error_message = 2;
+       repeated listener_info listeners = 3;
 }
 
 message host {
     string nqn = 1;
 }
 
+message hosts_info {
+       int32 status = 1;
+       string error_message = 2;
+       bool allow_any_host = 3;
+       string subsystem_nqn = 4;
+       repeated host hosts = 5;
+}
+
+message connection {
+       string nqn = 1;
+       string traddr = 2;
+       uint32 trsvcid = 3;
+       TransportType trtype = 4;
+       AddressFamily adrfam = 5;
+       bool connected = 6;
+       int32 qpairs_count = 7;
+       int32 controller_id = 8;
+}
+
+message connections_info {
+       int32 status = 1;
+       string error_message = 2;
+       string subsystem_nqn = 3;
+       repeated connection connections = 4;
+}
+
 message namespace {
-    uint32 nsid = 1;
-    string name = 2;
-    optional string bdev_name = 3;
-    optional string nguid = 4;
-    optional string uuid = 5;
-    optional uint32 anagrpid = 6;
+       uint32 nsid = 1;
+       string bdev_name = 2;
+       string rbd_image_name = 3;
+       string rbd_pool_name = 4;
+       uint32 load_balancing_group = 5;
+       uint32 block_size = 6;
+       uint64 rbd_image_size = 7;
+       string uuid = 8;
+       uint64 rw_ios_per_second = 9;
+       uint64 rw_mbytes_per_second = 10;
+       uint64 r_mbytes_per_second = 11;
+       uint64 w_mbytes_per_second = 12;
+}
+
+message namespaces_info {
+       int32 status = 1;
+       string error_message = 2;
+       string subsystem_nqn = 3;
+       repeated namespace namespaces = 4;
+}
+
+message namespace_io_stats_info {
+       int32 status = 1;
+       string error_message = 2;
+       string subsystem_nqn = 3;
+       uint32 nsid = 4;
+       string uuid = 5;
+       string bdev_name = 6;
+       uint64 tick_rate = 7;
+       uint64 ticks = 8;
+       uint64 bytes_read = 9;
+       uint64 num_read_ops = 10;
+       uint64 bytes_written = 11;
+       uint64 num_write_ops = 12;
+       uint64 bytes_unmapped = 13;
+       uint64 num_unmap_ops = 14;
+       uint64 read_latency_ticks = 15;
+       uint64 max_read_latency_ticks = 16;
+       uint64 min_read_latency_ticks = 17;
+       uint64 write_latency_ticks = 18;
+       uint64 max_write_latency_ticks = 19;
+       uint64 min_write_latency_ticks = 20;
+       uint64 unmap_latency_ticks = 21;
+       uint64 max_unmap_latency_ticks = 22;
+       uint64 min_unmap_latency_ticks = 23;
+       uint64 copy_latency_ticks = 24;
+       uint64 max_copy_latency_ticks = 25;
+       uint64 min_copy_latency_ticks = 26;
+       repeated uint32 io_error = 27;
+}
+
+message spdk_log_flag_info {
+    string name = 1;
+    bool enabled = 2;
 }
 
 message spdk_nvmf_log_flags_and_level_info {
-       string flags_level =1;
+       int32 status = 1;
+       string error_message = 2;
+       repeated spdk_log_flag_info nvmf_log_flags = 3;
+       LogLevel log_level = 4;
+       LogLevel log_print_level = 5;
 }
\ No newline at end of file
index 2cd4d0c5fe143e30b468ebee2648ff52035b5f07..00349b5256cdca8b502729557a9a0b85513ce440 100644 (file)
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: gateway.proto
 """Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import enum_type_wrapper
+
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
 
 
+DESCRIPTOR = _descriptor.FileDescriptor(
+    name='gateway.proto',
+    package='',
+    syntax='proto3',
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+    serialized_pb=b'\n\rgateway.proto\"\x91\x02\n\x11namespace_add_req\x12\x15\n\rrbd_pool_name\x18\x01 \x01(\t\x12\x16\n\x0erbd_image_name\x18\x02 \x01(\t\x12\x15\n\rsubsystem_nqn\x18\x03 \x01(\t\x12\x11\n\x04nsid\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x12\n\nblock_size\x18\x05 \x01(\r\x12\x11\n\x04uuid\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x15\n\x08\x61nagrpid\x18\x07 \x01(\x05H\x02\x88\x01\x01\x12\x19\n\x0c\x63reate_image\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x11\n\x04size\x18\t \x01(\rH\x04\x88\x01\x01\x42\x07\n\x05_nsidB\x07\n\x05_uuidB\x0b\n\t_anagrpidB\x0f\n\r_create_imageB\x07\n\x05_size\"w\n\x14namespace_resize_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x11\n\x04nsid\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04uuid\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x10\n\x08new_size\x18\x04 \x01(\rB\x07\n\x05_nsidB\x07\n\x05_uuid\"k\n\x1anamespace_get_io_stats_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x11\n\x04nsid\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04uuid\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nsidB\x07\n\x05_uuid\"\xcc\x02\n\x15namespace_set_qos_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x11\n\x04nsid\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04uuid\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1e\n\x11rw_ios_per_second\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12!\n\x14rw_mbytes_per_second\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12 \n\x13r_mbytes_per_second\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12 \n\x13w_mbytes_per_second\x18\x07 \x01(\x04H\x05\x88\x01\x01\x42\x07\n\x05_nsidB\x07\n\x05_uuidB\x14\n\x12_rw_ios_per_secondB\x17\n\x15_rw_mbytes_per_secondB\x16\n\x14_r_mbytes_per_secondB\x16\n\x14_w_mbytes_per_second\"\x8c\x01\n)namespace_change_load_balancing_group_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x11\n\x04nsid\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04uuid\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x10\n\x08\x61nagrpid\x18\x04 \x01(\x05\x42\x07\n\x05_nsidB\x07\n\x05_uuid\"e\n\x14namespace_delete_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x11\n\x04nsid\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04uuid\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nsidB\x07\n\x05_uuid\"\x9e\x01\n\x14\x63reate_subsystem_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x15\n\rserial_number\x18\x02 \x01(\t\x12\x1b\n\x0emax_namespaces\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x15\n\rana_reporting\x18\x04 \x01(\x08\x12\x11\n\tenable_ha\x18\x05 \x01(\x08\x42\x11\n\x0f_max_namespaces\"K\n\x14\x64\x65lete_subsystem_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"`\n\x13list_namespaces_req\x12\x11\n\tsubsystem\x18\x01 \x01(\t\x12\x11\n\x04nsid\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04uuid\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nsidB\x07\n\x05_uuid\"7\n\x0c\x61\x64\x64_host_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x10\n\x08host_nqn\x18\x02 \x01(\t\":\n\x0fremove_host_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x10\n\x08host_nqn\x18\x02 \x01(\t\"#\n\x0elist_hosts_req\x12\x11\n\tsubsystem\x18\x01 \x01(\t\")\n\x14list_connections_req\x12\x11\n\tsubsystem\x18\x01 \x01(\t\"\x86\x02\n\x13\x63reate_listener_req\x12\x0b\n\x03nqn\x18\x01 \x01(\t\x12\x14\n\x0cgateway_name\x18\x02 \x01(\t\x12\x0e\n\x06traddr\x18\x03 \x01(\t\x12#\n\x06trtype\x18\x04 \x01(\x0e\x32\x0e.TransportTypeH\x00\x88\x01\x01\x12#\n\x06\x61\x64rfam\x18\x05 \x01(\x0e\x32\x0e.AddressFamilyH\x01\x88\x01\x01\x12\x14\n\x07trsvcid\x18\x06 \x01(\rH\x02\x88\x01\x01\x12(\n\rauto_ha_state\x18\x07 \x01(\x0e\x32\x0c.AutoHAStateH\x03\x88\x01\x01\x42\t\n\x07_trtypeB\t\n\x07_adrfamB\n\n\x08_trsvcidB\x10\n\x0e_auto_ha_state\"\xca\x01\n\x13\x64\x65lete_listener_req\x12\x0b\n\x03nqn\x18\x01 \x01(\t\x12\x14\n\x0cgateway_name\x18\x02 \x01(\t\x12\x0e\n\x06traddr\x18\x03 \x01(\t\x12#\n\x06trtype\x18\x04 \x01(\x0e\x32\x0e.TransportTypeH\x00\x88\x01\x01\x12#\n\x06\x61\x64rfam\x18\x05 \x01(\x0e\x32\x0e.AddressFamilyH\x01\x88\x01\x01\x12\x14\n\x07trsvcid\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\t\n\x07_trtypeB\t\n\x07_adrfamB\n\n\x08_trsvcid\"\'\n\x12list_listeners_req\x12\x11\n\tsubsystem\x18\x01 \x01(\t\"q\n\x13list_subsystems_req\x12\x1a\n\rsubsystem_nqn\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rserial_number\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x10\n\x0e_subsystem_nqnB\x10\n\x0e_serial_number\"\'\n%get_spdk_nvmf_log_flags_and_level_req\"\x1c\n\x1a\x64isable_spdk_nvmf_logs_req\"~\n\x16set_spdk_nvmf_logs_req\x12!\n\tlog_level\x18\x01 \x01(\x0e\x32\t.LogLevelH\x00\x88\x01\x01\x12#\n\x0bprint_level\x18\x02 \x01(\x0e\x32\t.LogLevelH\x01\x88\x01\x01\x42\x0c\n\n_log_levelB\x0e\n\x0c_print_level\"@\n\x14get_gateway_info_req\x12\x18\n\x0b\x63li_version\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_cli_version\"G\n\x0b\x62\x64\x65v_status\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x11\n\tbdev_name\x18\x03 \x01(\t\"3\n\nreq_status\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\"B\n\x0bnsid_status\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x0c\n\x04nsid\x18\x03 \x01(\r\"X\n\x0fsubsystems_info\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x1e\n\nsubsystems\x18\x03 \x03(\x0b\x32\n.subsystem\"\xaa\x01\n\tsubsystem\x12\x0b\n\x03nqn\x18\x01 \x01(\t\x12\x11\n\tenable_ha\x18\x02 \x01(\x08\x12\x15\n\rserial_number\x18\x03 \x01(\t\x12\x14\n\x0cmodel_number\x18\x04 \x01(\t\x12\x12\n\nmin_cntlid\x18\x05 \x01(\r\x12\x12\n\nmax_cntlid\x18\x06 \x01(\r\x12\x17\n\x0fnamespace_count\x18\x07 \x01(\r\x12\x0f\n\x07subtype\x18\x08 \x01(\t\"\xbf\x01\n\x0cgateway_info\x12\x13\n\x0b\x63li_version\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05group\x18\x04 \x01(\t\x12\x0c\n\x04\x61\x64\x64r\x18\x05 \x01(\t\x12\x0c\n\x04port\x18\x06 \x01(\t\x12\x13\n\x0b\x62ool_status\x18\x07 \x01(\x08\x12\x0e\n\x06status\x18\x08 \x01(\x05\x12\x15\n\rerror_message\x18\t \x01(\t\x12\x14\n\x0cspdk_version\x18\n \x01(\t\"E\n\x0b\x63li_version\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\"D\n\ngw_version\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\"\x86\x01\n\rlistener_info\x12\x14\n\x0cgateway_name\x18\x01 \x01(\t\x12\x1e\n\x06trtype\x18\x02 \x01(\x0e\x32\x0e.TransportType\x12\x1e\n\x06\x61\x64rfam\x18\x03 \x01(\x0e\x32\x0e.AddressFamily\x12\x0e\n\x06traddr\x18\x04 \x01(\t\x12\x0f\n\x07trsvcid\x18\x05 \x01(\r\"Z\n\x0elisteners_info\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12!\n\tlisteners\x18\x03 \x03(\x0b\x32\x0e.listener_info\"\x13\n\x04host\x12\x0b\n\x03nqn\x18\x01 \x01(\t\"x\n\nhosts_info\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x16\n\x0e\x61llow_any_host\x18\x03 \x01(\x08\x12\x15\n\rsubsystem_nqn\x18\x04 \x01(\t\x12\x14\n\x05hosts\x18\x05 \x03(\x0b\x32\x05.host\"\xba\x01\n\nconnection\x12\x0b\n\x03nqn\x18\x01 \x01(\t\x12\x0e\n\x06traddr\x18\x02 \x01(\t\x12\x0f\n\x07trsvcid\x18\x03 \x01(\r\x12\x1e\n\x06trtype\x18\x04 \x01(\x0e\x32\x0e.TransportType\x12\x1e\n\x06\x61\x64rfam\x18\x05 \x01(\x0e\x32\x0e.AddressFamily\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12\x14\n\x0cqpairs_count\x18\x07 \x01(\x05\x12\x15\n\rcontroller_id\x18\x08 \x01(\x05\"r\n\x10\x63onnections_info\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x15\n\rsubsystem_nqn\x18\x03 \x01(\t\x12 \n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\x0b.connection\"\xa6\x02\n\tnamespace\x12\x0c\n\x04nsid\x18\x01 \x01(\r\x12\x11\n\tbdev_name\x18\x02 \x01(\t\x12\x16\n\x0erbd_image_name\x18\x03 \x01(\t\x12\x15\n\rrbd_pool_name\x18\x04 \x01(\t\x12\x1c\n\x14load_balancing_group\x18\x05 \x01(\r\x12\x12\n\nblock_size\x18\x06 \x01(\r\x12\x16\n\x0erbd_image_size\x18\x07 \x01(\x04\x12\x0c\n\x04uuid\x18\x08 \x01(\t\x12\x19\n\x11rw_ios_per_second\x18\t \x01(\x04\x12\x1c\n\x14rw_mbytes_per_second\x18\n \x01(\x04\x12\x1b\n\x13r_mbytes_per_second\x18\x0b \x01(\x04\x12\x1b\n\x13w_mbytes_per_second\x18\x0c \x01(\x04\"o\n\x0fnamespaces_info\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x15\n\rsubsystem_nqn\x18\x03 \x01(\t\x12\x1e\n\nnamespaces\x18\x04 \x03(\x0b\x32\n.namespace\"\xb7\x05\n\x17namespace_io_stats_info\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x15\n\rsubsystem_nqn\x18\x03 \x01(\t\x12\x0c\n\x04nsid\x18\x04 \x01(\r\x12\x0c\n\x04uuid\x18\x05 \x01(\t\x12\x11\n\tbdev_name\x18\x06 \x01(\t\x12\x11\n\ttick_rate\x18\x07 \x01(\x04\x12\r\n\x05ticks\x18\x08 \x01(\x04\x12\x12\n\nbytes_read\x18\t \x01(\x04\x12\x14\n\x0cnum_read_ops\x18\n \x01(\x04\x12\x15\n\rbytes_written\x18\x0b \x01(\x04\x12\x15\n\rnum_write_ops\x18\x0c \x01(\x04\x12\x16\n\x0e\x62ytes_unmapped\x18\r \x01(\x04\x12\x15\n\rnum_unmap_ops\x18\x0e \x01(\x04\x12\x1a\n\x12read_latency_ticks\x18\x0f \x01(\x04\x12\x1e\n\x16max_read_latency_ticks\x18\x10 \x01(\x04\x12\x1e\n\x16min_read_latency_ticks\x18\x11 \x01(\x04\x12\x1b\n\x13write_latency_ticks\x18\x12 \x01(\x04\x12\x1f\n\x17max_write_latency_ticks\x18\x13 \x01(\x04\x12\x1f\n\x17min_write_latency_ticks\x18\x14 \x01(\x04\x12\x1b\n\x13unmap_latency_ticks\x18\x15 \x01(\x04\x12\x1f\n\x17max_unmap_latency_ticks\x18\x16 \x01(\x04\x12\x1f\n\x17min_unmap_latency_ticks\x18\x17 \x01(\x04\x12\x1a\n\x12\x63opy_latency_ticks\x18\x18 \x01(\x04\x12\x1e\n\x16max_copy_latency_ticks\x18\x19 \x01(\x04\x12\x1e\n\x16min_copy_latency_ticks\x18\x1a \x01(\x04\x12\x10\n\x08io_error\x18\x1b \x03(\r\"3\n\x12spdk_log_flag_info\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"\xba\x01\n\"spdk_nvmf_log_flags_and_level_info\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12+\n\x0envmf_log_flags\x18\x03 \x03(\x0b\x32\x13.spdk_log_flag_info\x12\x1c\n\tlog_level\x18\x04 \x01(\x0e\x32\t.LogLevel\x12\"\n\x0flog_print_level\x18\x05 \x01(\x0e\x32\t.LogLevel*^\n\rTransportType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04RDMA\x10\x01\x12\x06\n\x02\x46\x43\x10\x02\x12\x07\n\x03TCP\x10\x03\x12\t\n\x04PCIE\x10\x80\x02\x12\r\n\x08VFIOUSER\x10\x80\x08\x12\x0b\n\x06\x43USTOM\x10\x80 *@\n\rAddressFamily\x12\x0b\n\x07invalid\x10\x00\x12\x08\n\x04ipv4\x10\x01\x12\x08\n\x04ipv6\x10\x02\x12\x06\n\x02ib\x10\x03\x12\x06\n\x02\x66\x63\x10\x04*Q\n\x08LogLevel\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\n\n\x06NOTICE\x10\x03\x12\x08\n\x04INFO\x10\x04\x12\t\n\x05\x44\x45\x42UG\x10\x05*A\n\x0b\x41utoHAState\x12\x11\n\rAUTO_HA_UNSET\x10\x00\x12\x0f\n\x0b\x41UTO_HA_OFF\x10\x01\x12\x0e\n\nAUTO_HA_ON\x10\x02\x32\xc0\n\n\x07Gateway\x12\x33\n\rnamespace_add\x12\x12.namespace_add_req\x1a\x0c.nsid_status\"\x00\x12\x38\n\x10\x63reate_subsystem\x12\x15.create_subsystem_req\x1a\x0b.req_status\"\x00\x12\x38\n\x10\x64\x65lete_subsystem\x12\x15.delete_subsystem_req\x1a\x0b.req_status\"\x00\x12;\n\x0flist_namespaces\x12\x14.list_namespaces_req\x1a\x10.namespaces_info\"\x00\x12\x38\n\x10namespace_resize\x12\x15.namespace_resize_req\x1a\x0b.req_status\"\x00\x12Q\n\x16namespace_get_io_stats\x12\x1b.namespace_get_io_stats_req\x1a\x18.namespace_io_stats_info\"\x00\x12\x41\n\x18namespace_set_qos_limits\x12\x16.namespace_set_qos_req\x1a\x0b.req_status\"\x00\x12\x62\n%namespace_change_load_balancing_group\x12*.namespace_change_load_balancing_group_req\x1a\x0b.req_status\"\x00\x12\x38\n\x10namespace_delete\x12\x15.namespace_delete_req\x1a\x0b.req_status\"\x00\x12(\n\x08\x61\x64\x64_host\x12\r.add_host_req\x1a\x0b.req_status\"\x00\x12.\n\x0bremove_host\x12\x10.remove_host_req\x1a\x0b.req_status\"\x00\x12,\n\nlist_hosts\x12\x0f.list_hosts_req\x1a\x0b.hosts_info\"\x00\x12>\n\x10list_connections\x12\x15.list_connections_req\x1a\x11.connections_info\"\x00\x12\x36\n\x0f\x63reate_listener\x12\x14.create_listener_req\x1a\x0b.req_status\"\x00\x12\x36\n\x0f\x64\x65lete_listener\x12\x14.delete_listener_req\x1a\x0b.req_status\"\x00\x12\x38\n\x0elist_listeners\x12\x13.list_listeners_req\x1a\x0f.listeners_info\"\x00\x12;\n\x0flist_subsystems\x12\x14.list_subsystems_req\x1a\x10.subsystems_info\"\x00\x12r\n!get_spdk_nvmf_log_flags_and_level\x12&.get_spdk_nvmf_log_flags_and_level_req\x1a#.spdk_nvmf_log_flags_and_level_info\"\x00\x12\x44\n\x16\x64isable_spdk_nvmf_logs\x12\x1b.disable_spdk_nvmf_logs_req\x1a\x0b.req_status\"\x00\x12<\n\x12set_spdk_nvmf_logs\x12\x17.set_spdk_nvmf_logs_req\x1a\x0b.req_status\"\x00\x12:\n\x10get_gateway_info\x12\x15.get_gateway_info_req\x1a\r.gateway_info\"\x00\x62\x06proto3'
+)
 
+_TRANSPORTTYPE = _descriptor.EnumDescriptor(
+    name='TransportType',
+    full_name='TransportType',
+    filename=None,
+    file=DESCRIPTOR,
+    create_key=_descriptor._internal_create_key,
+    values=[
+        _descriptor.EnumValueDescriptor(
+            name='INVALID', index=0, number=0,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='RDMA', index=1, number=1,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='FC', index=2, number=2,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='TCP', index=3, number=3,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='PCIE', index=4, number=256,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='VFIOUSER', index=5, number=1024,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='CUSTOM', index=6, number=4096,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+    ],
+    containing_type=None,
+    serialized_options=None,
+    serialized_start=5347,
+    serialized_end=5441,
+)
+_sym_db.RegisterEnumDescriptor(_TRANSPORTTYPE)
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rgateway.proto\"\x83\x01\n\x0f\x63reate_bdev_req\x12\x11\n\tbdev_name\x18\x01 \x01(\t\x12\x15\n\rrbd_pool_name\x18\x02 \x01(\t\x12\x16\n\x0erbd_image_name\x18\x03 \x01(\t\x12\x12\n\nblock_size\x18\x04 \x01(\x05\x12\x11\n\x04uuid\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_uuid\"6\n\x0fresize_bdev_req\x12\x11\n\tbdev_name\x18\x01 \x01(\t\x12\x10\n\x08new_size\x18\x02 \x01(\x05\"3\n\x0f\x64\x65lete_bdev_req\x12\x11\n\tbdev_name\x18\x01 \x01(\t\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\"\x86\x01\n\x14\x63reate_subsystem_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x15\n\rserial_number\x18\x02 \x01(\t\x12\x16\n\x0emax_namespaces\x18\x03 \x01(\x05\x12\x15\n\rana_reporting\x18\x04 \x01(\x08\x12\x11\n\tenable_ha\x18\x05 \x01(\x08\"-\n\x14\x64\x65lete_subsystem_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\"}\n\x11\x61\x64\x64_namespace_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x11\n\tbdev_name\x18\x02 \x01(\t\x12\x11\n\x04nsid\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08\x61nagrpid\x18\x04 \x01(\x05H\x01\x88\x01\x01\x42\x07\n\x05_nsidB\x0b\n\t_anagrpid\";\n\x14remove_namespace_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x0c\n\x04nsid\x18\x02 \x01(\r\"7\n\x0c\x61\x64\x64_host_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x10\n\x08host_nqn\x18\x02 \x01(\t\":\n\x0fremove_host_req\x12\x15\n\rsubsystem_nqn\x18\x01 \x01(\t\x12\x10\n\x08host_nqn\x18\x02 \x01(\t\"\x99\x01\n\x13\x63reate_listener_req\x12\x0b\n\x03nqn\x18\x01 \x01(\t\x12\x14\n\x0cgateway_name\x18\x02 \x01(\t\x12\x1e\n\x06trtype\x18\x03 \x01(\x0e\x32\x0e.TransportType\x12\x1e\n\x06\x61\x64rfam\x18\x04 \x01(\x0e\x32\x0e.AddressFamily\x12\x0e\n\x06traddr\x18\x05 \x01(\t\x12\x0f\n\x07trsvcid\x18\x06 \x01(\t\"\x99\x01\n\x13\x64\x65lete_listener_req\x12\x0b\n\x03nqn\x18\x01 \x01(\t\x12\x14\n\x0cgateway_name\x18\x02 \x01(\t\x12\x1e\n\x06trtype\x18\x03 \x01(\x0e\x32\x0e.TransportType\x12\x1e\n\x06\x61\x64rfam\x18\x04 \x01(\x0e\x32\x0e.AddressFamily\x12\x0e\n\x06traddr\x18\x05 \x01(\t\x12\x0f\n\x07trsvcid\x18\x06 \x01(\t\"\x14\n\x12get_subsystems_req\"\'\n%get_spdk_nvmf_log_flags_and_level_req\"\x1c\n\x1a\x64isable_spdk_nvmf_logs_req\"~\n\x16set_spdk_nvmf_logs_req\x12!\n\tlog_level\x18\x01 \x01(\x0e\x32\t.LogLevelH\x00\x88\x01\x01\x12#\n\x0bprint_level\x18\x02 \x01(\x0e\x32\t.LogLevelH\x01\x88\x01\x01\x42\x0c\n\n_log_levelB\x0e\n\x0c_print_level\"+\n\x14get_gateway_info_req\x12\x13\n\x0b\x63li_version\x18\x01 \x01(\t\")\n\x04\x62\x64\x65v\x12\x11\n\tbdev_name\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\x08\"\x1c\n\nreq_status\x12\x0e\n\x06status\x18\x01 \x01(\x08\"+\n\x0bnsid_status\x12\x0c\n\x04nsid\x18\x01 \x01(\r\x12\x0e\n\x06status\x18\x02 \x01(\x08\"1\n\x0fsubsystems_info\x12\x1e\n\nsubsystems\x18\x01 \x03(\x0b\x32\n.subsystem\"\xfc\x02\n\tsubsystem\x12\x0b\n\x03nqn\x18\x01 \x01(\t\x12\x0f\n\x07subtype\x18\x02 \x01(\t\x12)\n\x10listen_addresses\x18\x03 \x03(\x0b\x32\x0f.listen_address\x12\x14\n\x05hosts\x18\x04 \x03(\x0b\x32\x05.host\x12\x16\n\x0e\x61llow_any_host\x18\x05 \x01(\x08\x12\x1a\n\rserial_number\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cmodel_number\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0emax_namespaces\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nmin_cntlid\x18\t \x01(\rH\x03\x88\x01\x01\x12\x17\n\nmax_cntlid\x18\n \x01(\rH\x04\x88\x01\x01\x12\x1e\n\nnamespaces\x18\x0b \x03(\x0b\x32\n.namespaceB\x10\n\x0e_serial_numberB\x0f\n\r_model_numberB\x11\n\x0f_max_namespacesB\r\n\x0b_min_cntlidB\r\n\x0b_max_cntlid\"\xa5\x01\n\x0cgateway_info\x12\x13\n\x0b\x63li_version\x18\x01 \x01(\t\x12\x17\n\x0fgateway_version\x18\x02 \x01(\t\x12\x14\n\x0cgateway_name\x18\x03 \x01(\t\x12\x15\n\rgateway_group\x18\x04 \x01(\t\x12\x14\n\x0cgateway_addr\x18\x05 \x01(\t\x12\x14\n\x0cgateway_port\x18\x06 \x01(\t\x12\x0e\n\x06status\x18\x07 \x01(\x08\"\x84\x01\n\x0elisten_address\x12\x11\n\ttransport\x18\x01 \x01(\t\x12\x1e\n\x06trtype\x18\x02 \x01(\x0e\x32\x0e.TransportType\x12\x1e\n\x06\x61\x64rfam\x18\x03 \x01(\x0e\x32\x0e.AddressFamily\x12\x0e\n\x06traddr\x18\x04 \x01(\t\x12\x0f\n\x07trsvcid\x18\x05 \x01(\t\"\x13\n\x04host\x12\x0b\n\x03nqn\x18\x01 \x01(\t\"\xab\x01\n\tnamespace\x12\x0c\n\x04nsid\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\tbdev_name\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05nguid\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04uuid\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x15\n\x08\x61nagrpid\x18\x06 \x01(\rH\x03\x88\x01\x01\x42\x0c\n\n_bdev_nameB\x08\n\x06_nguidB\x07\n\x05_uuidB\x0b\n\t_anagrpid\"9\n\"spdk_nvmf_log_flags_and_level_info\x12\x13\n\x0b\x66lags_level\x18\x01 \x01(\t*^\n\rTransportType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04RDMA\x10\x01\x12\x06\n\x02\x46\x43\x10\x02\x12\x07\n\x03TCP\x10\x03\x12\t\n\x04PCIE\x10\x80\x02\x12\r\n\x08VFIOUSER\x10\x80\x08\x12\x0b\n\x06\x43USTOM\x10\x80 *@\n\rAddressFamily\x12\x0b\n\x07invalid\x10\x00\x12\x08\n\x04ipv4\x10\x01\x12\x08\n\x04ipv6\x10\x02\x12\x06\n\x02ib\x10\x03\x12\x06\n\x02\x66\x63\x10\x04*N\n\x08LogLevel\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x08\n\x04WARN\x10\x02\x12\n\n\x06NOTICE\x10\x03\x12\x08\n\x04INFO\x10\x04\x12\t\n\x05\x44\x45\x42UG\x10\x05\x32\xaf\x07\n\x07Gateway\x12(\n\x0b\x63reate_bdev\x12\x10.create_bdev_req\x1a\x05.bdev\"\x00\x12.\n\x0bresize_bdev\x12\x10.resize_bdev_req\x1a\x0b.req_status\"\x00\x12.\n\x0b\x64\x65lete_bdev\x12\x10.delete_bdev_req\x1a\x0b.req_status\"\x00\x12\x38\n\x10\x63reate_subsystem\x12\x15.create_subsystem_req\x1a\x0b.req_status\"\x00\x12\x38\n\x10\x64\x65lete_subsystem\x12\x15.delete_subsystem_req\x1a\x0b.req_status\"\x00\x12\x33\n\radd_namespace\x12\x12.add_namespace_req\x1a\x0c.nsid_status\"\x00\x12\x38\n\x10remove_namespace\x12\x15.remove_namespace_req\x1a\x0b.req_status\"\x00\x12(\n\x08\x61\x64\x64_host\x12\r.add_host_req\x1a\x0b.req_status\"\x00\x12.\n\x0bremove_host\x12\x10.remove_host_req\x1a\x0b.req_status\"\x00\x12\x36\n\x0f\x63reate_listener\x12\x14.create_listener_req\x1a\x0b.req_status\"\x00\x12\x36\n\x0f\x64\x65lete_listener\x12\x14.delete_listener_req\x1a\x0b.req_status\"\x00\x12\x39\n\x0eget_subsystems\x12\x13.get_subsystems_req\x1a\x10.subsystems_info\"\x00\x12r\n!get_spdk_nvmf_log_flags_and_level\x12&.get_spdk_nvmf_log_flags_and_level_req\x1a#.spdk_nvmf_log_flags_and_level_info\"\x00\x12\x44\n\x16\x64isable_spdk_nvmf_logs\x12\x1b.disable_spdk_nvmf_logs_req\x1a\x0b.req_status\"\x00\x12<\n\x12set_spdk_nvmf_logs\x12\x17.set_spdk_nvmf_logs_req\x1a\x0b.req_status\"\x00\x12:\n\x10get_gateway_info\x12\x15.get_gateway_info_req\x1a\r.gateway_info\"\x00\x62\x06proto3')
-
-_TRANSPORTTYPE = DESCRIPTOR.enum_types_by_name['TransportType']
 TransportType = enum_type_wrapper.EnumTypeWrapper(_TRANSPORTTYPE)
-_ADDRESSFAMILY = DESCRIPTOR.enum_types_by_name['AddressFamily']
+_ADDRESSFAMILY = _descriptor.EnumDescriptor(
+    name='AddressFamily',
+    full_name='AddressFamily',
+    filename=None,
+    file=DESCRIPTOR,
+    create_key=_descriptor._internal_create_key,
+    values=[
+        _descriptor.EnumValueDescriptor(
+            name='invalid', index=0, number=0,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='ipv4', index=1, number=1,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='ipv6', index=2, number=2,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='ib', index=3, number=3,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='fc', index=4, number=4,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+    ],
+    containing_type=None,
+    serialized_options=None,
+    serialized_start=5443,
+    serialized_end=5507,
+)
+_sym_db.RegisterEnumDescriptor(_ADDRESSFAMILY)
+
 AddressFamily = enum_type_wrapper.EnumTypeWrapper(_ADDRESSFAMILY)
-_LOGLEVEL = DESCRIPTOR.enum_types_by_name['LogLevel']
+_LOGLEVEL = _descriptor.EnumDescriptor(
+    name='LogLevel',
+    full_name='LogLevel',
+    filename=None,
+    file=DESCRIPTOR,
+    create_key=_descriptor._internal_create_key,
+    values=[
+        _descriptor.EnumValueDescriptor(
+            name='DISABLED', index=0, number=0,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='ERROR', index=1, number=1,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='WARNING', index=2, number=2,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='NOTICE', index=3, number=3,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='INFO', index=4, number=4,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='DEBUG', index=5, number=5,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+    ],
+    containing_type=None,
+    serialized_options=None,
+    serialized_start=5509,
+    serialized_end=5590,
+)
+_sym_db.RegisterEnumDescriptor(_LOGLEVEL)
+
 LogLevel = enum_type_wrapper.EnumTypeWrapper(_LOGLEVEL)
+_AUTOHASTATE = _descriptor.EnumDescriptor(
+    name='AutoHAState',
+    full_name='AutoHAState',
+    filename=None,
+    file=DESCRIPTOR,
+    create_key=_descriptor._internal_create_key,
+    values=[
+        _descriptor.EnumValueDescriptor(
+            name='AUTO_HA_UNSET', index=0, number=0,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='AUTO_HA_OFF', index=1, number=1,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+        _descriptor.EnumValueDescriptor(
+            name='AUTO_HA_ON', index=2, number=2,
+            serialized_options=None,
+            type=None,
+            create_key=_descriptor._internal_create_key),
+    ],
+    containing_type=None,
+    serialized_options=None,
+    serialized_start=5592,
+    serialized_end=5657,
+)
+_sym_db.RegisterEnumDescriptor(_AUTOHASTATE)
+
+AutoHAState = enum_type_wrapper.EnumTypeWrapper(_AUTOHASTATE)
 INVALID = 0
 RDMA = 1
 FC = 2
@@ -37,282 +205,3097 @@ ib = 3
 fc = 4
 DISABLED = 0
 ERROR = 1
-WARN = 2
+WARNING = 2
 NOTICE = 3
 INFO = 4
 DEBUG = 5
+AUTO_HA_UNSET = 0
+AUTO_HA_OFF = 1
+AUTO_HA_ON = 2
+
+
+_NAMESPACE_ADD_REQ = _descriptor.Descriptor(
+    name='namespace_add_req',
+    full_name='namespace_add_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='rbd_pool_name', full_name='namespace_add_req.rbd_pool_name', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rbd_image_name', full_name='namespace_add_req.rbd_image_name', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespace_add_req.subsystem_nqn', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace_add_req.nsid', index=3,
+            number=4, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='block_size', full_name='namespace_add_req.block_size', index=4,
+            number=5, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace_add_req.uuid', index=5,
+            number=6, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='anagrpid', full_name='namespace_add_req.anagrpid', index=6,
+            number=7, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='create_image', full_name='namespace_add_req.create_image', index=7,
+            number=8, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='size', full_name='namespace_add_req.size', index=8,
+            number=9, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_nsid', full_name='namespace_add_req._nsid',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_uuid', full_name='namespace_add_req._uuid',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_anagrpid', full_name='namespace_add_req._anagrpid',
+            index=2, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_create_image', full_name='namespace_add_req._create_image',
+            index=3, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_size', full_name='namespace_add_req._size',
+            index=4, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=18,
+    serialized_end=291,
+)
+
+
+_NAMESPACE_RESIZE_REQ = _descriptor.Descriptor(
+    name='namespace_resize_req',
+    full_name='namespace_resize_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespace_resize_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace_resize_req.nsid', index=1,
+            number=2, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace_resize_req.uuid', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='new_size', full_name='namespace_resize_req.new_size', index=3,
+            number=4, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_nsid', full_name='namespace_resize_req._nsid',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_uuid', full_name='namespace_resize_req._uuid',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=293,
+    serialized_end=412,
+)
+
+
+_NAMESPACE_GET_IO_STATS_REQ = _descriptor.Descriptor(
+    name='namespace_get_io_stats_req',
+    full_name='namespace_get_io_stats_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespace_get_io_stats_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace_get_io_stats_req.nsid', index=1,
+            number=2, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace_get_io_stats_req.uuid', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_nsid', full_name='namespace_get_io_stats_req._nsid',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_uuid', full_name='namespace_get_io_stats_req._uuid',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=414,
+    serialized_end=521,
+)
+
+
+_NAMESPACE_SET_QOS_REQ = _descriptor.Descriptor(
+    name='namespace_set_qos_req',
+    full_name='namespace_set_qos_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespace_set_qos_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace_set_qos_req.nsid', index=1,
+            number=2, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace_set_qos_req.uuid', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rw_ios_per_second', full_name='namespace_set_qos_req.rw_ios_per_second', index=3,
+            number=4, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rw_mbytes_per_second', full_name='namespace_set_qos_req.rw_mbytes_per_second', index=4,
+            number=5, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='r_mbytes_per_second', full_name='namespace_set_qos_req.r_mbytes_per_second', index=5,
+            number=6, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='w_mbytes_per_second', full_name='namespace_set_qos_req.w_mbytes_per_second', index=6,
+            number=7, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_nsid', full_name='namespace_set_qos_req._nsid',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_uuid', full_name='namespace_set_qos_req._uuid',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_rw_ios_per_second', full_name='namespace_set_qos_req._rw_ios_per_second',
+            index=2, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_rw_mbytes_per_second', full_name='namespace_set_qos_req._rw_mbytes_per_second',
+            index=3, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_r_mbytes_per_second', full_name='namespace_set_qos_req._r_mbytes_per_second',
+            index=4, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_w_mbytes_per_second', full_name='namespace_set_qos_req._w_mbytes_per_second',
+            index=5, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=524,
+    serialized_end=856,
+)
+
+
+_NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ = _descriptor.Descriptor(
+    name='namespace_change_load_balancing_group_req',
+    full_name='namespace_change_load_balancing_group_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespace_change_load_balancing_group_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace_change_load_balancing_group_req.nsid', index=1,
+            number=2, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace_change_load_balancing_group_req.uuid', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='anagrpid', full_name='namespace_change_load_balancing_group_req.anagrpid', index=3,
+            number=4, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_nsid', full_name='namespace_change_load_balancing_group_req._nsid',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_uuid', full_name='namespace_change_load_balancing_group_req._uuid',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=859,
+    serialized_end=999,
+)
+
+
+_NAMESPACE_DELETE_REQ = _descriptor.Descriptor(
+    name='namespace_delete_req',
+    full_name='namespace_delete_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespace_delete_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace_delete_req.nsid', index=1,
+            number=2, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace_delete_req.uuid', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_nsid', full_name='namespace_delete_req._nsid',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_uuid', full_name='namespace_delete_req._uuid',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=1001,
+    serialized_end=1102,
+)
+
+
+_CREATE_SUBSYSTEM_REQ = _descriptor.Descriptor(
+    name='create_subsystem_req',
+    full_name='create_subsystem_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='create_subsystem_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='serial_number', full_name='create_subsystem_req.serial_number', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='max_namespaces', full_name='create_subsystem_req.max_namespaces', index=2,
+            number=3, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='ana_reporting', full_name='create_subsystem_req.ana_reporting', index=3,
+            number=4, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='enable_ha', full_name='create_subsystem_req.enable_ha', index=4,
+            number=5, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_max_namespaces', full_name='create_subsystem_req._max_namespaces',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=1105,
+    serialized_end=1263,
+)
+
+
+_DELETE_SUBSYSTEM_REQ = _descriptor.Descriptor(
+    name='delete_subsystem_req',
+    full_name='delete_subsystem_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='delete_subsystem_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='force', full_name='delete_subsystem_req.force', index=1,
+            number=2, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_force', full_name='delete_subsystem_req._force',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=1265,
+    serialized_end=1340,
+)
+
+
+_LIST_NAMESPACES_REQ = _descriptor.Descriptor(
+    name='list_namespaces_req',
+    full_name='list_namespaces_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem', full_name='list_namespaces_req.subsystem', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='list_namespaces_req.nsid', index=1,
+            number=2, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='list_namespaces_req.uuid', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_nsid', full_name='list_namespaces_req._nsid',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_uuid', full_name='list_namespaces_req._uuid',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=1342,
+    serialized_end=1438,
+)
+
+
+_ADD_HOST_REQ = _descriptor.Descriptor(
+    name='add_host_req',
+    full_name='add_host_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='add_host_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='host_nqn', full_name='add_host_req.host_nqn', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=1440,
+    serialized_end=1495,
+)
+
+
+_REMOVE_HOST_REQ = _descriptor.Descriptor(
+    name='remove_host_req',
+    full_name='remove_host_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='remove_host_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='host_nqn', full_name='remove_host_req.host_nqn', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=1497,
+    serialized_end=1555,
+)
+
+
+_LIST_HOSTS_REQ = _descriptor.Descriptor(
+    name='list_hosts_req',
+    full_name='list_hosts_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem', full_name='list_hosts_req.subsystem', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=1557,
+    serialized_end=1592,
+)
+
+
+_LIST_CONNECTIONS_REQ = _descriptor.Descriptor(
+    name='list_connections_req',
+    full_name='list_connections_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem', full_name='list_connections_req.subsystem', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=1594,
+    serialized_end=1635,
+)
+
+
+_CREATE_LISTENER_REQ = _descriptor.Descriptor(
+    name='create_listener_req',
+    full_name='create_listener_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='nqn', full_name='create_listener_req.nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='gateway_name', full_name='create_listener_req.gateway_name', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='traddr', full_name='create_listener_req.traddr', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trtype', full_name='create_listener_req.trtype', index=3,
+            number=4, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='adrfam', full_name='create_listener_req.adrfam', index=4,
+            number=5, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trsvcid', full_name='create_listener_req.trsvcid', index=5,
+            number=6, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='auto_ha_state', full_name='create_listener_req.auto_ha_state', index=6,
+            number=7, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_trtype', full_name='create_listener_req._trtype',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_adrfam', full_name='create_listener_req._adrfam',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_trsvcid', full_name='create_listener_req._trsvcid',
+            index=2, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_auto_ha_state', full_name='create_listener_req._auto_ha_state',
+            index=3, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=1638,
+    serialized_end=1900,
+)
+
+
+_DELETE_LISTENER_REQ = _descriptor.Descriptor(
+    name='delete_listener_req',
+    full_name='delete_listener_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='nqn', full_name='delete_listener_req.nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='gateway_name', full_name='delete_listener_req.gateway_name', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='traddr', full_name='delete_listener_req.traddr', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trtype', full_name='delete_listener_req.trtype', index=3,
+            number=4, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='adrfam', full_name='delete_listener_req.adrfam', index=4,
+            number=5, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trsvcid', full_name='delete_listener_req.trsvcid', index=5,
+            number=6, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_trtype', full_name='delete_listener_req._trtype',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_adrfam', full_name='delete_listener_req._adrfam',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_trsvcid', full_name='delete_listener_req._trsvcid',
+            index=2, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=1903,
+    serialized_end=2105,
+)
+
+
+_LIST_LISTENERS_REQ = _descriptor.Descriptor(
+    name='list_listeners_req',
+    full_name='list_listeners_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem', full_name='list_listeners_req.subsystem', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2107,
+    serialized_end=2146,
+)
+
+
+_LIST_SUBSYSTEMS_REQ = _descriptor.Descriptor(
+    name='list_subsystems_req',
+    full_name='list_subsystems_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='list_subsystems_req.subsystem_nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='serial_number', full_name='list_subsystems_req.serial_number', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_subsystem_nqn', full_name='list_subsystems_req._subsystem_nqn',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_serial_number', full_name='list_subsystems_req._serial_number',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=2148,
+    serialized_end=2261,
+)
+
+
+_GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ = _descriptor.Descriptor(
+    name='get_spdk_nvmf_log_flags_and_level_req',
+    full_name='get_spdk_nvmf_log_flags_and_level_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2263,
+    serialized_end=2302,
+)
+
+
+_DISABLE_SPDK_NVMF_LOGS_REQ = _descriptor.Descriptor(
+    name='disable_spdk_nvmf_logs_req',
+    full_name='disable_spdk_nvmf_logs_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2304,
+    serialized_end=2332,
+)
+
+
+_SET_SPDK_NVMF_LOGS_REQ = _descriptor.Descriptor(
+    name='set_spdk_nvmf_logs_req',
+    full_name='set_spdk_nvmf_logs_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='log_level', full_name='set_spdk_nvmf_logs_req.log_level', index=0,
+            number=1, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='print_level', full_name='set_spdk_nvmf_logs_req.print_level', index=1,
+            number=2, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_log_level', full_name='set_spdk_nvmf_logs_req._log_level',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+        _descriptor.OneofDescriptor(
+            name='_print_level', full_name='set_spdk_nvmf_logs_req._print_level',
+            index=1, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=2334,
+    serialized_end=2460,
+)
+
+
+_GET_GATEWAY_INFO_REQ = _descriptor.Descriptor(
+    name='get_gateway_info_req',
+    full_name='get_gateway_info_req',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='cli_version', full_name='get_gateway_info_req.cli_version', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+        _descriptor.OneofDescriptor(
+            name='_cli_version', full_name='get_gateway_info_req._cli_version',
+            index=0, containing_type=None,
+            create_key=_descriptor._internal_create_key,
+            fields=[]),
+    ],
+    serialized_start=2462,
+    serialized_end=2526,
+)
+
+
+_BDEV_STATUS = _descriptor.Descriptor(
+    name='bdev_status',
+    full_name='bdev_status',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='bdev_status.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='bdev_status.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='bdev_name', full_name='bdev_status.bdev_name', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2528,
+    serialized_end=2599,
+)
+
+
+_REQ_STATUS = _descriptor.Descriptor(
+    name='req_status',
+    full_name='req_status',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='req_status.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='req_status.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2601,
+    serialized_end=2652,
+)
+
 
+_NSID_STATUS = _descriptor.Descriptor(
+    name='nsid_status',
+    full_name='nsid_status',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='nsid_status.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='nsid_status.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='nsid_status.nsid', index=2,
+            number=3, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2654,
+    serialized_end=2720,
+)
 
-_CREATE_BDEV_REQ = DESCRIPTOR.message_types_by_name['create_bdev_req']
-_RESIZE_BDEV_REQ = DESCRIPTOR.message_types_by_name['resize_bdev_req']
-_DELETE_BDEV_REQ = DESCRIPTOR.message_types_by_name['delete_bdev_req']
-_CREATE_SUBSYSTEM_REQ = DESCRIPTOR.message_types_by_name['create_subsystem_req']
-_DELETE_SUBSYSTEM_REQ = DESCRIPTOR.message_types_by_name['delete_subsystem_req']
-_ADD_NAMESPACE_REQ = DESCRIPTOR.message_types_by_name['add_namespace_req']
-_REMOVE_NAMESPACE_REQ = DESCRIPTOR.message_types_by_name['remove_namespace_req']
-_ADD_HOST_REQ = DESCRIPTOR.message_types_by_name['add_host_req']
-_REMOVE_HOST_REQ = DESCRIPTOR.message_types_by_name['remove_host_req']
-_CREATE_LISTENER_REQ = DESCRIPTOR.message_types_by_name['create_listener_req']
-_DELETE_LISTENER_REQ = DESCRIPTOR.message_types_by_name['delete_listener_req']
-_GET_SUBSYSTEMS_REQ = DESCRIPTOR.message_types_by_name['get_subsystems_req']
-_GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ = DESCRIPTOR.message_types_by_name['get_spdk_nvmf_log_flags_and_level_req']
-_DISABLE_SPDK_NVMF_LOGS_REQ = DESCRIPTOR.message_types_by_name['disable_spdk_nvmf_logs_req']
-_SET_SPDK_NVMF_LOGS_REQ = DESCRIPTOR.message_types_by_name['set_spdk_nvmf_logs_req']
-_GET_GATEWAY_INFO_REQ = DESCRIPTOR.message_types_by_name['get_gateway_info_req']
-_BDEV = DESCRIPTOR.message_types_by_name['bdev']
-_REQ_STATUS = DESCRIPTOR.message_types_by_name['req_status']
-_NSID_STATUS = DESCRIPTOR.message_types_by_name['nsid_status']
-_SUBSYSTEMS_INFO = DESCRIPTOR.message_types_by_name['subsystems_info']
-_SUBSYSTEM = DESCRIPTOR.message_types_by_name['subsystem']
-_GATEWAY_INFO = DESCRIPTOR.message_types_by_name['gateway_info']
-_LISTEN_ADDRESS = DESCRIPTOR.message_types_by_name['listen_address']
-_HOST = DESCRIPTOR.message_types_by_name['host']
-_NAMESPACE = DESCRIPTOR.message_types_by_name['namespace']
-_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO = DESCRIPTOR.message_types_by_name['spdk_nvmf_log_flags_and_level_info']
-create_bdev_req = _reflection.GeneratedProtocolMessageType('create_bdev_req', (_message.Message,), {
-  'DESCRIPTOR' : _CREATE_BDEV_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:create_bdev_req)
-  })
-_sym_db.RegisterMessage(create_bdev_req)
-
-resize_bdev_req = _reflection.GeneratedProtocolMessageType('resize_bdev_req', (_message.Message,), {
-  'DESCRIPTOR' : _RESIZE_BDEV_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:resize_bdev_req)
-  })
-_sym_db.RegisterMessage(resize_bdev_req)
-
-delete_bdev_req = _reflection.GeneratedProtocolMessageType('delete_bdev_req', (_message.Message,), {
-  'DESCRIPTOR' : _DELETE_BDEV_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:delete_bdev_req)
-  })
-_sym_db.RegisterMessage(delete_bdev_req)
+
+_SUBSYSTEMS_INFO = _descriptor.Descriptor(
+    name='subsystems_info',
+    full_name='subsystems_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='subsystems_info.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='subsystems_info.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='subsystems', full_name='subsystems_info.subsystems', index=2,
+            number=3, type=11, cpp_type=10, label=3,
+            has_default_value=False, default_value=[],
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2722,
+    serialized_end=2810,
+)
+
+
+_SUBSYSTEM = _descriptor.Descriptor(
+    name='subsystem',
+    full_name='subsystem',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='nqn', full_name='subsystem.nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='enable_ha', full_name='subsystem.enable_ha', index=1,
+            number=2, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='serial_number', full_name='subsystem.serial_number', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='model_number', full_name='subsystem.model_number', index=3,
+            number=4, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='min_cntlid', full_name='subsystem.min_cntlid', index=4,
+            number=5, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='max_cntlid', full_name='subsystem.max_cntlid', index=5,
+            number=6, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='namespace_count', full_name='subsystem.namespace_count', index=6,
+            number=7, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='subtype', full_name='subsystem.subtype', index=7,
+            number=8, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2813,
+    serialized_end=2983,
+)
+
+
+_GATEWAY_INFO = _descriptor.Descriptor(
+    name='gateway_info',
+    full_name='gateway_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='cli_version', full_name='gateway_info.cli_version', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='version', full_name='gateway_info.version', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='name', full_name='gateway_info.name', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='group', full_name='gateway_info.group', index=3,
+            number=4, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='addr', full_name='gateway_info.addr', index=4,
+            number=5, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='port', full_name='gateway_info.port', index=5,
+            number=6, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='bool_status', full_name='gateway_info.bool_status', index=6,
+            number=7, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='status', full_name='gateway_info.status', index=7,
+            number=8, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='gateway_info.error_message', index=8,
+            number=9, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='spdk_version', full_name='gateway_info.spdk_version', index=9,
+            number=10, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=2986,
+    serialized_end=3177,
+)
+
+
+_CLI_VERSION = _descriptor.Descriptor(
+    name='cli_version',
+    full_name='cli_version',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='cli_version.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='cli_version.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='version', full_name='cli_version.version', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3179,
+    serialized_end=3248,
+)
+
+
+_GW_VERSION = _descriptor.Descriptor(
+    name='gw_version',
+    full_name='gw_version',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='gw_version.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='gw_version.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='version', full_name='gw_version.version', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3250,
+    serialized_end=3318,
+)
+
+
+_LISTENER_INFO = _descriptor.Descriptor(
+    name='listener_info',
+    full_name='listener_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='gateway_name', full_name='listener_info.gateway_name', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trtype', full_name='listener_info.trtype', index=1,
+            number=2, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='adrfam', full_name='listener_info.adrfam', index=2,
+            number=3, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='traddr', full_name='listener_info.traddr', index=3,
+            number=4, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trsvcid', full_name='listener_info.trsvcid', index=4,
+            number=5, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3321,
+    serialized_end=3455,
+)
+
+
+_LISTENERS_INFO = _descriptor.Descriptor(
+    name='listeners_info',
+    full_name='listeners_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='listeners_info.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='listeners_info.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='listeners', full_name='listeners_info.listeners', index=2,
+            number=3, type=11, cpp_type=10, label=3,
+            has_default_value=False, default_value=[],
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3457,
+    serialized_end=3547,
+)
+
+
+_HOST = _descriptor.Descriptor(
+    name='host',
+    full_name='host',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='nqn', full_name='host.nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3549,
+    serialized_end=3568,
+)
+
+
+_HOSTS_INFO = _descriptor.Descriptor(
+    name='hosts_info',
+    full_name='hosts_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='hosts_info.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='hosts_info.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='allow_any_host', full_name='hosts_info.allow_any_host', index=2,
+            number=3, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='hosts_info.subsystem_nqn', index=3,
+            number=4, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='hosts', full_name='hosts_info.hosts', index=4,
+            number=5, type=11, cpp_type=10, label=3,
+            has_default_value=False, default_value=[],
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3570,
+    serialized_end=3690,
+)
+
+
+_CONNECTION = _descriptor.Descriptor(
+    name='connection',
+    full_name='connection',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='nqn', full_name='connection.nqn', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='traddr', full_name='connection.traddr', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trsvcid', full_name='connection.trsvcid', index=2,
+            number=3, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='trtype', full_name='connection.trtype', index=3,
+            number=4, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='adrfam', full_name='connection.adrfam', index=4,
+            number=5, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='connected', full_name='connection.connected', index=5,
+            number=6, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='qpairs_count', full_name='connection.qpairs_count', index=6,
+            number=7, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='controller_id', full_name='connection.controller_id', index=7,
+            number=8, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3693,
+    serialized_end=3879,
+)
+
+
+_CONNECTIONS_INFO = _descriptor.Descriptor(
+    name='connections_info',
+    full_name='connections_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='connections_info.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='connections_info.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='connections_info.subsystem_nqn', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='connections', full_name='connections_info.connections', index=3,
+            number=4, type=11, cpp_type=10, label=3,
+            has_default_value=False, default_value=[],
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3881,
+    serialized_end=3995,
+)
+
+
+_NAMESPACE = _descriptor.Descriptor(
+    name='namespace',
+    full_name='namespace',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace.nsid', index=0,
+            number=1, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='bdev_name', full_name='namespace.bdev_name', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rbd_image_name', full_name='namespace.rbd_image_name', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rbd_pool_name', full_name='namespace.rbd_pool_name', index=3,
+            number=4, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='load_balancing_group', full_name='namespace.load_balancing_group', index=4,
+            number=5, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='block_size', full_name='namespace.block_size', index=5,
+            number=6, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rbd_image_size', full_name='namespace.rbd_image_size', index=6,
+            number=7, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace.uuid', index=7,
+            number=8, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rw_ios_per_second', full_name='namespace.rw_ios_per_second', index=8,
+            number=9, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='rw_mbytes_per_second', full_name='namespace.rw_mbytes_per_second', index=9,
+            number=10, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='r_mbytes_per_second', full_name='namespace.r_mbytes_per_second', index=10,
+            number=11, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='w_mbytes_per_second', full_name='namespace.w_mbytes_per_second', index=11,
+            number=12, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=3998,
+    serialized_end=4292,
+)
+
+
+_NAMESPACES_INFO = _descriptor.Descriptor(
+    name='namespaces_info',
+    full_name='namespaces_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='namespaces_info.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='namespaces_info.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespaces_info.subsystem_nqn', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='namespaces', full_name='namespaces_info.namespaces', index=3,
+            number=4, type=11, cpp_type=10, label=3,
+            has_default_value=False, default_value=[],
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=4294,
+    serialized_end=4405,
+)
+
+
+_NAMESPACE_IO_STATS_INFO = _descriptor.Descriptor(
+    name='namespace_io_stats_info',
+    full_name='namespace_io_stats_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='namespace_io_stats_info.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='namespace_io_stats_info.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='subsystem_nqn', full_name='namespace_io_stats_info.subsystem_nqn', index=2,
+            number=3, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nsid', full_name='namespace_io_stats_info.nsid', index=3,
+            number=4, type=13, cpp_type=3, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='uuid', full_name='namespace_io_stats_info.uuid', index=4,
+            number=5, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='bdev_name', full_name='namespace_io_stats_info.bdev_name', index=5,
+            number=6, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='tick_rate', full_name='namespace_io_stats_info.tick_rate', index=6,
+            number=7, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='ticks', full_name='namespace_io_stats_info.ticks', index=7,
+            number=8, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='bytes_read', full_name='namespace_io_stats_info.bytes_read', index=8,
+            number=9, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='num_read_ops', full_name='namespace_io_stats_info.num_read_ops', index=9,
+            number=10, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='bytes_written', full_name='namespace_io_stats_info.bytes_written', index=10,
+            number=11, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='num_write_ops', full_name='namespace_io_stats_info.num_write_ops', index=11,
+            number=12, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='bytes_unmapped', full_name='namespace_io_stats_info.bytes_unmapped', index=12,
+            number=13, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='num_unmap_ops', full_name='namespace_io_stats_info.num_unmap_ops', index=13,
+            number=14, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='read_latency_ticks', full_name='namespace_io_stats_info.read_latency_ticks', index=14,
+            number=15, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='max_read_latency_ticks', full_name='namespace_io_stats_info.max_read_latency_ticks', index=15,
+            number=16, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='min_read_latency_ticks', full_name='namespace_io_stats_info.min_read_latency_ticks', index=16,
+            number=17, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='write_latency_ticks', full_name='namespace_io_stats_info.write_latency_ticks', index=17,
+            number=18, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='max_write_latency_ticks', full_name='namespace_io_stats_info.max_write_latency_ticks', index=18,
+            number=19, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='min_write_latency_ticks', full_name='namespace_io_stats_info.min_write_latency_ticks', index=19,
+            number=20, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='unmap_latency_ticks', full_name='namespace_io_stats_info.unmap_latency_ticks', index=20,
+            number=21, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='max_unmap_latency_ticks', full_name='namespace_io_stats_info.max_unmap_latency_ticks', index=21,
+            number=22, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='min_unmap_latency_ticks', full_name='namespace_io_stats_info.min_unmap_latency_ticks', index=22,
+            number=23, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='copy_latency_ticks', full_name='namespace_io_stats_info.copy_latency_ticks', index=23,
+            number=24, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='max_copy_latency_ticks', full_name='namespace_io_stats_info.max_copy_latency_ticks', index=24,
+            number=25, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='min_copy_latency_ticks', full_name='namespace_io_stats_info.min_copy_latency_ticks', index=25,
+            number=26, type=4, cpp_type=4, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='io_error', full_name='namespace_io_stats_info.io_error', index=26,
+            number=27, type=13, cpp_type=3, label=3,
+            has_default_value=False, default_value=[],
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=4408,
+    serialized_end=5103,
+)
+
+
+_SPDK_LOG_FLAG_INFO = _descriptor.Descriptor(
+    name='spdk_log_flag_info',
+    full_name='spdk_log_flag_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='name', full_name='spdk_log_flag_info.name', index=0,
+            number=1, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='enabled', full_name='spdk_log_flag_info.enabled', index=1,
+            number=2, type=8, cpp_type=7, label=1,
+            has_default_value=False, default_value=False,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=5105,
+    serialized_end=5156,
+)
+
+
+_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO = _descriptor.Descriptor(
+    name='spdk_nvmf_log_flags_and_level_info',
+    full_name='spdk_nvmf_log_flags_and_level_info',
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    create_key=_descriptor._internal_create_key,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name='status', full_name='spdk_nvmf_log_flags_and_level_info.status', index=0,
+            number=1, type=5, cpp_type=1, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='error_message', full_name='spdk_nvmf_log_flags_and_level_info.error_message', index=1,
+            number=2, type=9, cpp_type=9, label=1,
+            has_default_value=False, default_value=b"".decode('utf-8'),
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='nvmf_log_flags', full_name='spdk_nvmf_log_flags_and_level_info.nvmf_log_flags', index=2,
+            number=3, type=11, cpp_type=10, label=3,
+            has_default_value=False, default_value=[],
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='log_level', full_name='spdk_nvmf_log_flags_and_level_info.log_level', index=3,
+            number=4, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+        _descriptor.FieldDescriptor(
+            name='log_print_level', full_name='spdk_nvmf_log_flags_and_level_info.log_print_level', index=4,
+            number=5, type=14, cpp_type=8, label=1,
+            has_default_value=False, default_value=0,
+            message_type=None, enum_type=None, containing_type=None,
+            is_extension=False, extension_scope=None,
+            serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    ],
+    extensions=[
+    ],
+    nested_types=[],
+    enum_types=[
+    ],
+    serialized_options=None,
+    is_extendable=False,
+    syntax='proto3',
+    extension_ranges=[],
+    oneofs=[
+    ],
+    serialized_start=5159,
+    serialized_end=5345,
+)
+
+_NAMESPACE_ADD_REQ.oneofs_by_name['_nsid'].fields.append(
+    _NAMESPACE_ADD_REQ.fields_by_name['nsid'])
+_NAMESPACE_ADD_REQ.fields_by_name['nsid'].containing_oneof = _NAMESPACE_ADD_REQ.oneofs_by_name['_nsid']
+_NAMESPACE_ADD_REQ.oneofs_by_name['_uuid'].fields.append(
+    _NAMESPACE_ADD_REQ.fields_by_name['uuid'])
+_NAMESPACE_ADD_REQ.fields_by_name['uuid'].containing_oneof = _NAMESPACE_ADD_REQ.oneofs_by_name['_uuid']
+_NAMESPACE_ADD_REQ.oneofs_by_name['_anagrpid'].fields.append(
+    _NAMESPACE_ADD_REQ.fields_by_name['anagrpid'])
+_NAMESPACE_ADD_REQ.fields_by_name['anagrpid'].containing_oneof = _NAMESPACE_ADD_REQ.oneofs_by_name['_anagrpid']
+_NAMESPACE_ADD_REQ.oneofs_by_name['_create_image'].fields.append(
+    _NAMESPACE_ADD_REQ.fields_by_name['create_image'])
+_NAMESPACE_ADD_REQ.fields_by_name['create_image'].containing_oneof = _NAMESPACE_ADD_REQ.oneofs_by_name['_create_image']
+_NAMESPACE_ADD_REQ.oneofs_by_name['_size'].fields.append(
+    _NAMESPACE_ADD_REQ.fields_by_name['size'])
+_NAMESPACE_ADD_REQ.fields_by_name['size'].containing_oneof = _NAMESPACE_ADD_REQ.oneofs_by_name['_size']
+_NAMESPACE_RESIZE_REQ.oneofs_by_name['_nsid'].fields.append(
+    _NAMESPACE_RESIZE_REQ.fields_by_name['nsid'])
+_NAMESPACE_RESIZE_REQ.fields_by_name['nsid'].containing_oneof = _NAMESPACE_RESIZE_REQ.oneofs_by_name['_nsid']
+_NAMESPACE_RESIZE_REQ.oneofs_by_name['_uuid'].fields.append(
+    _NAMESPACE_RESIZE_REQ.fields_by_name['uuid'])
+_NAMESPACE_RESIZE_REQ.fields_by_name['uuid'].containing_oneof = _NAMESPACE_RESIZE_REQ.oneofs_by_name['_uuid']
+_NAMESPACE_GET_IO_STATS_REQ.oneofs_by_name['_nsid'].fields.append(
+    _NAMESPACE_GET_IO_STATS_REQ.fields_by_name['nsid'])
+_NAMESPACE_GET_IO_STATS_REQ.fields_by_name['nsid'].containing_oneof = _NAMESPACE_GET_IO_STATS_REQ.oneofs_by_name['_nsid']
+_NAMESPACE_GET_IO_STATS_REQ.oneofs_by_name['_uuid'].fields.append(
+    _NAMESPACE_GET_IO_STATS_REQ.fields_by_name['uuid'])
+_NAMESPACE_GET_IO_STATS_REQ.fields_by_name['uuid'].containing_oneof = _NAMESPACE_GET_IO_STATS_REQ.oneofs_by_name['_uuid']
+_NAMESPACE_SET_QOS_REQ.oneofs_by_name['_nsid'].fields.append(
+    _NAMESPACE_SET_QOS_REQ.fields_by_name['nsid'])
+_NAMESPACE_SET_QOS_REQ.fields_by_name['nsid'].containing_oneof = _NAMESPACE_SET_QOS_REQ.oneofs_by_name['_nsid']
+_NAMESPACE_SET_QOS_REQ.oneofs_by_name['_uuid'].fields.append(
+    _NAMESPACE_SET_QOS_REQ.fields_by_name['uuid'])
+_NAMESPACE_SET_QOS_REQ.fields_by_name['uuid'].containing_oneof = _NAMESPACE_SET_QOS_REQ.oneofs_by_name['_uuid']
+_NAMESPACE_SET_QOS_REQ.oneofs_by_name['_rw_ios_per_second'].fields.append(
+    _NAMESPACE_SET_QOS_REQ.fields_by_name['rw_ios_per_second'])
+_NAMESPACE_SET_QOS_REQ.fields_by_name['rw_ios_per_second'].containing_oneof = _NAMESPACE_SET_QOS_REQ.oneofs_by_name['_rw_ios_per_second']
+_NAMESPACE_SET_QOS_REQ.oneofs_by_name['_rw_mbytes_per_second'].fields.append(
+    _NAMESPACE_SET_QOS_REQ.fields_by_name['rw_mbytes_per_second'])
+_NAMESPACE_SET_QOS_REQ.fields_by_name['rw_mbytes_per_second'].containing_oneof = _NAMESPACE_SET_QOS_REQ.oneofs_by_name['_rw_mbytes_per_second']
+_NAMESPACE_SET_QOS_REQ.oneofs_by_name['_r_mbytes_per_second'].fields.append(
+    _NAMESPACE_SET_QOS_REQ.fields_by_name['r_mbytes_per_second'])
+_NAMESPACE_SET_QOS_REQ.fields_by_name['r_mbytes_per_second'].containing_oneof = _NAMESPACE_SET_QOS_REQ.oneofs_by_name['_r_mbytes_per_second']
+_NAMESPACE_SET_QOS_REQ.oneofs_by_name['_w_mbytes_per_second'].fields.append(
+    _NAMESPACE_SET_QOS_REQ.fields_by_name['w_mbytes_per_second'])
+_NAMESPACE_SET_QOS_REQ.fields_by_name['w_mbytes_per_second'].containing_oneof = _NAMESPACE_SET_QOS_REQ.oneofs_by_name['_w_mbytes_per_second']
+_NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.oneofs_by_name['_nsid'].fields.append(
+    _NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.fields_by_name['nsid'])
+_NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.fields_by_name[
+    'nsid'].containing_oneof = _NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.oneofs_by_name['_nsid']
+_NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.oneofs_by_name['_uuid'].fields.append(
+    _NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.fields_by_name['uuid'])
+_NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.fields_by_name[
+    'uuid'].containing_oneof = _NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ.oneofs_by_name['_uuid']
+_NAMESPACE_DELETE_REQ.oneofs_by_name['_nsid'].fields.append(
+    _NAMESPACE_DELETE_REQ.fields_by_name['nsid'])
+_NAMESPACE_DELETE_REQ.fields_by_name['nsid'].containing_oneof = _NAMESPACE_DELETE_REQ.oneofs_by_name['_nsid']
+_NAMESPACE_DELETE_REQ.oneofs_by_name['_uuid'].fields.append(
+    _NAMESPACE_DELETE_REQ.fields_by_name['uuid'])
+_NAMESPACE_DELETE_REQ.fields_by_name['uuid'].containing_oneof = _NAMESPACE_DELETE_REQ.oneofs_by_name['_uuid']
+_CREATE_SUBSYSTEM_REQ.oneofs_by_name['_max_namespaces'].fields.append(
+    _CREATE_SUBSYSTEM_REQ.fields_by_name['max_namespaces'])
+_CREATE_SUBSYSTEM_REQ.fields_by_name['max_namespaces'].containing_oneof = _CREATE_SUBSYSTEM_REQ.oneofs_by_name['_max_namespaces']
+_DELETE_SUBSYSTEM_REQ.oneofs_by_name['_force'].fields.append(
+    _DELETE_SUBSYSTEM_REQ.fields_by_name['force'])
+_DELETE_SUBSYSTEM_REQ.fields_by_name['force'].containing_oneof = _DELETE_SUBSYSTEM_REQ.oneofs_by_name['_force']
+_LIST_NAMESPACES_REQ.oneofs_by_name['_nsid'].fields.append(
+    _LIST_NAMESPACES_REQ.fields_by_name['nsid'])
+_LIST_NAMESPACES_REQ.fields_by_name['nsid'].containing_oneof = _LIST_NAMESPACES_REQ.oneofs_by_name['_nsid']
+_LIST_NAMESPACES_REQ.oneofs_by_name['_uuid'].fields.append(
+    _LIST_NAMESPACES_REQ.fields_by_name['uuid'])
+_LIST_NAMESPACES_REQ.fields_by_name['uuid'].containing_oneof = _LIST_NAMESPACES_REQ.oneofs_by_name['_uuid']
+_CREATE_LISTENER_REQ.fields_by_name['trtype'].enum_type = _TRANSPORTTYPE
+_CREATE_LISTENER_REQ.fields_by_name['adrfam'].enum_type = _ADDRESSFAMILY
+_CREATE_LISTENER_REQ.fields_by_name['auto_ha_state'].enum_type = _AUTOHASTATE
+_CREATE_LISTENER_REQ.oneofs_by_name['_trtype'].fields.append(
+    _CREATE_LISTENER_REQ.fields_by_name['trtype'])
+_CREATE_LISTENER_REQ.fields_by_name['trtype'].containing_oneof = _CREATE_LISTENER_REQ.oneofs_by_name['_trtype']
+_CREATE_LISTENER_REQ.oneofs_by_name['_adrfam'].fields.append(
+    _CREATE_LISTENER_REQ.fields_by_name['adrfam'])
+_CREATE_LISTENER_REQ.fields_by_name['adrfam'].containing_oneof = _CREATE_LISTENER_REQ.oneofs_by_name['_adrfam']
+_CREATE_LISTENER_REQ.oneofs_by_name['_trsvcid'].fields.append(
+    _CREATE_LISTENER_REQ.fields_by_name['trsvcid'])
+_CREATE_LISTENER_REQ.fields_by_name['trsvcid'].containing_oneof = _CREATE_LISTENER_REQ.oneofs_by_name['_trsvcid']
+_CREATE_LISTENER_REQ.oneofs_by_name['_auto_ha_state'].fields.append(
+    _CREATE_LISTENER_REQ.fields_by_name['auto_ha_state'])
+_CREATE_LISTENER_REQ.fields_by_name['auto_ha_state'].containing_oneof = _CREATE_LISTENER_REQ.oneofs_by_name['_auto_ha_state']
+_DELETE_LISTENER_REQ.fields_by_name['trtype'].enum_type = _TRANSPORTTYPE
+_DELETE_LISTENER_REQ.fields_by_name['adrfam'].enum_type = _ADDRESSFAMILY
+_DELETE_LISTENER_REQ.oneofs_by_name['_trtype'].fields.append(
+    _DELETE_LISTENER_REQ.fields_by_name['trtype'])
+_DELETE_LISTENER_REQ.fields_by_name['trtype'].containing_oneof = _DELETE_LISTENER_REQ.oneofs_by_name['_trtype']
+_DELETE_LISTENER_REQ.oneofs_by_name['_adrfam'].fields.append(
+    _DELETE_LISTENER_REQ.fields_by_name['adrfam'])
+_DELETE_LISTENER_REQ.fields_by_name['adrfam'].containing_oneof = _DELETE_LISTENER_REQ.oneofs_by_name['_adrfam']
+_DELETE_LISTENER_REQ.oneofs_by_name['_trsvcid'].fields.append(
+    _DELETE_LISTENER_REQ.fields_by_name['trsvcid'])
+_DELETE_LISTENER_REQ.fields_by_name['trsvcid'].containing_oneof = _DELETE_LISTENER_REQ.oneofs_by_name['_trsvcid']
+_LIST_SUBSYSTEMS_REQ.oneofs_by_name['_subsystem_nqn'].fields.append(
+    _LIST_SUBSYSTEMS_REQ.fields_by_name['subsystem_nqn'])
+_LIST_SUBSYSTEMS_REQ.fields_by_name['subsystem_nqn'].containing_oneof = _LIST_SUBSYSTEMS_REQ.oneofs_by_name['_subsystem_nqn']
+_LIST_SUBSYSTEMS_REQ.oneofs_by_name['_serial_number'].fields.append(
+    _LIST_SUBSYSTEMS_REQ.fields_by_name['serial_number'])
+_LIST_SUBSYSTEMS_REQ.fields_by_name['serial_number'].containing_oneof = _LIST_SUBSYSTEMS_REQ.oneofs_by_name['_serial_number']
+_SET_SPDK_NVMF_LOGS_REQ.fields_by_name['log_level'].enum_type = _LOGLEVEL
+_SET_SPDK_NVMF_LOGS_REQ.fields_by_name['print_level'].enum_type = _LOGLEVEL
+_SET_SPDK_NVMF_LOGS_REQ.oneofs_by_name['_log_level'].fields.append(
+    _SET_SPDK_NVMF_LOGS_REQ.fields_by_name['log_level'])
+_SET_SPDK_NVMF_LOGS_REQ.fields_by_name['log_level'].containing_oneof = _SET_SPDK_NVMF_LOGS_REQ.oneofs_by_name['_log_level']
+_SET_SPDK_NVMF_LOGS_REQ.oneofs_by_name['_print_level'].fields.append(
+    _SET_SPDK_NVMF_LOGS_REQ.fields_by_name['print_level'])
+_SET_SPDK_NVMF_LOGS_REQ.fields_by_name['print_level'].containing_oneof = _SET_SPDK_NVMF_LOGS_REQ.oneofs_by_name['_print_level']
+_GET_GATEWAY_INFO_REQ.oneofs_by_name['_cli_version'].fields.append(
+    _GET_GATEWAY_INFO_REQ.fields_by_name['cli_version'])
+_GET_GATEWAY_INFO_REQ.fields_by_name['cli_version'].containing_oneof = _GET_GATEWAY_INFO_REQ.oneofs_by_name['_cli_version']
+_SUBSYSTEMS_INFO.fields_by_name['subsystems'].message_type = _SUBSYSTEM
+_LISTENER_INFO.fields_by_name['trtype'].enum_type = _TRANSPORTTYPE
+_LISTENER_INFO.fields_by_name['adrfam'].enum_type = _ADDRESSFAMILY
+_LISTENERS_INFO.fields_by_name['listeners'].message_type = _LISTENER_INFO
+_HOSTS_INFO.fields_by_name['hosts'].message_type = _HOST
+_CONNECTION.fields_by_name['trtype'].enum_type = _TRANSPORTTYPE
+_CONNECTION.fields_by_name['adrfam'].enum_type = _ADDRESSFAMILY
+_CONNECTIONS_INFO.fields_by_name['connections'].message_type = _CONNECTION
+_NAMESPACES_INFO.fields_by_name['namespaces'].message_type = _NAMESPACE
+_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO.fields_by_name['nvmf_log_flags'].message_type = _SPDK_LOG_FLAG_INFO
+_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO.fields_by_name['log_level'].enum_type = _LOGLEVEL
+_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO.fields_by_name['log_print_level'].enum_type = _LOGLEVEL
+DESCRIPTOR.message_types_by_name['namespace_add_req'] = _NAMESPACE_ADD_REQ
+DESCRIPTOR.message_types_by_name['namespace_resize_req'] = _NAMESPACE_RESIZE_REQ
+DESCRIPTOR.message_types_by_name['namespace_get_io_stats_req'] = _NAMESPACE_GET_IO_STATS_REQ
+DESCRIPTOR.message_types_by_name['namespace_set_qos_req'] = _NAMESPACE_SET_QOS_REQ
+DESCRIPTOR.message_types_by_name['namespace_change_load_balancing_group_req'] = _NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ
+DESCRIPTOR.message_types_by_name['namespace_delete_req'] = _NAMESPACE_DELETE_REQ
+DESCRIPTOR.message_types_by_name['create_subsystem_req'] = _CREATE_SUBSYSTEM_REQ
+DESCRIPTOR.message_types_by_name['delete_subsystem_req'] = _DELETE_SUBSYSTEM_REQ
+DESCRIPTOR.message_types_by_name['list_namespaces_req'] = _LIST_NAMESPACES_REQ
+DESCRIPTOR.message_types_by_name['add_host_req'] = _ADD_HOST_REQ
+DESCRIPTOR.message_types_by_name['remove_host_req'] = _REMOVE_HOST_REQ
+DESCRIPTOR.message_types_by_name['list_hosts_req'] = _LIST_HOSTS_REQ
+DESCRIPTOR.message_types_by_name['list_connections_req'] = _LIST_CONNECTIONS_REQ
+DESCRIPTOR.message_types_by_name['create_listener_req'] = _CREATE_LISTENER_REQ
+DESCRIPTOR.message_types_by_name['delete_listener_req'] = _DELETE_LISTENER_REQ
+DESCRIPTOR.message_types_by_name['list_listeners_req'] = _LIST_LISTENERS_REQ
+DESCRIPTOR.message_types_by_name['list_subsystems_req'] = _LIST_SUBSYSTEMS_REQ
+DESCRIPTOR.message_types_by_name['get_spdk_nvmf_log_flags_and_level_req'] = _GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ
+DESCRIPTOR.message_types_by_name['disable_spdk_nvmf_logs_req'] = _DISABLE_SPDK_NVMF_LOGS_REQ
+DESCRIPTOR.message_types_by_name['set_spdk_nvmf_logs_req'] = _SET_SPDK_NVMF_LOGS_REQ
+DESCRIPTOR.message_types_by_name['get_gateway_info_req'] = _GET_GATEWAY_INFO_REQ
+DESCRIPTOR.message_types_by_name['bdev_status'] = _BDEV_STATUS
+DESCRIPTOR.message_types_by_name['req_status'] = _REQ_STATUS
+DESCRIPTOR.message_types_by_name['nsid_status'] = _NSID_STATUS
+DESCRIPTOR.message_types_by_name['subsystems_info'] = _SUBSYSTEMS_INFO
+DESCRIPTOR.message_types_by_name['subsystem'] = _SUBSYSTEM
+DESCRIPTOR.message_types_by_name['gateway_info'] = _GATEWAY_INFO
+DESCRIPTOR.message_types_by_name['cli_version'] = _CLI_VERSION
+DESCRIPTOR.message_types_by_name['gw_version'] = _GW_VERSION
+DESCRIPTOR.message_types_by_name['listener_info'] = _LISTENER_INFO
+DESCRIPTOR.message_types_by_name['listeners_info'] = _LISTENERS_INFO
+DESCRIPTOR.message_types_by_name['host'] = _HOST
+DESCRIPTOR.message_types_by_name['hosts_info'] = _HOSTS_INFO
+DESCRIPTOR.message_types_by_name['connection'] = _CONNECTION
+DESCRIPTOR.message_types_by_name['connections_info'] = _CONNECTIONS_INFO
+DESCRIPTOR.message_types_by_name['namespace'] = _NAMESPACE
+DESCRIPTOR.message_types_by_name['namespaces_info'] = _NAMESPACES_INFO
+DESCRIPTOR.message_types_by_name['namespace_io_stats_info'] = _NAMESPACE_IO_STATS_INFO
+DESCRIPTOR.message_types_by_name['spdk_log_flag_info'] = _SPDK_LOG_FLAG_INFO
+DESCRIPTOR.message_types_by_name['spdk_nvmf_log_flags_and_level_info'] = _SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO
+DESCRIPTOR.enum_types_by_name['TransportType'] = _TRANSPORTTYPE
+DESCRIPTOR.enum_types_by_name['AddressFamily'] = _ADDRESSFAMILY
+DESCRIPTOR.enum_types_by_name['LogLevel'] = _LOGLEVEL
+DESCRIPTOR.enum_types_by_name['AutoHAState'] = _AUTOHASTATE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+namespace_add_req = _reflection.GeneratedProtocolMessageType('namespace_add_req', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACE_ADD_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace_add_req)
+})
+_sym_db.RegisterMessage(namespace_add_req)
+
+namespace_resize_req = _reflection.GeneratedProtocolMessageType('namespace_resize_req', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACE_RESIZE_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace_resize_req)
+})
+_sym_db.RegisterMessage(namespace_resize_req)
+
+namespace_get_io_stats_req = _reflection.GeneratedProtocolMessageType('namespace_get_io_stats_req', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACE_GET_IO_STATS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace_get_io_stats_req)
+})
+_sym_db.RegisterMessage(namespace_get_io_stats_req)
+
+namespace_set_qos_req = _reflection.GeneratedProtocolMessageType('namespace_set_qos_req', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACE_SET_QOS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace_set_qos_req)
+})
+_sym_db.RegisterMessage(namespace_set_qos_req)
+
+namespace_change_load_balancing_group_req = _reflection.GeneratedProtocolMessageType('namespace_change_load_balancing_group_req', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace_change_load_balancing_group_req)
+})
+_sym_db.RegisterMessage(namespace_change_load_balancing_group_req)
+
+namespace_delete_req = _reflection.GeneratedProtocolMessageType('namespace_delete_req', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACE_DELETE_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace_delete_req)
+})
+_sym_db.RegisterMessage(namespace_delete_req)
 
 create_subsystem_req = _reflection.GeneratedProtocolMessageType('create_subsystem_req', (_message.Message,), {
-  'DESCRIPTOR' : _CREATE_SUBSYSTEM_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:create_subsystem_req)
-  })
+    'DESCRIPTOR': _CREATE_SUBSYSTEM_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:create_subsystem_req)
+})
 _sym_db.RegisterMessage(create_subsystem_req)
 
 delete_subsystem_req = _reflection.GeneratedProtocolMessageType('delete_subsystem_req', (_message.Message,), {
-  'DESCRIPTOR' : _DELETE_SUBSYSTEM_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:delete_subsystem_req)
-  })
+    'DESCRIPTOR': _DELETE_SUBSYSTEM_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:delete_subsystem_req)
+})
 _sym_db.RegisterMessage(delete_subsystem_req)
 
-add_namespace_req = _reflection.GeneratedProtocolMessageType('add_namespace_req', (_message.Message,), {
-  'DESCRIPTOR' : _ADD_NAMESPACE_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:add_namespace_req)
-  })
-_sym_db.RegisterMessage(add_namespace_req)
-
-remove_namespace_req = _reflection.GeneratedProtocolMessageType('remove_namespace_req', (_message.Message,), {
-  'DESCRIPTOR' : _REMOVE_NAMESPACE_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:remove_namespace_req)
-  })
-_sym_db.RegisterMessage(remove_namespace_req)
+list_namespaces_req = _reflection.GeneratedProtocolMessageType('list_namespaces_req', (_message.Message,), {
+    'DESCRIPTOR': _LIST_NAMESPACES_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:list_namespaces_req)
+})
+_sym_db.RegisterMessage(list_namespaces_req)
 
 add_host_req = _reflection.GeneratedProtocolMessageType('add_host_req', (_message.Message,), {
-  'DESCRIPTOR' : _ADD_HOST_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:add_host_req)
-  })
+    'DESCRIPTOR': _ADD_HOST_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:add_host_req)
+})
 _sym_db.RegisterMessage(add_host_req)
 
 remove_host_req = _reflection.GeneratedProtocolMessageType('remove_host_req', (_message.Message,), {
-  'DESCRIPTOR' : _REMOVE_HOST_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:remove_host_req)
-  })
+    'DESCRIPTOR': _REMOVE_HOST_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:remove_host_req)
+})
 _sym_db.RegisterMessage(remove_host_req)
 
+list_hosts_req = _reflection.GeneratedProtocolMessageType('list_hosts_req', (_message.Message,), {
+    'DESCRIPTOR': _LIST_HOSTS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:list_hosts_req)
+})
+_sym_db.RegisterMessage(list_hosts_req)
+
+list_connections_req = _reflection.GeneratedProtocolMessageType('list_connections_req', (_message.Message,), {
+    'DESCRIPTOR': _LIST_CONNECTIONS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:list_connections_req)
+})
+_sym_db.RegisterMessage(list_connections_req)
+
 create_listener_req = _reflection.GeneratedProtocolMessageType('create_listener_req', (_message.Message,), {
-  'DESCRIPTOR' : _CREATE_LISTENER_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:create_listener_req)
-  })
+    'DESCRIPTOR': _CREATE_LISTENER_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:create_listener_req)
+})
 _sym_db.RegisterMessage(create_listener_req)
 
 delete_listener_req = _reflection.GeneratedProtocolMessageType('delete_listener_req', (_message.Message,), {
-  'DESCRIPTOR' : _DELETE_LISTENER_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:delete_listener_req)
-  })
+    'DESCRIPTOR': _DELETE_LISTENER_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:delete_listener_req)
+})
 _sym_db.RegisterMessage(delete_listener_req)
 
-get_subsystems_req = _reflection.GeneratedProtocolMessageType('get_subsystems_req', (_message.Message,), {
-  'DESCRIPTOR' : _GET_SUBSYSTEMS_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:get_subsystems_req)
-  })
-_sym_db.RegisterMessage(get_subsystems_req)
+list_listeners_req = _reflection.GeneratedProtocolMessageType('list_listeners_req', (_message.Message,), {
+    'DESCRIPTOR': _LIST_LISTENERS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:list_listeners_req)
+})
+_sym_db.RegisterMessage(list_listeners_req)
+
+list_subsystems_req = _reflection.GeneratedProtocolMessageType('list_subsystems_req', (_message.Message,), {
+    'DESCRIPTOR': _LIST_SUBSYSTEMS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:list_subsystems_req)
+})
+_sym_db.RegisterMessage(list_subsystems_req)
 
 get_spdk_nvmf_log_flags_and_level_req = _reflection.GeneratedProtocolMessageType('get_spdk_nvmf_log_flags_and_level_req', (_message.Message,), {
-  'DESCRIPTOR' : _GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:get_spdk_nvmf_log_flags_and_level_req)
-  })
+    'DESCRIPTOR': _GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:get_spdk_nvmf_log_flags_and_level_req)
+})
 _sym_db.RegisterMessage(get_spdk_nvmf_log_flags_and_level_req)
 
 disable_spdk_nvmf_logs_req = _reflection.GeneratedProtocolMessageType('disable_spdk_nvmf_logs_req', (_message.Message,), {
-  'DESCRIPTOR' : _DISABLE_SPDK_NVMF_LOGS_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:disable_spdk_nvmf_logs_req)
-  })
+    'DESCRIPTOR': _DISABLE_SPDK_NVMF_LOGS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:disable_spdk_nvmf_logs_req)
+})
 _sym_db.RegisterMessage(disable_spdk_nvmf_logs_req)
 
 set_spdk_nvmf_logs_req = _reflection.GeneratedProtocolMessageType('set_spdk_nvmf_logs_req', (_message.Message,), {
-  'DESCRIPTOR' : _SET_SPDK_NVMF_LOGS_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:set_spdk_nvmf_logs_req)
-  })
+    'DESCRIPTOR': _SET_SPDK_NVMF_LOGS_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:set_spdk_nvmf_logs_req)
+})
 _sym_db.RegisterMessage(set_spdk_nvmf_logs_req)
 
 get_gateway_info_req = _reflection.GeneratedProtocolMessageType('get_gateway_info_req', (_message.Message,), {
-  'DESCRIPTOR' : _GET_GATEWAY_INFO_REQ,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:get_gateway_info_req)
-  })
+    'DESCRIPTOR': _GET_GATEWAY_INFO_REQ,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:get_gateway_info_req)
+})
 _sym_db.RegisterMessage(get_gateway_info_req)
 
-bdev = _reflection.GeneratedProtocolMessageType('bdev', (_message.Message,), {
-  'DESCRIPTOR' : _BDEV,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:bdev)
-  })
-_sym_db.RegisterMessage(bdev)
+bdev_status = _reflection.GeneratedProtocolMessageType('bdev_status', (_message.Message,), {
+    'DESCRIPTOR': _BDEV_STATUS,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:bdev_status)
+})
+_sym_db.RegisterMessage(bdev_status)
 
 req_status = _reflection.GeneratedProtocolMessageType('req_status', (_message.Message,), {
-  'DESCRIPTOR' : _REQ_STATUS,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:req_status)
-  })
+    'DESCRIPTOR': _REQ_STATUS,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:req_status)
+})
 _sym_db.RegisterMessage(req_status)
 
 nsid_status = _reflection.GeneratedProtocolMessageType('nsid_status', (_message.Message,), {
-  'DESCRIPTOR' : _NSID_STATUS,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:nsid_status)
-  })
+    'DESCRIPTOR': _NSID_STATUS,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:nsid_status)
+})
 _sym_db.RegisterMessage(nsid_status)
 
 subsystems_info = _reflection.GeneratedProtocolMessageType('subsystems_info', (_message.Message,), {
-  'DESCRIPTOR' : _SUBSYSTEMS_INFO,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:subsystems_info)
-  })
+    'DESCRIPTOR': _SUBSYSTEMS_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:subsystems_info)
+})
 _sym_db.RegisterMessage(subsystems_info)
 
 subsystem = _reflection.GeneratedProtocolMessageType('subsystem', (_message.Message,), {
-  'DESCRIPTOR' : _SUBSYSTEM,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:subsystem)
-  })
+    'DESCRIPTOR': _SUBSYSTEM,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:subsystem)
+})
 _sym_db.RegisterMessage(subsystem)
 
 gateway_info = _reflection.GeneratedProtocolMessageType('gateway_info', (_message.Message,), {
-  'DESCRIPTOR' : _GATEWAY_INFO,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:gateway_info)
-  })
+    'DESCRIPTOR': _GATEWAY_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:gateway_info)
+})
 _sym_db.RegisterMessage(gateway_info)
 
-listen_address = _reflection.GeneratedProtocolMessageType('listen_address', (_message.Message,), {
-  'DESCRIPTOR' : _LISTEN_ADDRESS,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:listen_address)
-  })
-_sym_db.RegisterMessage(listen_address)
+cli_version = _reflection.GeneratedProtocolMessageType('cli_version', (_message.Message,), {
+    'DESCRIPTOR': _CLI_VERSION,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:cli_version)
+})
+_sym_db.RegisterMessage(cli_version)
+
+gw_version = _reflection.GeneratedProtocolMessageType('gw_version', (_message.Message,), {
+    'DESCRIPTOR': _GW_VERSION,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:gw_version)
+})
+_sym_db.RegisterMessage(gw_version)
+
+listener_info = _reflection.GeneratedProtocolMessageType('listener_info', (_message.Message,), {
+    'DESCRIPTOR': _LISTENER_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:listener_info)
+})
+_sym_db.RegisterMessage(listener_info)
+
+listeners_info = _reflection.GeneratedProtocolMessageType('listeners_info', (_message.Message,), {
+    'DESCRIPTOR': _LISTENERS_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:listeners_info)
+})
+_sym_db.RegisterMessage(listeners_info)
 
 host = _reflection.GeneratedProtocolMessageType('host', (_message.Message,), {
-  'DESCRIPTOR' : _HOST,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:host)
-  })
+    'DESCRIPTOR': _HOST,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:host)
+})
 _sym_db.RegisterMessage(host)
 
+hosts_info = _reflection.GeneratedProtocolMessageType('hosts_info', (_message.Message,), {
+    'DESCRIPTOR': _HOSTS_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:hosts_info)
+})
+_sym_db.RegisterMessage(hosts_info)
+
+connection = _reflection.GeneratedProtocolMessageType('connection', (_message.Message,), {
+    'DESCRIPTOR': _CONNECTION,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:connection)
+})
+_sym_db.RegisterMessage(connection)
+
+connections_info = _reflection.GeneratedProtocolMessageType('connections_info', (_message.Message,), {
+    'DESCRIPTOR': _CONNECTIONS_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:connections_info)
+})
+_sym_db.RegisterMessage(connections_info)
+
 namespace = _reflection.GeneratedProtocolMessageType('namespace', (_message.Message,), {
-  'DESCRIPTOR' : _NAMESPACE,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:namespace)
-  })
+    'DESCRIPTOR': _NAMESPACE,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace)
+})
 _sym_db.RegisterMessage(namespace)
 
+namespaces_info = _reflection.GeneratedProtocolMessageType('namespaces_info', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACES_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespaces_info)
+})
+_sym_db.RegisterMessage(namespaces_info)
+
+namespace_io_stats_info = _reflection.GeneratedProtocolMessageType('namespace_io_stats_info', (_message.Message,), {
+    'DESCRIPTOR': _NAMESPACE_IO_STATS_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:namespace_io_stats_info)
+})
+_sym_db.RegisterMessage(namespace_io_stats_info)
+
+spdk_log_flag_info = _reflection.GeneratedProtocolMessageType('spdk_log_flag_info', (_message.Message,), {
+    'DESCRIPTOR': _SPDK_LOG_FLAG_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:spdk_log_flag_info)
+})
+_sym_db.RegisterMessage(spdk_log_flag_info)
+
 spdk_nvmf_log_flags_and_level_info = _reflection.GeneratedProtocolMessageType('spdk_nvmf_log_flags_and_level_info', (_message.Message,), {
-  'DESCRIPTOR' : _SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO,
-  '__module__' : 'gateway_pb2'
-  # @@protoc_insertion_point(class_scope:spdk_nvmf_log_flags_and_level_info)
-  })
+    'DESCRIPTOR': _SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO,
+    '__module__': 'gateway_pb2'
+    # @@protoc_insertion_point(class_scope:spdk_nvmf_log_flags_and_level_info)
+})
 _sym_db.RegisterMessage(spdk_nvmf_log_flags_and_level_info)
 
-_GATEWAY = DESCRIPTOR.services_by_name['Gateway']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  _TRANSPORTTYPE._serialized_start=2436
-  _TRANSPORTTYPE._serialized_end=2530
-  _ADDRESSFAMILY._serialized_start=2532
-  _ADDRESSFAMILY._serialized_end=2596
-  _LOGLEVEL._serialized_start=2598
-  _LOGLEVEL._serialized_end=2676
-  _CREATE_BDEV_REQ._serialized_start=18
-  _CREATE_BDEV_REQ._serialized_end=149
-  _RESIZE_BDEV_REQ._serialized_start=151
-  _RESIZE_BDEV_REQ._serialized_end=205
-  _DELETE_BDEV_REQ._serialized_start=207
-  _DELETE_BDEV_REQ._serialized_end=258
-  _CREATE_SUBSYSTEM_REQ._serialized_start=261
-  _CREATE_SUBSYSTEM_REQ._serialized_end=395
-  _DELETE_SUBSYSTEM_REQ._serialized_start=397
-  _DELETE_SUBSYSTEM_REQ._serialized_end=442
-  _ADD_NAMESPACE_REQ._serialized_start=444
-  _ADD_NAMESPACE_REQ._serialized_end=569
-  _REMOVE_NAMESPACE_REQ._serialized_start=571
-  _REMOVE_NAMESPACE_REQ._serialized_end=630
-  _ADD_HOST_REQ._serialized_start=632
-  _ADD_HOST_REQ._serialized_end=687
-  _REMOVE_HOST_REQ._serialized_start=689
-  _REMOVE_HOST_REQ._serialized_end=747
-  _CREATE_LISTENER_REQ._serialized_start=750
-  _CREATE_LISTENER_REQ._serialized_end=903
-  _DELETE_LISTENER_REQ._serialized_start=906
-  _DELETE_LISTENER_REQ._serialized_end=1059
-  _GET_SUBSYSTEMS_REQ._serialized_start=1061
-  _GET_SUBSYSTEMS_REQ._serialized_end=1081
-  _GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ._serialized_start=1083
-  _GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ._serialized_end=1122
-  _DISABLE_SPDK_NVMF_LOGS_REQ._serialized_start=1124
-  _DISABLE_SPDK_NVMF_LOGS_REQ._serialized_end=1152
-  _SET_SPDK_NVMF_LOGS_REQ._serialized_start=1154
-  _SET_SPDK_NVMF_LOGS_REQ._serialized_end=1280
-  _GET_GATEWAY_INFO_REQ._serialized_start=1282
-  _GET_GATEWAY_INFO_REQ._serialized_end=1325
-  _BDEV._serialized_start=1327
-  _BDEV._serialized_end=1368
-  _REQ_STATUS._serialized_start=1370
-  _REQ_STATUS._serialized_end=1398
-  _NSID_STATUS._serialized_start=1400
-  _NSID_STATUS._serialized_end=1443
-  _SUBSYSTEMS_INFO._serialized_start=1445
-  _SUBSYSTEMS_INFO._serialized_end=1494
-  _SUBSYSTEM._serialized_start=1497
-  _SUBSYSTEM._serialized_end=1877
-  _GATEWAY_INFO._serialized_start=1880
-  _GATEWAY_INFO._serialized_end=2045
-  _LISTEN_ADDRESS._serialized_start=2048
-  _LISTEN_ADDRESS._serialized_end=2180
-  _HOST._serialized_start=2182
-  _HOST._serialized_end=2201
-  _NAMESPACE._serialized_start=2204
-  _NAMESPACE._serialized_end=2375
-  _SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO._serialized_start=2377
-  _SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO._serialized_end=2434
-  _GATEWAY._serialized_start=2679
-  _GATEWAY._serialized_end=3622
+
+_GATEWAY = _descriptor.ServiceDescriptor(
+    name='Gateway',
+    full_name='Gateway',
+    file=DESCRIPTOR,
+    index=0,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+    serialized_start=5660,
+    serialized_end=7004,
+    methods=[
+        _descriptor.MethodDescriptor(
+            name='namespace_add',
+            full_name='Gateway.namespace_add',
+            index=0,
+            containing_service=None,
+            input_type=_NAMESPACE_ADD_REQ,
+            output_type=_NSID_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='create_subsystem',
+            full_name='Gateway.create_subsystem',
+            index=1,
+            containing_service=None,
+            input_type=_CREATE_SUBSYSTEM_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='delete_subsystem',
+            full_name='Gateway.delete_subsystem',
+            index=2,
+            containing_service=None,
+            input_type=_DELETE_SUBSYSTEM_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='list_namespaces',
+            full_name='Gateway.list_namespaces',
+            index=3,
+            containing_service=None,
+            input_type=_LIST_NAMESPACES_REQ,
+            output_type=_NAMESPACES_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='namespace_resize',
+            full_name='Gateway.namespace_resize',
+            index=4,
+            containing_service=None,
+            input_type=_NAMESPACE_RESIZE_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='namespace_get_io_stats',
+            full_name='Gateway.namespace_get_io_stats',
+            index=5,
+            containing_service=None,
+            input_type=_NAMESPACE_GET_IO_STATS_REQ,
+            output_type=_NAMESPACE_IO_STATS_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='namespace_set_qos_limits',
+            full_name='Gateway.namespace_set_qos_limits',
+            index=6,
+            containing_service=None,
+            input_type=_NAMESPACE_SET_QOS_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='namespace_change_load_balancing_group',
+            full_name='Gateway.namespace_change_load_balancing_group',
+            index=7,
+            containing_service=None,
+            input_type=_NAMESPACE_CHANGE_LOAD_BALANCING_GROUP_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='namespace_delete',
+            full_name='Gateway.namespace_delete',
+            index=8,
+            containing_service=None,
+            input_type=_NAMESPACE_DELETE_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='add_host',
+            full_name='Gateway.add_host',
+            index=9,
+            containing_service=None,
+            input_type=_ADD_HOST_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='remove_host',
+            full_name='Gateway.remove_host',
+            index=10,
+            containing_service=None,
+            input_type=_REMOVE_HOST_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='list_hosts',
+            full_name='Gateway.list_hosts',
+            index=11,
+            containing_service=None,
+            input_type=_LIST_HOSTS_REQ,
+            output_type=_HOSTS_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='list_connections',
+            full_name='Gateway.list_connections',
+            index=12,
+            containing_service=None,
+            input_type=_LIST_CONNECTIONS_REQ,
+            output_type=_CONNECTIONS_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='create_listener',
+            full_name='Gateway.create_listener',
+            index=13,
+            containing_service=None,
+            input_type=_CREATE_LISTENER_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='delete_listener',
+            full_name='Gateway.delete_listener',
+            index=14,
+            containing_service=None,
+            input_type=_DELETE_LISTENER_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='list_listeners',
+            full_name='Gateway.list_listeners',
+            index=15,
+            containing_service=None,
+            input_type=_LIST_LISTENERS_REQ,
+            output_type=_LISTENERS_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='list_subsystems',
+            full_name='Gateway.list_subsystems',
+            index=16,
+            containing_service=None,
+            input_type=_LIST_SUBSYSTEMS_REQ,
+            output_type=_SUBSYSTEMS_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='get_spdk_nvmf_log_flags_and_level',
+            full_name='Gateway.get_spdk_nvmf_log_flags_and_level',
+            index=17,
+            containing_service=None,
+            input_type=_GET_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_REQ,
+            output_type=_SPDK_NVMF_LOG_FLAGS_AND_LEVEL_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='disable_spdk_nvmf_logs',
+            full_name='Gateway.disable_spdk_nvmf_logs',
+            index=18,
+            containing_service=None,
+            input_type=_DISABLE_SPDK_NVMF_LOGS_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='set_spdk_nvmf_logs',
+            full_name='Gateway.set_spdk_nvmf_logs',
+            index=19,
+            containing_service=None,
+            input_type=_SET_SPDK_NVMF_LOGS_REQ,
+            output_type=_REQ_STATUS,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+        _descriptor.MethodDescriptor(
+            name='get_gateway_info',
+            full_name='Gateway.get_gateway_info',
+            index=20,
+            containing_service=None,
+            input_type=_GET_GATEWAY_INFO_REQ,
+            output_type=_GATEWAY_INFO,
+            serialized_options=None,
+            create_key=_descriptor._internal_create_key,
+        ),
+    ])
+_sym_db.RegisterServiceDescriptor(_GATEWAY)
+
+DESCRIPTOR.services_by_name['Gateway'] = _GATEWAY
+
 # @@protoc_insertion_point(module_scope)
index b3d9c2dcc76b4fb8c5ed4b2af647255ebd80d07f..9993ca4cf6b991827350cfd8633cad4e7c58e8c8 100644 (file)
@@ -2,7 +2,7 @@
 """Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
-from ..proto import gateway_pb2 as gateway__pb2
+from . import gateway_pb2 as gateway__pb2
 
 
 class GatewayStub(object):
@@ -14,135 +14,174 @@ class GatewayStub(object):
         Args:
             channel: A grpc.Channel.
         """
-        self.create_bdev = channel.unary_unary(
-                '/Gateway/create_bdev',
-                request_serializer=gateway__pb2.create_bdev_req.SerializeToString,
-                response_deserializer=gateway__pb2.bdev.FromString,
-                )
-        self.resize_bdev = channel.unary_unary(
-                '/Gateway/resize_bdev',
-                request_serializer=gateway__pb2.resize_bdev_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
-        self.delete_bdev = channel.unary_unary(
-                '/Gateway/delete_bdev',
-                request_serializer=gateway__pb2.delete_bdev_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+        self.namespace_add = channel.unary_unary(
+            '/Gateway/namespace_add',
+            request_serializer=gateway__pb2.namespace_add_req.SerializeToString,
+            response_deserializer=gateway__pb2.nsid_status.FromString,
+        )
         self.create_subsystem = channel.unary_unary(
-                '/Gateway/create_subsystem',
-                request_serializer=gateway__pb2.create_subsystem_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+            '/Gateway/create_subsystem',
+            request_serializer=gateway__pb2.create_subsystem_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
         self.delete_subsystem = channel.unary_unary(
-                '/Gateway/delete_subsystem',
-                request_serializer=gateway__pb2.delete_subsystem_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
-        self.add_namespace = channel.unary_unary(
-                '/Gateway/add_namespace',
-                request_serializer=gateway__pb2.add_namespace_req.SerializeToString,
-                response_deserializer=gateway__pb2.nsid_status.FromString,
-                )
-        self.remove_namespace = channel.unary_unary(
-                '/Gateway/remove_namespace',
-                request_serializer=gateway__pb2.remove_namespace_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+            '/Gateway/delete_subsystem',
+            request_serializer=gateway__pb2.delete_subsystem_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
+        self.list_namespaces = channel.unary_unary(
+            '/Gateway/list_namespaces',
+            request_serializer=gateway__pb2.list_namespaces_req.SerializeToString,
+            response_deserializer=gateway__pb2.namespaces_info.FromString,
+        )
+        self.namespace_resize = channel.unary_unary(
+            '/Gateway/namespace_resize',
+            request_serializer=gateway__pb2.namespace_resize_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
+        self.namespace_get_io_stats = channel.unary_unary(
+            '/Gateway/namespace_get_io_stats',
+            request_serializer=gateway__pb2.namespace_get_io_stats_req.SerializeToString,
+            response_deserializer=gateway__pb2.namespace_io_stats_info.FromString,
+        )
+        self.namespace_set_qos_limits = channel.unary_unary(
+            '/Gateway/namespace_set_qos_limits',
+            request_serializer=gateway__pb2.namespace_set_qos_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
+        self.namespace_change_load_balancing_group = channel.unary_unary(
+            '/Gateway/namespace_change_load_balancing_group',
+            request_serializer=gateway__pb2.namespace_change_load_balancing_group_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
+        self.namespace_delete = channel.unary_unary(
+            '/Gateway/namespace_delete',
+            request_serializer=gateway__pb2.namespace_delete_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
         self.add_host = channel.unary_unary(
-                '/Gateway/add_host',
-                request_serializer=gateway__pb2.add_host_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+            '/Gateway/add_host',
+            request_serializer=gateway__pb2.add_host_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
         self.remove_host = channel.unary_unary(
-                '/Gateway/remove_host',
-                request_serializer=gateway__pb2.remove_host_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+            '/Gateway/remove_host',
+            request_serializer=gateway__pb2.remove_host_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
+        self.list_hosts = channel.unary_unary(
+            '/Gateway/list_hosts',
+            request_serializer=gateway__pb2.list_hosts_req.SerializeToString,
+            response_deserializer=gateway__pb2.hosts_info.FromString,
+        )
+        self.list_connections = channel.unary_unary(
+            '/Gateway/list_connections',
+            request_serializer=gateway__pb2.list_connections_req.SerializeToString,
+            response_deserializer=gateway__pb2.connections_info.FromString,
+        )
         self.create_listener = channel.unary_unary(
-                '/Gateway/create_listener',
-                request_serializer=gateway__pb2.create_listener_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+            '/Gateway/create_listener',
+            request_serializer=gateway__pb2.create_listener_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
         self.delete_listener = channel.unary_unary(
-                '/Gateway/delete_listener',
-                request_serializer=gateway__pb2.delete_listener_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
-        self.get_subsystems = channel.unary_unary(
-                '/Gateway/get_subsystems',
-                request_serializer=gateway__pb2.get_subsystems_req.SerializeToString,
-                response_deserializer=gateway__pb2.subsystems_info.FromString,
-                )
+            '/Gateway/delete_listener',
+            request_serializer=gateway__pb2.delete_listener_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
+        self.list_listeners = channel.unary_unary(
+            '/Gateway/list_listeners',
+            request_serializer=gateway__pb2.list_listeners_req.SerializeToString,
+            response_deserializer=gateway__pb2.listeners_info.FromString,
+        )
+        self.list_subsystems = channel.unary_unary(
+            '/Gateway/list_subsystems',
+            request_serializer=gateway__pb2.list_subsystems_req.SerializeToString,
+            response_deserializer=gateway__pb2.subsystems_info.FromString,
+        )
         self.get_spdk_nvmf_log_flags_and_level = channel.unary_unary(
-                '/Gateway/get_spdk_nvmf_log_flags_and_level',
-                request_serializer=gateway__pb2.get_spdk_nvmf_log_flags_and_level_req.SerializeToString,
-                response_deserializer=gateway__pb2.spdk_nvmf_log_flags_and_level_info.FromString,
-                )
+            '/Gateway/get_spdk_nvmf_log_flags_and_level',
+            request_serializer=gateway__pb2.get_spdk_nvmf_log_flags_and_level_req.SerializeToString,
+            response_deserializer=gateway__pb2.spdk_nvmf_log_flags_and_level_info.FromString,
+        )
         self.disable_spdk_nvmf_logs = channel.unary_unary(
-                '/Gateway/disable_spdk_nvmf_logs',
-                request_serializer=gateway__pb2.disable_spdk_nvmf_logs_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+            '/Gateway/disable_spdk_nvmf_logs',
+            request_serializer=gateway__pb2.disable_spdk_nvmf_logs_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
         self.set_spdk_nvmf_logs = channel.unary_unary(
-                '/Gateway/set_spdk_nvmf_logs',
-                request_serializer=gateway__pb2.set_spdk_nvmf_logs_req.SerializeToString,
-                response_deserializer=gateway__pb2.req_status.FromString,
-                )
+            '/Gateway/set_spdk_nvmf_logs',
+            request_serializer=gateway__pb2.set_spdk_nvmf_logs_req.SerializeToString,
+            response_deserializer=gateway__pb2.req_status.FromString,
+        )
         self.get_gateway_info = channel.unary_unary(
-                '/Gateway/get_gateway_info',
-                request_serializer=gateway__pb2.get_gateway_info_req.SerializeToString,
-                response_deserializer=gateway__pb2.gateway_info.FromString,
-                )
+            '/Gateway/get_gateway_info',
+            request_serializer=gateway__pb2.get_gateway_info_req.SerializeToString,
+            response_deserializer=gateway__pb2.gateway_info.FromString,
+        )
 
 
 class GatewayServicer(object):
     """Missing associated documentation comment in .proto file."""
 
-    def create_bdev(self, request, context):
-        """Creates a bdev from an RBD image
+    def namespace_add(self, request, context):
+        """Creates a namespace from an RBD image
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def resize_bdev(self, request, context):
-        """Resizes a bdev
+    def create_subsystem(self, request, context):
+        """Creates a subsystem
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def delete_bdev(self, request, context):
-        """Deletes a bdev
+    def delete_subsystem(self, request, context):
+        """Deletes a subsystem
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def create_subsystem(self, request, context):
-        """Creates a subsystem
+    def list_namespaces(self, request, context):
+        """List namespaces
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def delete_subsystem(self, request, context):
-        """Deletes a subsystem
+    def namespace_resize(self, request, context):
+        """Resizes a namespace
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def namespace_get_io_stats(self, request, context):
+        """Gets namespace's IO stats
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def namespace_set_qos_limits(self, request, context):
+        """Sets namespace's qos limits
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def add_namespace(self, request, context):
-        """Adds a namespace to a subsystem
+    def namespace_change_load_balancing_group(self, request, context):
+        """Changes namespace's load balancing group
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def remove_namespace(self, request, context):
-        """Removes a namespace from a subsystem
+    def namespace_delete(self, request, context):
+        """Deletes a namespace
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
@@ -162,6 +201,20 @@ class GatewayServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def list_hosts(self, request, context):
+        """List hosts
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def list_connections(self, request, context):
+        """List connections
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
     def create_listener(self, request, context):
         """Creates a listener for a subsystem at a given IP/Port
         """
@@ -176,8 +229,15 @@ class GatewayServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def get_subsystems(self, request, context):
-        """Gets subsystems
+    def list_listeners(self, request, context):
+        """List listeners
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def list_subsystems(self, request, context):
+        """List subsystems
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
@@ -205,7 +265,7 @@ class GatewayServicer(object):
         raise NotImplementedError('Method not implemented!')
 
     def get_gateway_info(self, request, context):
-        """Set spdk nvmf logs
+        """Get gateway info
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
@@ -214,364 +274,475 @@ class GatewayServicer(object):
 
 def add_GatewayServicer_to_server(servicer, server):
     rpc_method_handlers = {
-            'create_bdev': grpc.unary_unary_rpc_method_handler(
-                    servicer.create_bdev,
-                    request_deserializer=gateway__pb2.create_bdev_req.FromString,
-                    response_serializer=gateway__pb2.bdev.SerializeToString,
-            ),
-            'resize_bdev': grpc.unary_unary_rpc_method_handler(
-                    servicer.resize_bdev,
-                    request_deserializer=gateway__pb2.resize_bdev_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'delete_bdev': grpc.unary_unary_rpc_method_handler(
-                    servicer.delete_bdev,
-                    request_deserializer=gateway__pb2.delete_bdev_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'create_subsystem': grpc.unary_unary_rpc_method_handler(
-                    servicer.create_subsystem,
-                    request_deserializer=gateway__pb2.create_subsystem_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'delete_subsystem': grpc.unary_unary_rpc_method_handler(
-                    servicer.delete_subsystem,
-                    request_deserializer=gateway__pb2.delete_subsystem_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'add_namespace': grpc.unary_unary_rpc_method_handler(
-                    servicer.add_namespace,
-                    request_deserializer=gateway__pb2.add_namespace_req.FromString,
-                    response_serializer=gateway__pb2.nsid_status.SerializeToString,
-            ),
-            'remove_namespace': grpc.unary_unary_rpc_method_handler(
-                    servicer.remove_namespace,
-                    request_deserializer=gateway__pb2.remove_namespace_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'add_host': grpc.unary_unary_rpc_method_handler(
-                    servicer.add_host,
-                    request_deserializer=gateway__pb2.add_host_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'remove_host': grpc.unary_unary_rpc_method_handler(
-                    servicer.remove_host,
-                    request_deserializer=gateway__pb2.remove_host_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'create_listener': grpc.unary_unary_rpc_method_handler(
-                    servicer.create_listener,
-                    request_deserializer=gateway__pb2.create_listener_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'delete_listener': grpc.unary_unary_rpc_method_handler(
-                    servicer.delete_listener,
-                    request_deserializer=gateway__pb2.delete_listener_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'get_subsystems': grpc.unary_unary_rpc_method_handler(
-                    servicer.get_subsystems,
-                    request_deserializer=gateway__pb2.get_subsystems_req.FromString,
-                    response_serializer=gateway__pb2.subsystems_info.SerializeToString,
-            ),
-            'get_spdk_nvmf_log_flags_and_level': grpc.unary_unary_rpc_method_handler(
-                    servicer.get_spdk_nvmf_log_flags_and_level,
-                    request_deserializer=gateway__pb2.get_spdk_nvmf_log_flags_and_level_req.FromString,
-                    response_serializer=gateway__pb2.spdk_nvmf_log_flags_and_level_info.SerializeToString,
-            ),
-            'disable_spdk_nvmf_logs': grpc.unary_unary_rpc_method_handler(
-                    servicer.disable_spdk_nvmf_logs,
-                    request_deserializer=gateway__pb2.disable_spdk_nvmf_logs_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'set_spdk_nvmf_logs': grpc.unary_unary_rpc_method_handler(
-                    servicer.set_spdk_nvmf_logs,
-                    request_deserializer=gateway__pb2.set_spdk_nvmf_logs_req.FromString,
-                    response_serializer=gateway__pb2.req_status.SerializeToString,
-            ),
-            'get_gateway_info': grpc.unary_unary_rpc_method_handler(
-                    servicer.get_gateway_info,
-                    request_deserializer=gateway__pb2.get_gateway_info_req.FromString,
-                    response_serializer=gateway__pb2.gateway_info.SerializeToString,
-            ),
+        'namespace_add': grpc.unary_unary_rpc_method_handler(
+            servicer.namespace_add,
+            request_deserializer=gateway__pb2.namespace_add_req.FromString,
+            response_serializer=gateway__pb2.nsid_status.SerializeToString,
+        ),
+        'create_subsystem': grpc.unary_unary_rpc_method_handler(
+            servicer.create_subsystem,
+            request_deserializer=gateway__pb2.create_subsystem_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'delete_subsystem': grpc.unary_unary_rpc_method_handler(
+            servicer.delete_subsystem,
+            request_deserializer=gateway__pb2.delete_subsystem_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'list_namespaces': grpc.unary_unary_rpc_method_handler(
+            servicer.list_namespaces,
+            request_deserializer=gateway__pb2.list_namespaces_req.FromString,
+            response_serializer=gateway__pb2.namespaces_info.SerializeToString,
+        ),
+        'namespace_resize': grpc.unary_unary_rpc_method_handler(
+            servicer.namespace_resize,
+            request_deserializer=gateway__pb2.namespace_resize_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'namespace_get_io_stats': grpc.unary_unary_rpc_method_handler(
+            servicer.namespace_get_io_stats,
+            request_deserializer=gateway__pb2.namespace_get_io_stats_req.FromString,
+            response_serializer=gateway__pb2.namespace_io_stats_info.SerializeToString,
+        ),
+        'namespace_set_qos_limits': grpc.unary_unary_rpc_method_handler(
+            servicer.namespace_set_qos_limits,
+            request_deserializer=gateway__pb2.namespace_set_qos_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'namespace_change_load_balancing_group': grpc.unary_unary_rpc_method_handler(
+            servicer.namespace_change_load_balancing_group,
+            request_deserializer=gateway__pb2.namespace_change_load_balancing_group_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'namespace_delete': grpc.unary_unary_rpc_method_handler(
+            servicer.namespace_delete,
+            request_deserializer=gateway__pb2.namespace_delete_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'add_host': grpc.unary_unary_rpc_method_handler(
+            servicer.add_host,
+            request_deserializer=gateway__pb2.add_host_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'remove_host': grpc.unary_unary_rpc_method_handler(
+            servicer.remove_host,
+            request_deserializer=gateway__pb2.remove_host_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'list_hosts': grpc.unary_unary_rpc_method_handler(
+            servicer.list_hosts,
+            request_deserializer=gateway__pb2.list_hosts_req.FromString,
+            response_serializer=gateway__pb2.hosts_info.SerializeToString,
+        ),
+        'list_connections': grpc.unary_unary_rpc_method_handler(
+            servicer.list_connections,
+            request_deserializer=gateway__pb2.list_connections_req.FromString,
+            response_serializer=gateway__pb2.connections_info.SerializeToString,
+        ),
+        'create_listener': grpc.unary_unary_rpc_method_handler(
+            servicer.create_listener,
+            request_deserializer=gateway__pb2.create_listener_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'delete_listener': grpc.unary_unary_rpc_method_handler(
+            servicer.delete_listener,
+            request_deserializer=gateway__pb2.delete_listener_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'list_listeners': grpc.unary_unary_rpc_method_handler(
+            servicer.list_listeners,
+            request_deserializer=gateway__pb2.list_listeners_req.FromString,
+            response_serializer=gateway__pb2.listeners_info.SerializeToString,
+        ),
+        'list_subsystems': grpc.unary_unary_rpc_method_handler(
+            servicer.list_subsystems,
+            request_deserializer=gateway__pb2.list_subsystems_req.FromString,
+            response_serializer=gateway__pb2.subsystems_info.SerializeToString,
+        ),
+        'get_spdk_nvmf_log_flags_and_level': grpc.unary_unary_rpc_method_handler(
+            servicer.get_spdk_nvmf_log_flags_and_level,
+            request_deserializer=gateway__pb2.get_spdk_nvmf_log_flags_and_level_req.FromString,
+            response_serializer=gateway__pb2.spdk_nvmf_log_flags_and_level_info.SerializeToString,
+        ),
+        'disable_spdk_nvmf_logs': grpc.unary_unary_rpc_method_handler(
+            servicer.disable_spdk_nvmf_logs,
+            request_deserializer=gateway__pb2.disable_spdk_nvmf_logs_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'set_spdk_nvmf_logs': grpc.unary_unary_rpc_method_handler(
+            servicer.set_spdk_nvmf_logs,
+            request_deserializer=gateway__pb2.set_spdk_nvmf_logs_req.FromString,
+            response_serializer=gateway__pb2.req_status.SerializeToString,
+        ),
+        'get_gateway_info': grpc.unary_unary_rpc_method_handler(
+            servicer.get_gateway_info,
+            request_deserializer=gateway__pb2.get_gateway_info_req.FromString,
+            response_serializer=gateway__pb2.gateway_info.SerializeToString,
+        ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
-            'Gateway', rpc_method_handlers)
+        'Gateway', rpc_method_handlers)
     server.add_generic_rpc_handlers((generic_handler,))
 
-
  # This class is part of an EXPERIMENTAL API.
-class Gateway(object):
-    """Missing associated documentation comment in .proto file."""
 
-    @staticmethod
-    def create_bdev(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/Gateway/create_bdev',
-            gateway__pb2.create_bdev_req.SerializeToString,
-            gateway__pb2.bdev.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
-    @staticmethod
-    def resize_bdev(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/Gateway/resize_bdev',
-            gateway__pb2.resize_bdev_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+class Gateway(object):
+    """Missing associated documentation comment in .proto file."""
 
     @staticmethod
-    def delete_bdev(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/Gateway/delete_bdev',
-            gateway__pb2.delete_bdev_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+    def namespace_add(request,
+                      target,
+                      options=(),
+                      channel_credentials=None,
+                      call_credentials=None,
+                      insecure=False,
+                      compression=None,
+                      wait_for_ready=None,
+                      timeout=None,
+                      metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/namespace_add',
+                                             gateway__pb2.namespace_add_req.SerializeToString,
+                                             gateway__pb2.nsid_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def create_subsystem(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                         target,
+                         options=(),
+                         channel_credentials=None,
+                         call_credentials=None,
+                         insecure=False,
+                         compression=None,
+                         wait_for_ready=None,
+                         timeout=None,
+                         metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/create_subsystem',
-            gateway__pb2.create_subsystem_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.create_subsystem_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def delete_subsystem(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                         target,
+                         options=(),
+                         channel_credentials=None,
+                         call_credentials=None,
+                         insecure=False,
+                         compression=None,
+                         wait_for_ready=None,
+                         timeout=None,
+                         metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/delete_subsystem',
-            gateway__pb2.delete_subsystem_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.delete_subsystem_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def add_namespace(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/Gateway/add_namespace',
-            gateway__pb2.add_namespace_req.SerializeToString,
-            gateway__pb2.nsid_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+    def list_namespaces(request,
+                        target,
+                        options=(),
+                        channel_credentials=None,
+                        call_credentials=None,
+                        insecure=False,
+                        compression=None,
+                        wait_for_ready=None,
+                        timeout=None,
+                        metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/list_namespaces',
+                                             gateway__pb2.list_namespaces_req.SerializeToString,
+                                             gateway__pb2.namespaces_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def remove_namespace(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/Gateway/remove_namespace',
-            gateway__pb2.remove_namespace_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+    def namespace_resize(request,
+                         target,
+                         options=(),
+                         channel_credentials=None,
+                         call_credentials=None,
+                         insecure=False,
+                         compression=None,
+                         wait_for_ready=None,
+                         timeout=None,
+                         metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/namespace_resize',
+                                             gateway__pb2.namespace_resize_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def namespace_get_io_stats(request,
+                               target,
+                               options=(),
+                               channel_credentials=None,
+                               call_credentials=None,
+                               insecure=False,
+                               compression=None,
+                               wait_for_ready=None,
+                               timeout=None,
+                               metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/namespace_get_io_stats',
+                                             gateway__pb2.namespace_get_io_stats_req.SerializeToString,
+                                             gateway__pb2.namespace_io_stats_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def namespace_set_qos_limits(request,
+                                 target,
+                                 options=(),
+                                 channel_credentials=None,
+                                 call_credentials=None,
+                                 insecure=False,
+                                 compression=None,
+                                 wait_for_ready=None,
+                                 timeout=None,
+                                 metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/namespace_set_qos_limits',
+                                             gateway__pb2.namespace_set_qos_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def namespace_change_load_balancing_group(request,
+                                              target,
+                                              options=(),
+                                              channel_credentials=None,
+                                              call_credentials=None,
+                                              insecure=False,
+                                              compression=None,
+                                              wait_for_ready=None,
+                                              timeout=None,
+                                              metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/namespace_change_load_balancing_group',
+                                             gateway__pb2.namespace_change_load_balancing_group_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def namespace_delete(request,
+                         target,
+                         options=(),
+                         channel_credentials=None,
+                         call_credentials=None,
+                         insecure=False,
+                         compression=None,
+                         wait_for_ready=None,
+                         timeout=None,
+                         metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/namespace_delete',
+                                             gateway__pb2.namespace_delete_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def add_host(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                 target,
+                 options=(),
+                 channel_credentials=None,
+                 call_credentials=None,
+                 insecure=False,
+                 compression=None,
+                 wait_for_ready=None,
+                 timeout=None,
+                 metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/add_host',
-            gateway__pb2.add_host_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.add_host_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def remove_host(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                    target,
+                    options=(),
+                    channel_credentials=None,
+                    call_credentials=None,
+                    insecure=False,
+                    compression=None,
+                    wait_for_ready=None,
+                    timeout=None,
+                    metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/remove_host',
-            gateway__pb2.remove_host_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.remove_host_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def list_hosts(request,
+                   target,
+                   options=(),
+                   channel_credentials=None,
+                   call_credentials=None,
+                   insecure=False,
+                   compression=None,
+                   wait_for_ready=None,
+                   timeout=None,
+                   metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/list_hosts',
+                                             gateway__pb2.list_hosts_req.SerializeToString,
+                                             gateway__pb2.hosts_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def list_connections(request,
+                         target,
+                         options=(),
+                         channel_credentials=None,
+                         call_credentials=None,
+                         insecure=False,
+                         compression=None,
+                         wait_for_ready=None,
+                         timeout=None,
+                         metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/list_connections',
+                                             gateway__pb2.list_connections_req.SerializeToString,
+                                             gateway__pb2.connections_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def create_listener(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                        target,
+                        options=(),
+                        channel_credentials=None,
+                        call_credentials=None,
+                        insecure=False,
+                        compression=None,
+                        wait_for_ready=None,
+                        timeout=None,
+                        metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/create_listener',
-            gateway__pb2.create_listener_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.create_listener_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def delete_listener(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                        target,
+                        options=(),
+                        channel_credentials=None,
+                        call_credentials=None,
+                        insecure=False,
+                        compression=None,
+                        wait_for_ready=None,
+                        timeout=None,
+                        metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/delete_listener',
-            gateway__pb2.delete_listener_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.delete_listener_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def list_listeners(request,
+                       target,
+                       options=(),
+                       channel_credentials=None,
+                       call_credentials=None,
+                       insecure=False,
+                       compression=None,
+                       wait_for_ready=None,
+                       timeout=None,
+                       metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/list_listeners',
+                                             gateway__pb2.list_listeners_req.SerializeToString,
+                                             gateway__pb2.listeners_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def get_subsystems(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/Gateway/get_subsystems',
-            gateway__pb2.get_subsystems_req.SerializeToString,
-            gateway__pb2.subsystems_info.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+    def list_subsystems(request,
+                        target,
+                        options=(),
+                        channel_credentials=None,
+                        call_credentials=None,
+                        insecure=False,
+                        compression=None,
+                        wait_for_ready=None,
+                        timeout=None,
+                        metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/Gateway/list_subsystems',
+                                             gateway__pb2.list_subsystems_req.SerializeToString,
+                                             gateway__pb2.subsystems_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def get_spdk_nvmf_log_flags_and_level(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                                          target,
+                                          options=(),
+                                          channel_credentials=None,
+                                          call_credentials=None,
+                                          insecure=False,
+                                          compression=None,
+                                          wait_for_ready=None,
+                                          timeout=None,
+                                          metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/get_spdk_nvmf_log_flags_and_level',
-            gateway__pb2.get_spdk_nvmf_log_flags_and_level_req.SerializeToString,
-            gateway__pb2.spdk_nvmf_log_flags_and_level_info.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.get_spdk_nvmf_log_flags_and_level_req.SerializeToString,
+                                             gateway__pb2.spdk_nvmf_log_flags_and_level_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def disable_spdk_nvmf_logs(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                               target,
+                               options=(),
+                               channel_credentials=None,
+                               call_credentials=None,
+                               insecure=False,
+                               compression=None,
+                               wait_for_ready=None,
+                               timeout=None,
+                               metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/disable_spdk_nvmf_logs',
-            gateway__pb2.disable_spdk_nvmf_logs_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.disable_spdk_nvmf_logs_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def set_spdk_nvmf_logs(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                           target,
+                           options=(),
+                           channel_credentials=None,
+                           call_credentials=None,
+                           insecure=False,
+                           compression=None,
+                           wait_for_ready=None,
+                           timeout=None,
+                           metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/set_spdk_nvmf_logs',
-            gateway__pb2.set_spdk_nvmf_logs_req.SerializeToString,
-            gateway__pb2.req_status.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.set_spdk_nvmf_logs_req.SerializeToString,
+                                             gateway__pb2.req_status.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
     def get_gateway_info(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
+                         target,
+                         options=(),
+                         channel_credentials=None,
+                         call_credentials=None,
+                         insecure=False,
+                         compression=None,
+                         wait_for_ready=None,
+                         timeout=None,
+                         metadata=None):
         return grpc.experimental.unary_unary(request, target, '/Gateway/get_gateway_info',
-            gateway__pb2.get_gateway_info_req.SerializeToString,
-            gateway__pb2.gateway_info.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+                                             gateway__pb2.get_gateway_info_req.SerializeToString,
+                                             gateway__pb2.gateway_info.FromString,
+                                             options, channel_credentials,
+                                             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
index 47756e946e125facafcecb6d2d94917317ff81df..c40ab440f1dc5c0691a7db1956ddec9280a197fd 100644 (file)
@@ -14,6 +14,7 @@ addopts =
     --cov --cov-append --cov-report=term
     --doctest-modules
     --ignore=frontend/ --ignore=module.py
+    --ignore=services/proto/
     --instafail
 
 [base]
@@ -70,6 +71,7 @@ exclude =
     .eggs,
     venv,
     frontend,
+    services/proto
 statistics = True
 #TODO: Uncomment and refactor (https://tracker.ceph.com/issues/41221)
 #max-complexity = 10