Merge "vpp: Initial support of VPP vSwitch"
[vswitchperf.git] / core / loader / loader.py
index 5778775..b0990fa 100755 (executable)
@@ -1,4 +1,4 @@
-# Copyright 2015 Intel Corporation.
+# Copyright 2015-2017 Intel Corporation.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 
 from conf import settings
 from core.loader.loader_servant import LoaderServant
-from tools.pkt_gen.trafficgen import ITrafficGenerator
 from tools.collectors.collector import ICollector
+from tools.pkt_fwd.pkt_fwd import IPktFwd
+from tools.pkt_gen.trafficgen import ITrafficGenerator
 from vswitches.vswitch import IVSwitch
+from vnfs.vnf.vnf import IVnf
 
 class Loader(object):
     """Loader class - main object context holder.
@@ -27,6 +29,7 @@ class Loader(object):
     _trafficgen_loader = None
     _metrics_loader = None
     _vswitch_loader = None
+    _vnf_loader = None
 
     def __init__(self):
         """Loader ctor - initialization method.
@@ -50,6 +53,16 @@ class Loader(object):
             settings.getValue('VSWITCH'),
             IVSwitch)
 
+        self._vnf_loader = LoaderServant(
+            settings.getValue('VNF_DIR'),
+            settings.getValue('VNF'),
+            IVnf)
+
+        self._pktfwd_loader = LoaderServant(
+            settings.getValue('PKTFWD_DIR'),
+            settings.getValue('PKTFWD'),
+            IPktFwd)
+
     def get_trafficgen(self):
         """Returns a new instance configured traffic generator.
 
@@ -102,7 +115,7 @@ class Loader(object):
 
         :return: Dictionary of collectors.
             - key: name of the class which implements ICollector,
-            - value: Type of traffic generator which implements ICollector.
+            - value: Type of collector which implements ICollector.
         """
         return self._metrics_loader.get_classes()
 
@@ -133,7 +146,7 @@ class Loader(object):
 
         :return: Dictionary of vswitches.
             - key: name of the class which implements IVSwitch,
-            - value: Type of traffic generator which implements IVSwitch.
+            - value: Type of vswitch which implements IVSwitch.
         """
         return self._vswitch_loader.get_classes()
 
@@ -144,10 +157,64 @@ class Loader(object):
         """
         return self._vswitch_loader.get_classes_printable()
 
+    def get_vnf(self):
+        """Returns instance of currently configured vnf implementation.
+
+        :return: IVnf implementation if available, None otherwise.
+        """
+        return self._vnf_loader.get_class()()
+
     def get_vnf_class(self):
-        """Returns a new instance of the configured VNF
+        """Returns type of currently configured vnf implementation.
+
+        :return: Type of IVnf implementation if available.
+            None otherwise.
+        """
+        return self._vnf_loader.get_class()
+
+    def get_vnfs(self):
+        """Returns dictionary of all available vnfs.
+
+        :return: Dictionary of vnfs.
+            - key: name of the class which implements IVnf,
+            - value: Type of vnf which implements IVnf.
+        """
+        return self._vnf_loader.get_classes()
+
+    def get_vnfs_printable(self):
+        """Returns all available vnfs in printable format.
+
+        :return: String containing printable list of vnfs.
+        """
+        return self._vnf_loader.get_classes_printable()
+
+    def get_pktfwd(self):
+        """Returns instance of currently configured packet forwarder implementation.
+
+        :return: IPktFwd implementation if available, None otherwise.
+        """
+        return self._pktfwd_loader.get_class()()
+
+    def get_pktfwd_class(self):
+        """Returns type of currently configured packet forwarder implementation.
+
+        :return: Type of IPktFwd implementation if available.
+            None otherwise.
+        """
+        return self._pktfwd_loader.get_class()
+
+    def get_pktfwds(self):
+        """Returns dictionary of all available packet forwarders.
+
+        :return: Dictionary of packet forwarders.
+            - key: name of the class which implements IPktFwd,
+            - value: Type of packet forwarder which implements IPktFwd.
+        """
+        return self._pktfwd_loader.get_classes()
+
+    def get_pktfwds_printable(self):
+        """Returns all available packet forwarders in printable format.
 
-        Currently always returns None
+        :return: String containing printable list of packet forwarders.
         """
-        #TODO: Load the VNF class
-        return None
+        return self._pktfwd_loader.get_classes_printable()