VOL-217 - Move devices_handlers to IAdapter base class.
This change allows all adapters to share the base device_handlers
functionality.
Change-Id: If467be418f239a1747769d186a2719df45ac2249
Signed-off-by: Shad Ansari <shad@onlab.us>
diff --git a/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py b/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py
index ab7200e..18d0f04 100644
--- a/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py
+++ b/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py
@@ -24,8 +24,12 @@
def __init__(self, adapter_agent, config):
super(Asfvolt16Adapter, self).__init__(adapter_agent=adapter_agent,
config=config,
+ device_handler_class = Asfvolt16Handler,
name='asfvolt16_olt',
vendor='Edgecore',
version='0.1')
# register for adapter messages
self.adapter_agent.register_for_inter_adapter_messages()
+
+class Asfvolt16Handler(object):
+ pass
diff --git a/voltha/adapters/iadapter.py b/voltha/adapters/iadapter.py
index b94c35a..3588f72 100644
--- a/voltha/adapters/iadapter.py
+++ b/voltha/adapters/iadapter.py
@@ -20,6 +20,7 @@
import structlog
from zope.interface import implementer
+from twisted.internet import reactor
from voltha.protos.device_pb2 import DeviceType, DeviceTypes
from voltha.adapters.interface import IAdapterInterface
@@ -32,7 +33,7 @@
@implementer(IAdapterInterface)
class IAdapter(object):
- def __init__(self, adapter_agent, config, name, vendor, version):
+ def __init__(self, adapter_agent, config, device_handler_class, name, vendor, version):
log.debug('Initializing adapter: {} {} {}'.format(vendor, name, version))
self.adapter_agent = adapter_agent
self.config = config
@@ -50,6 +51,8 @@
version=version,
config=AdapterConfig(log_level=LogLevel.INFO)
)
+ self.devices_handlers = dict() # device_id -> Olt/OnuHandler()
+ self.device_handler_class = device_handler_class
def start(self):
log.info('Starting adapter: {}'.format(self.name))
@@ -73,7 +76,9 @@
raise NotImplementedError()
def adopt_device(self, device):
- raise NotImplementedError()
+ self.devices_handlers[device.id] = self.device_handler_class(self, device.id)
+ reactor.callLater(0, self.devices_handlers[device.id].activate, device)
+ return device
def reconcile_device(self, device):
raise NotImplementedError()
@@ -82,28 +87,43 @@
raise NotImplementedError()
def disable_device(self, device):
- raise NotImplementedError()
+ log.info('disable-device', device_id=device.id)
+ reactor.callLater(0, self.devices_handlers[device.id].disable)
+ return device
def reenable_device(self, device):
- raise NotImplementedError()
+ log.info('reenable-device', device_id=device.id)
+ reactor.callLater(0, self.devices_handlers[device.id].reenable)
+ return device
def reboot_device(self, device):
- raise NotImplementedError()
+ log.info('reboot-device', device_id=device.id)
+ reactor.callLater(0, self.devices_handlers[device.id].reboot)
+ return device
def delete_device(self, device):
- raise NotImplementedError()
+ log.info('delete-device', device_id=device.id)
+ # TODO: Update the logical device mapping
+ reactor.callLater(0, self.devices_handlers[device.id].delete)
+ return device
def get_device_details(self, device):
raise NotImplementedError()
def update_flows_bulk(self, device, flows, groups):
- raise NotImplementedError()
+ log.info('bulk-flow-update', device_id=device.id,
+ flows=flows, groups=groups)
+ assert len(groups.items) == 0
+ handler = self.devices_handlers[device.id]
+ return handler.update_flow_table(flows.items)
def update_flows_incrementally(self, device, flow_changes, group_changes):
raise NotImplementedError()
def send_proxied_message(self, proxy_address, msg):
- raise NotImplementedError()
+ log.info('send-proxied-message', proxy_address=proxy_address, msg=msg)
+ handler = self.devices_handlers[proxy_address.device_id]
+ handler.send_proxied_message(proxy_address, msg)
def receive_proxied_message(self, proxy_address, msg):
raise NotImplementedError()
diff --git a/voltha/adapters/ponsim_olt/ponsim_olt.py b/voltha/adapters/ponsim_olt/ponsim_olt.py
index e6f42ab..994ab14 100644
--- a/voltha/adapters/ponsim_olt/ponsim_olt.py
+++ b/voltha/adapters/ponsim_olt/ponsim_olt.py
@@ -179,23 +179,19 @@
def __init__(self, adapter_agent, config):
super(PonSimOltAdapter, self).__init__(adapter_agent=adapter_agent,
config=config,
+ device_handler_class=PonSimOltHandler,
name='ponsim_olt',
vendor='Voltha project',
version='0.4')
- self.devices_handlers = dict() # device_id -> PonSimOltHandler()
self.logical_device_id_to_root_device_id = dict()
+
def update_pm_config(self, device, pm_config):
log.info("adapter-update-pm-config", device=device,
pm_config=pm_config)
handler = self.devices_handlers[device.id]
handler.update_pm_config(device, pm_config)
- def adopt_device(self, device):
- self.devices_handlers[device.id] = PonSimOltHandler(self, device.id)
- reactor.callLater(0, self.devices_handlers[device.id].activate, device)
- return device
-
def reconcile_device(self, device):
try:
self.devices_handlers[device.id] = PonSimOltHandler(self,
@@ -213,39 +209,6 @@
except Exception, e:
log.exception('Exception', e=e)
- def disable_device(self, device):
- log.info('disable-device', device_id=device.id)
- reactor.callLater(0, self.devices_handlers[device.id].disable)
- return device
-
- def reenable_device(self, device):
- log.info('reenable-device', device_id=device.id)
- reactor.callLater(0, self.devices_handlers[device.id].reenable)
- return device
-
- def reboot_device(self, device):
- log.info('reboot-device', device_id=device.id)
- reactor.callLater(0, self.devices_handlers[device.id].reboot)
- return device
-
- def delete_device(self, device):
- log.info('delete-device', device_id=device.id)
- # TODO: Update the logical device mapping
- reactor.callLater(0, self.devices_handlers[device.id].delete)
- return device
-
- def update_flows_bulk(self, device, flows, groups):
- log.info('bulk-flow-update', device_id=device.id,
- flows=flows, groups=groups)
- assert len(groups.items) == 0
- handler = self.devices_handlers[device.id]
- return handler.update_flow_table(flows.items)
-
- def send_proxied_message(self, proxy_address, msg):
- log.info('send-proxied-message', proxy_address=proxy_address, msg=msg)
- handler = self.devices_handlers[proxy_address.device_id]
- handler.send_proxied_message(proxy_address, msg)
-
def receive_packet_out(self, logical_device_id, egress_port_no, msg):
def ldi_to_di(ldi):
di = self.logical_device_id_to_root_device_id.get(ldi)
diff --git a/voltha/adapters/ponsim_onu/ponsim_onu.py b/voltha/adapters/ponsim_onu/ponsim_onu.py
index 781e212..d9faff8 100644
--- a/voltha/adapters/ponsim_onu/ponsim_onu.py
+++ b/voltha/adapters/ponsim_onu/ponsim_onu.py
@@ -42,55 +42,14 @@
def __init__(self, adapter_agent, config):
super(PonSimOnuAdapter, self).__init__(adapter_agent=adapter_agent,
config=config,
+ device_handler_class = PonSimOnuHandler,
name='ponsim_onu',
vendor='Voltha project',
version='0.4')
- self.devices_handlers = dict() # device_id -> PonSimOltHandler()
-
- def adopt_device(self, device):
- self.devices_handlers[device.id] = PonSimOnuHandler(self, device.id)
- reactor.callLater(0, self.devices_handlers[device.id].activate, device)
- return device
-
- def reconcile_device(self, device):
- self.devices_handlers[device.id] = PonSimOnuHandler(self, device.id)
- # Reconcile only if state was ENABLED
- if device.admin_state == AdminState.ENABLED:
- reactor.callLater(0,
- self.devices_handlers[device.id].reconcile,
- device)
- return device
-
- def disable_device(self, device):
- log.info('disable-device', device_id=device.id)
- reactor.callLater(0, self.devices_handlers[device.id].disable)
- return device
-
- def reenable_device(self, device):
- log.info('reenable-device', device_id=device.id)
- reactor.callLater(0, self.devices_handlers[device.id].reenable)
- return device
-
- def reboot_device(self, device):
- log.info('rebooting', device_id=device.id)
- reactor.callLater(0, self.devices_handlers[device.id].reboot)
- return device
-
- def delete_device(self, device):
- log.info('delete-device', device_id=device.id)
- reactor.callLater(0, self.devices_handlers[device.id].delete)
- return device
def get_device_details(self, device):
raise NotImplementedError()
- def update_flows_bulk(self, device, flows, groups):
- log.info('bulk-flow-update', device_id=device.id,
- flows=flows, groups=groups)
- assert len(groups.items) == 0
- handler = self.devices_handlers[device.id]
- return handler.update_flow_table(flows.items)
-
def send_proxied_message(self, proxy_address, msg):
log.info('send-proxied-message', proxy_address=proxy_address, msg=msg)