diff --git a/framework/crb.py b/framework/crb.py
index c9909add..e4a297dd 100755
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -51,18 +51,23 @@ class Crb(object):
     CPU/PCI/NIC on the board and setup running environment for DPDK.
     """
 
+    PCI_DEV_CACHE_KEY = None
+    NUMBER_CORES_CACHE_KEY = None
+    CORE_LIST_CACHE_KEY = None
+
     def __init__(self, crb, serializer, name, alt_session=True, dut_id=0):
         self.dut_id = dut_id
         self.crb = crb
         self.read_cache = False
         self.skip_setup = False
         self.serializer = serializer
-        self.ports_info = None
+        self.ports_info = []
         self.sessions = []
         self.stage = 'pre-init'
         self.name = name
         self.trex_prefix = None
         self.default_hugepages_cleared = False
+        self.prefix_list = []
 
         self.logger = getLogger(name)
         self.session = SSHConnection(self.get_ip_address(), name,
@@ -80,6 +85,24 @@ class Crb(object):
         else:
             self.alt_session = None
 
+    def get_ip_address(self):
+        """
+        Get CRB's ip address.
+        """
+        return self.crb['IP']
+
+    def get_password(self):
+        """
+        Get CRB's login password.
+        """
+        return self.crb['pass']
+
+    def get_username(self):
+        """
+        Get CRB's login username.
+        """
+        return self.crb['user']
+
     def send_expect(self, cmds, expected, timeout=TIMEOUT,
                     alt_session=False, verify=False, trim_whitespace=True):
         """
@@ -137,7 +160,7 @@ class Crb(object):
             else:
                 self.session.close(force=True)
         except Exception as e:
-            self.loggger.error("Session close failed for [%s]" % e)
+            self.logger.error("Session close failed for [%s]" % e)
 
         if alt_session:
             session = SSHConnection(
@@ -388,7 +411,7 @@ class Crb(object):
                                (domain_id, bus_id, devfun_id), "# ", alt_session=True)
         rexp = r"PCI_ID=(.+)"
         pattern = re.compile(rexp)
-        match = re.search(out)
+        match = re.search(pattern, out)
         if not match:
             return None
         return match.group(1)
diff --git a/framework/dut.py b/framework/dut.py
index dc3fc874..25d3c64b 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -71,14 +71,12 @@ class Dut(Crb):
         self.tester = None
         self.cores = []
         self.architecture = None
-        self.ports_info = []
         self.conf = PortConf()
         self.ports_map = []
         self.virt_pool = None
         # hypervisor pid list, used for cleanup
         self.virt_pids = []
         self.prefix_subfix = str(os.getpid()) + '_' + time.strftime("%Y%m%d%H%M%S", time.localtime())
-        self.prefix_list = []
         self.hugepage_path = None
         self.apps_name_conf = {}
         self.apps_name = {}
@@ -350,24 +348,6 @@ class Dut(Crb):
         """
         self.send_expect('mount -t procfs proc /proc', '# ')
 
-    def get_ip_address(self):
-        """
-        Get DUT's ip address.
-        """
-        return self.crb['IP']
-
-    def get_password(self):
-        """
-        Get DUT's login password.
-        """
-        return self.crb['pass']
-
-    def get_username(self):
-        """
-        Get DUT's login username.
-        """
-        return self.crb['user']
-
     def dut_prerequisites(self):
         """
         Prerequest function should be called before execute any test case.
diff --git a/framework/tester.py b/framework/tester.py
index 9dba4e4d..fa8a5f69 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -151,24 +151,6 @@ class Tester(Crb):
         """
         self.re_run_time = int(re_run_time)
 
-    def get_ip_address(self):
-        """
-        Get ip address of tester CRB.
-        """
-        return self.crb['tester IP']
- 
-    def get_username(self):
-        """
-        Get login username of tester CRB.
-        """
-        return USERNAME
-
-    def get_password(self):
-        """
-        Get tester login password of tester CRB.
-        """
-        return self.crb['tester pass']
-
     @property
     def is_pktgen(self):
         """
diff --git a/framework/virt_dut.py b/framework/virt_dut.py
index bde65667..ca8c8c6b 100644
--- a/framework/virt_dut.py
+++ b/framework/virt_dut.py
@@ -78,11 +78,9 @@ class VirtDut(DPDKdut):
         self.tester = None
         self.cores = []
         self.architecture = None
-        self.ports_info = None
         self.ports_map = []
         self.virttype = virttype
         self.prefix_subfix = str(os.getpid()) + '_' + time.strftime("%Y%m%d%H%M%S", time.localtime())
-        self.prefix_list = []
         self.apps_name_conf = {}
         self.apps_name = {}
 
