コード例 #1
0
 def test_update_device_up(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_mlnx_api(rpcapi, topics.PLUGIN,
                         'update_device_up', rpc_method='call',
                         device='fake_device',
                         agent_id='fake_agent_id',
                         host='fake_host')
コード例 #2
0
    def setup_rpc(self):
        # print("cfarquhar: in setup_rpc")
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
        self.sg_agent = agent_sg_rpc.SecurityGroupAgentRpc(
            self.context, self.sg_plugin_rpc, defer_refresh_firewall=True)
        # LOG.info("cfarquhar: vars(plugin_rpc): {}".format(vars(self.plugin_rpc)))
        # LOG.info("cfarquhar: vars(sg_plugin_rpc): {}".format(vars(self.sg_plugin_rpc)))
        # LOG.info("cfarquhar: vars(sg_agent.plugin_rpc): {}".format(vars(self.sg_agent.plugin_rpc)))

        self.agent_id = self.mgr.get_agent_id()
        LOG.info("RPC agent_id: %s", self.agent_id)

        self.topic = topics.AGENT
        self.state_rpc = agent_rpc.PluginReportStateAPI(topics.REPORTS)
        # RPC network init
        # Handle updates from service
        self.rpc_callbacks = self.mgr.get_rpc_callbacks(
            self.context, self, self.sg_agent)
        self.endpoints = [self.rpc_callbacks]
        self._validate_rpc_endpoints()
        # Define the listening consumers for the agent
        consumers = self.mgr.get_rpc_consumers()
        self.connection = agent_rpc.create_consumers(self.endpoints,
                                                     self.topic,
                                                     consumers,
                                                     start_listening=False)
コード例 #3
0
ファイル: l2_agent.py プロジェクト: wenhuizhang/neutron
    def _setup_rpc(self):
        self.agent_id = 'hyperv_%s' % platform.node()
        self.topic = topics.AGENT
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)

        self.state_rpc = agent_rpc.PluginReportStateAPI(topics.PLUGIN)

        # RPC network init
        self.context = context.get_admin_context_without_session()
        # Handle updates from service
        self.endpoints = [self]
        # Define the listening consumers for the agent
        consumers = [[topics.PORT, topics.UPDATE],
                     [topics.NETWORK, topics.DELETE],
                     [topics.PORT, topics.DELETE], [TUNNEL, topics.UPDATE]]
        self.connection = agent_rpc.create_consumers(self.endpoints,
                                                     self.topic, consumers)

        self.client = n_rpc.get_client(self.target)

        self.sec_groups_agent = HyperVSecurityAgent(self.context,
                                                    self.sg_plugin_rpc)
        report_interval = CONF.AGENT.report_interval
        if report_interval:
            heartbeat = loopingcall.FixedIntervalLoopingCall(
                self._report_state)
            heartbeat.start(interval=report_interval)
コード例 #4
0
    def _setup_rpc(self):
        self.agent_id = 'vbox_%s' % platform.node()
        self.topic = topics.AGENT
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.state_rpc = agent_rpc.PluginReportStateAPI(topics.PLUGIN)
        # RPC network init
        self.context = n_context.get_admin_context_without_session()
        # Handle updates from service
        self.endpoints = [self]
        # Define the listening consumers for the agent
        consumers = [[topics.PORT, topics.UPDATE],
                     [topics.NETWORK, topics.DELETE],
                     [topics.PORT, topics.DELETE],
                     [constants.TUNNEL, topics.UPDATE]]
        self.connection = agent_rpc.create_consumers(self.endpoints,
                                                     self.topic, consumers)
        self.sec_groups_agent = VBoxSecurityAgent(self.context,
                                                  self.plugin_rpc)

        report_interval = CONF.AGENT.report_interval
        if report_interval:
            heartbeat = loopingcall.FixedIntervalLoopingCall(
                self._report_state)
            heartbeat.start(interval=report_interval)

        self.agent_state = {
            'binary': 'neutron-vbox-agent',
            'host': cfg.CONF.host,
            'topic': n_const.L2_AGENT_TOPIC,
            'configurations': {
                'network_mappings': self._physical_network_mappings
            },
            'agent_type': n_const.AGENT_TYPE_VBOX,
            'start_flag': True
        }
コード例 #5
0
 def test_device_details(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_rpc_api(rpcapi, None,
                        'get_device_details', rpc_method='call',
                        device='fake_device',
                        agent_id='fake_agent_id',
                        host='fake_host')
コード例 #6
0
 def test_update_device_down(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_hyperv_neutron_api(
         rpcapi, topics.PLUGIN,
         'update_device_down', rpc_method='call',
         device='fake_device',
         agent_id='fake_agent_id')
コード例 #7
0
 def test_tunnel_sync(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_hyperv_neutron_api(
         rpcapi, topics.PLUGIN,
         'tunnel_sync', rpc_method='call',
         tunnel_ip='fake_tunnel_ip',
         tunnel_type=None)
コード例 #8
0
    def __init__(self, physical_devices_mappings, exclude_devices,
                 polling_interval):

        self.polling_interval = polling_interval
        self.setup_eswitch_mgr(physical_devices_mappings, exclude_devices)
        configurations = {'device_mappings': physical_devices_mappings}
        self.agent_state = {
            'binary': 'neutron-sriov-nic-agent',
            'host': cfg.CONF.host,
            'topic': q_constants.L2_AGENT_TOPIC,
            'configurations': configurations,
            'agent_type': q_constants.AGENT_TYPE_NIC_SWITCH,
            'start_flag': True
        }

        # Stores port update notifications for processing in the main loop
        self.updated_devices = set()

        self.context = context.get_admin_context_without_session()
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
        self.sg_agent = sg_rpc.SecurityGroupAgentRpc(self.context,
                                                     self.sg_plugin_rpc)
        self._setup_rpc()
        # Initialize iteration counter
        self.iter_num = 0
コード例 #9
0
 def test_devices_details_list(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_rpc_api(rpcapi, None,
                        'get_devices_details_list', rpc_method='call',
                        devices=['fake_device1', 'fake_device2'],
                        agent_id='fake_agent_id', host='fake_host',
                        version='1.3')
コード例 #10
0
    def __init__(self, physical_devices_mappings, exclude_devices,
                 polling_interval):

        self.polling_interval = polling_interval
        self.conf = cfg.CONF
        self.setup_eswitch_mgr(physical_devices_mappings, exclude_devices)
        configurations = {'device_mappings': physical_devices_mappings}
        self.agent_state = {
            'binary': 'neutron-sriov-nic-agent',
            'host': self.conf.host,
            'topic': n_constants.L2_AGENT_TOPIC,
            'configurations': configurations,
            'agent_type': n_constants.AGENT_TYPE_NIC_SWITCH,
            'start_flag': True
        }

        # Stores port update notifications for processing in the main loop
        self.updated_devices = set()
        self.mac_to_port_id_mapping = {}

        self.context = context.get_admin_context_without_session()
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
        self.sg_agent = sg_rpc.SecurityGroupAgentRpc(self.context,
                                                     self.sg_plugin_rpc)
        self._setup_rpc()
        self.ext_manager = self._create_agent_extension_manager(
            self.connection)
        # The initialization is complete; we can start receiving messages
        self.connection.consume_in_threads()
        # Initialize iteration counter
        self.iter_num = 0
コード例 #11
0
 def test_update_device_list_unsupported(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     ctxt = oslo_context.RequestContext('fake_user', 'fake_project')
     devices_up = ['fake_device1', 'fake_device2']
     devices_down = ['fake_device3', 'fake_device4']
     expected_ret_val = {
         'devices_up': ['fake_device2'],
         'failed_devices_up': ['fake_device1'],
         'devices_down': [{
             'device': 'fake_device3',
             'exists': True
         }],
         'failed_devices_down': ['fake_device4']
     }
     rpcapi.update_device_up = mock.Mock(
         side_effect=[Exception('fake_device1 fails'), None])
     rpcapi.update_device_down = mock.Mock(
         side_effect=[{
             'device': 'fake_device3',
             'exists': True
         },
                      Exception('fake_device4 fails')])
     with mock.patch.object(rpcapi.client, 'call'),\
             mock.patch.object(rpcapi.client, 'prepare') as prepare_mock:
         prepare_mock.side_effect = oslo_messaging.UnsupportedVersion(
             'test')
         res = rpcapi.update_device_list(ctxt, devices_up, devices_down,
                                         'fake_agent_id', 'fake_host')
         self.assertEqual(expected_ret_val, res)
コード例 #12
0
    def __init__(self, interface_mappings, polling_interval):
        self.polling_interval = polling_interval
        self.setup_linux_bridge(interface_mappings)
        configurations = {'interface_mappings': interface_mappings}
        if self.br_mgr.vxlan_mode != lconst.VXLAN_NONE:
            configurations['tunneling_ip'] = self.br_mgr.local_ip
            configurations['tunnel_types'] = [p_const.TYPE_VXLAN]
            configurations['l2_population'] = cfg.CONF.VXLAN.l2_population
        self.agent_state = {
            'binary': 'neutron-linuxbridge-agent',
            'host': cfg.CONF.host,
            'topic': constants.L2_AGENT_TOPIC,
            'configurations': configurations,
            'agent_type': constants.AGENT_TYPE_LINUXBRIDGE,
            'start_flag': True
        }

        # stores received port_updates for processing by the main loop
        self.updated_devices = set()
        self.context = context.get_admin_context_without_session()
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
        self.sg_agent = sg_rpc.SecurityGroupAgentRpc(self.context,
                                                     self.sg_plugin_rpc)
        self.setup_rpc(interface_mappings.values())
コード例 #13
0
    def start(self):
        self.prevent_arp_spoofing = cfg.CONF.AGENT.prevent_arp_spoofing
        self.setup_linux_bridge(self.bridge_mappings, self.interface_mappings)
        configurations = {
            'bridge_mappings': self.bridge_mappings,
            'interface_mappings': self.interface_mappings
        }
        if self.br_mgr.vxlan_mode != lconst.VXLAN_NONE:
            configurations['tunneling_ip'] = self.br_mgr.local_ip
            configurations['tunnel_types'] = [p_const.TYPE_VXLAN]
            configurations['l2_population'] = cfg.CONF.VXLAN.l2_population
        self.agent_state = {
            'binary': 'neutron-linuxbridge-agent',
            'host': cfg.CONF.host,
            'topic': constants.L2_AGENT_TOPIC,
            'configurations': configurations,
            'agent_type': constants.AGENT_TYPE_LINUXBRIDGE,
            'start_flag': True
        }

        # stores received port_updates for processing by the main loop
        self.updated_devices = set()
        # flag to do a sync after revival
        self.fullsync = False
        self.context = context.get_admin_context_without_session()
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
        self.sg_agent = sg_rpc.SecurityGroupAgentRpc(
            self.context, self.sg_plugin_rpc, defer_refresh_firewall=True)
        self.setup_rpc(self.interface_mappings.values())
        self.daemon_loop()
コード例 #14
0
 def test_get_ports_by_vnic_type_and_host(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_rpc_api(rpcapi, None,
                        'get_ports_by_vnic_type_and_host',
                        rpc_method='call',
                        vnic_type='fake_device1',
                        host='fake_host',
                        version='1.7')
コード例 #15
0
 def test_update_device_up(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_rpc_api(rpcapi, None,
                        'update_device_up', rpc_method='call',
                        device='fake_device',
                        agent_id='fake_agent_id',
                        host='fake_host',
                        version='1.9')
コード例 #16
0
 def test_tunnel_sync(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_rpc_api(rpcapi, None,
                        'tunnel_sync', rpc_method='call',
                        tunnel_ip='fake_tunnel_ip',
                        tunnel_type=None,
                        host='fake_host',
                        version='1.4')
コード例 #17
0
 def test_devices_details_list(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_hyperv_neutron_api(rpcapi,
                                   topics.PLUGIN,
                                   'get_devices_details_list',
                                   rpc_method='call',
                                   devices=['fake_device1', 'fake_device2'],
                                   agent_id='fake_agent_id',
                                   version='1.2')
コード例 #18
0
 def test_update_device_down(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_ovs_api(rpcapi,
                        None,
                        'update_device_down',
                        rpc_method='call',
                        device='fake_device',
                        agent_id='fake_agent_id',
                        host='fake_host')
コード例 #19
0
 def test_update_device_list(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     self._test_rpc_api(rpcapi, None,
                        'update_device_list', rpc_method='call',
                        devices_up=['fake_device1', 'fake_device2'],
                        devices_down=['fake_device3', 'fake_device4'],
                        agent_id='fake_agent_id',
                        host='fake_host',
                        version='1.5')
コード例 #20
0
 def _setup_rpc(self):
     self.topic = topics.AGENT
     self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
     self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
     self.context = q_context.get_admin_context_without_session()
     self.endpoints = [self]
     consumers = [[topics.PORT, topics.UPDATE],
                  [topics.SECURITY_GROUP, topics.UPDATE]]
     self.connection = agent_rpc.create_consumers(self.endpoints,
                                                  self.topic, consumers)
コード例 #21
0
ファイル: test_agent_rpc.py プロジェクト: yangxu2014/neutron
 def test_devices_details_list_unsupported(self):
     agent = rpc.PluginApi('fake_topic')
     ctxt = context.RequestContext('fake_user', 'fake_project')
     expect_val_get_device_details = 'foo'
     expect_val = [expect_val_get_device_details]
     with mock.patch('neutron.common.rpc.RpcProxy.call') as rpc_call:
         rpc_call.side_effect = [messaging.UnsupportedVersion('1.2'),
                                 expect_val_get_device_details]
         func_obj = getattr(agent, 'get_devices_details_list')
         actual_val = func_obj(ctxt, ['fake_device'], 'fake_agent_id')
     self.assertEqual(actual_val, expect_val)
コード例 #22
0
ファイル: test_agent_rpc.py プロジェクト: yangxu2014/neutron
 def _test_rpc_call(self, method):
     agent = rpc.PluginApi('fake_topic')
     ctxt = context.RequestContext('fake_user', 'fake_project')
     expect_val = 'foo'
     with mock.patch('neutron.common.rpc.RpcProxy.call') as rpc_call:
         rpc_call.return_value = expect_val
         func_obj = getattr(agent, method)
         if method == 'tunnel_sync':
             actual_val = func_obj(ctxt, 'fake_tunnel_ip')
         else:
             actual_val = func_obj(ctxt, 'fake_device', 'fake_agent_id')
     self.assertEqual(actual_val, expect_val)
コード例 #23
0
ファイル: test_rpc.py プロジェクト: zlzlnet/neutron
 def test_devices_details_list_unsupported(self):
     agent = rpc.PluginApi('fake_topic')
     ctxt = oslo_context.RequestContext('fake_user', 'fake_project')
     expect_val_get_device_details = 'foo'
     expect_val = [expect_val_get_device_details]
     with mock.patch.object(agent.client, 'call') as mock_call, \
             mock.patch.object(agent.client, 'prepare') as mock_prepare:
         mock_prepare.return_value = agent.client
         mock_call.side_effect = [oslo_messaging.UnsupportedVersion('1.2'),
                                 expect_val_get_device_details]
         func_obj = getattr(agent, 'get_devices_details_list')
         actual_val = func_obj(ctxt, ['fake_device'], 'fake_agent_id')
     self.assertEqual(actual_val, expect_val)
コード例 #24
0
 def _test_rpc_call(self, method):
     agent = rpc.PluginApi('fake_topic')
     ctxt = oslo_context.RequestContext('fake_user', 'fake_project')
     expect_val = 'foo'
     with mock.patch.object(agent.client, 'call') as mock_call,\
             mock.patch.object(agent.client, 'prepare') as mock_prepare:
         mock_prepare.return_value = agent.client
         mock_call.return_value = expect_val
         func_obj = getattr(agent, method)
         if method == 'tunnel_sync':
             actual_val = func_obj(ctxt, 'fake_tunnel_ip')
         else:
             actual_val = func_obj(ctxt, 'fake_device', 'fake_agent_id')
     self.assertEqual(actual_val, expect_val)
コード例 #25
0
    def __init__(self, physical_devices_mappings, exclude_devices,
                 polling_interval, rp_bandwidths, rp_inventory_defaults,
                 rp_hypervisors):

        self.polling_interval = polling_interval
        self.network_ports = collections.defaultdict(list)
        self.conf = cfg.CONF
        self.device_mappings = physical_devices_mappings
        self.exclude_devices = exclude_devices
        self.setup_eswitch_mgr(physical_devices_mappings, exclude_devices)

        # Stores port update notifications for processing in the main loop
        self.updated_devices = set()
        # Stores <mac, pci_slot> pairs for ports whose binding has been
        # activated.
        self.activated_bindings = set()

        self.context = context.get_admin_context_without_session()
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
        self.sg_agent = agent_sg_rpc.SecurityGroupAgentRpc(
            self.context, self.sg_plugin_rpc)
        self._setup_rpc()
        self.ext_manager = self._create_agent_extension_manager(
            self.connection)

        configurations = {
            'device_mappings': physical_devices_mappings,
            n_constants.RP_BANDWIDTHS: rp_bandwidths,
            n_constants.RP_INVENTORY_DEFAULTS: rp_inventory_defaults,
            'resource_provider_hypervisors': rp_hypervisors,
            'extensions': self.ext_manager.names()
        }

        # TODO(mangelajo): optimize resource_versions (see ovs agent)
        self.agent_state = {
            'binary': n_constants.AGENT_PROCESS_NIC_SWITCH,
            'host': self.conf.host,
            'topic': n_constants.L2_AGENT_TOPIC,
            'configurations': configurations,
            'agent_type': n_constants.AGENT_TYPE_NIC_SWITCH,
            'resource_versions': resources.LOCAL_RESOURCE_VERSIONS,
            'start_flag': True
        }

        # The initialization is complete; we can start receiving messages
        self.connection.consume_in_threads()
        # Initialize iteration counter
        self.iter_num = 0
コード例 #26
0
    def _setup_rpc(self):
        self.agent_id = 'hyperv_%s' % platform.node()
        self.topic = topics.AGENT
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)

        # RPC network init
        self.context = context.get_admin_context_without_session()
        # Handle updates from service
        self.dispatcher = self._create_rpc_dispatcher()
        # Define the listening consumers for the agent
        consumers = [[topics.PORT, topics.UPDATE],
                     [topics.NETWORK, topics.DELETE],
                     [topics.PORT, topics.DELETE],
                     [constants.TUNNEL, topics.UPDATE]]
        self.connection = agent_rpc.create_consumers(self.dispatcher,
                                                     self.topic, consumers)
コード例 #27
0
 def _setup_rpc(self):
     self.topic = topics.AGENT
     self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
     self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
     self.context = q_context.get_admin_context_without_session()
     self.endpoints = [self]
     consumers = [[topics.PORT, topics.UPDATE],
                  [topics.SECURITY_GROUP, topics.UPDATE]]
     self.connection = agent_rpc.create_consumers(self.endpoints,
                                                  self.topic, consumers)
     self.state_rpc = agent_rpc.PluginReportStateAPI(topics.PLUGIN)
     report_interval = cfg.CONF.AGENT.report_interval
     if report_interval:
         heartbeat = loopingcall.FixedIntervalLoopingCall(
             self._report_state)
         heartbeat.start(interval=report_interval)
コード例 #28
0
 def test_get_devices_details_list_and_failed_devices_unsupported(self):
     rpcapi = agent_rpc.PluginApi(topics.PLUGIN)
     ctxt = oslo_context.RequestContext('fake_user', 'fake_project')
     devices = ['fake_device1', 'fake_device2']
     dev2_details = {'device': 'fake_device2', 'network_id': 'net_id',
                     'port_id': 'port_id', 'admin_state_up': True}
     expected_ret_val = {'devices': [dev2_details],
                         'failed_devices': ['fake_device1']}
     rpcapi.get_device_details = mock.Mock(
         side_effect=[Exception('fake_device1 fails'), dev2_details])
     with mock.patch.object(rpcapi.client, 'call'),\
             mock.patch.object(rpcapi.client, 'prepare') as prepare_mock:
         prepare_mock.side_effect = oslo_messaging.UnsupportedVersion(
             'test')
         res = rpcapi.get_devices_details_list_and_failed_devices(
             ctxt, devices, 'fake_agent_id', 'fake_host')
         self.assertEqual(expected_ret_val, res)
コード例 #29
0
    def _setup_server_rpc(self):
        self.agent_id = 'zvm_agent_%s' % self._host
        self.topic = topics.AGENT
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.state_rpc = agent_rpc.PluginReportStateAPI(topics.PLUGIN)

        self.context = context.get_admin_context_without_session()

        self.endpoints = [self]
        consumers = [[topics.PORT, topics.UPDATE],
                     [topics.NETWORK, topics.DELETE]]
        self.connection = agent_rpc.create_consumers(self.endpoints,
                                                     self.topic, consumers)

        report_interval = CONF.AGENT.report_interval
        if report_interval:
            heartbeat = loopingcall.FixedIntervalLoopingCall(
                self._report_state)
            heartbeat.start(interval=report_interval)
コード例 #30
0
    def __init__(self, physical_devices_mappings, exclude_devices,
                 polling_interval):

        self.polling_interval = polling_interval
        self.network_ports = collections.defaultdict(list)
        self.conf = cfg.CONF
        self.device_mappings = physical_devices_mappings
        self.exclude_devices = exclude_devices
        self.setup_eswitch_mgr(physical_devices_mappings, exclude_devices)

        # Stores port update notifications for processing in the main loop
        self.updated_devices = set()

        self.context = context.get_admin_context_without_session()
        self.plugin_rpc = agent_rpc.PluginApi(topics.PLUGIN)
        self.sg_plugin_rpc = sg_rpc.SecurityGroupServerRpcApi(topics.PLUGIN)
        self.sg_agent = agent_sg_rpc.SecurityGroupAgentRpc(
            self.context, self.sg_plugin_rpc)
        self._setup_rpc()
        self.ext_manager = self._create_agent_extension_manager(
            self.connection)

        configurations = {
            'device_mappings': physical_devices_mappings,
            'extensions': self.ext_manager.names()
        }

        #TODO(mangelajo): optimize resource_versions (see ovs agent)
        self.agent_state = {
            'binary': 'neutron-sriov-nic-agent',
            'host': self.conf.host,
            'topic': n_constants.L2_AGENT_TOPIC,
            'configurations': configurations,
            'agent_type': n_constants.AGENT_TYPE_NIC_SWITCH,
            'resource_versions': resources.LOCAL_RESOURCE_VERSIONS,
            'start_flag': True
        }

        # The initialization is complete; we can start receiving messages
        self.connection.consume_in_threads()
        # Initialize iteration counter
        self.iter_num = 0