Use unique incrementing value for BTS CellId

Change-Id: If4559b945a3e71f3a36fd7ac760cb094278f6b39
diff --git a/src/osmo_gsm_tester/bts_octphy.py b/src/osmo_gsm_tester/bts_octphy.py
index eb1092c..bc93a3a 100644
--- a/src/osmo_gsm_tester/bts_octphy.py
+++ b/src/osmo_gsm_tester/bts_octphy.py
@@ -31,6 +31,7 @@
     pcu_sk_tmp_dir = None
     values = None
     lac = None
+    cellid = None
 
     BIN_BTS_OCTPHY = 'osmo-bts-octphy'
 
@@ -161,6 +162,8 @@
         config.overlay(values, config.get_defaults('osmo_bts_octphy'))
         if self.lac is not None:
             config.overlay(values, { 'location_area_code': self.lac })
+        if self.cellid is not None:
+            config.overlay(values, { 'cell_identity': self.cellid })
         config.overlay(values, self.conf)
         self.dbg(conf=values)
         return values
@@ -171,4 +174,7 @@
     def set_lac(self, lac):
         self.lac = lac
 
+    def set_cellid(self, cellid):
+        self.cellid = cellid
+
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py
index 731daa5..a964169 100644
--- a/src/osmo_gsm_tester/bts_osmotrx.py
+++ b/src/osmo_gsm_tester/bts_osmotrx.py
@@ -31,6 +31,7 @@
     trx = None
     pcu_sk_tmp_dir = None
     lac = None
+    cellid = None
 
     BIN_BTS_TRX = 'osmo-bts-trx'
     BIN_PCU = 'osmo-pcu'
@@ -139,6 +140,8 @@
         config.overlay(values, config.get_defaults('osmo_bts_trx'))
         if self.lac is not None:
             config.overlay(values, { 'location_area_code': self.lac })
+        if self.cellid is not None:
+            config.overlay(values, { 'cell_identity': self.cellid })
         config.overlay(values, self.conf)
         self.dbg(conf=values)
         return values
@@ -149,6 +152,9 @@
     def set_lac(self, lac):
         self.lac = lac
 
+    def set_cellid(self, cellid):
+        self.cellid = cellid
+
 class OsmoTrx(log.Origin):
     suite_run = None
     run_dir = None
diff --git a/src/osmo_gsm_tester/bts_sysmo.py b/src/osmo_gsm_tester/bts_sysmo.py
index 03dc97e..fc546ae 100644
--- a/src/osmo_gsm_tester/bts_sysmo.py
+++ b/src/osmo_gsm_tester/bts_sysmo.py
@@ -30,6 +30,7 @@
     remote_env = None
     remote_dir = None
     lac = None
+    cellid = None
 
     REMOTE_DIR = '/osmo-gsm-tester'
     BTS_SYSMO_BIN = 'osmo-bts-sysmo'
@@ -146,6 +147,8 @@
         config.overlay(values, config.get_defaults('osmo_bts_sysmo'))
         if self.lac is not None:
             config.overlay(values, { 'location_area_code': self.lac })
+        if self.cellid is not None:
+            config.overlay(values, { 'cell_identity': self.cellid })
         config.overlay(values, self.conf)
         self.dbg(conf=values)
         return values
@@ -156,4 +159,7 @@
     def set_lac(self, lac):
         self.lac = lac
 
+    def set_cellid(self, cellid):
+        self.cellid = cellid
+
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py
index 9571131..1bacd38 100644
--- a/src/osmo_gsm_tester/resource.py
+++ b/src/osmo_gsm_tester/resource.py
@@ -213,6 +213,9 @@
     def next_lac(self, origin):
         return self.next_persistent_value('lac', '1', schema.uint16, lambda x: str((int(x)+1) % pow(2,16)), origin)
 
+    def next_cellid(self, origin):
+        return self.next_persistent_value('cellid', '1', schema.uint16, lambda x: str((int(x)+1) % pow(2,16)), origin)
+
 class NoResourceExn(log.Error):
     pass
 
diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index 9f9421e..fc4930d 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -345,6 +345,7 @@
     def bts(self, specifics=None):
         bts = bts_obj(self, self.reserved_resources.get(resource.R_BTS, specifics=specifics))
         bts.set_lac(self.lac())
+        bts.set_cellid(self.cellid())
         self.register_for_cleanup(bts)
         return bts
 
@@ -376,6 +377,11 @@
         self.log('using LAC', lac)
         return lac
 
+    def cellid(self):
+        cellid = self.resources_pool.next_cellid(self)
+        self.log('using CellId', cellid)
+        return cellid
+
     def poll(self):
         if self._processes:
             for process in self._processes:
diff --git a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
index 14aa62d..d79bb2b 100644
--- a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
@@ -44,7 +44,7 @@
  bts ${loop.index}
   type ${bts.osmobsc_bts_type}
   band ${bts.band}
-  cell_identity 0
+  cell_identity ${bts.cell_identity}
   location_area_code ${bts.location_area_code}
   training_sequence_code 7
   base_station_id_code ${bts.base_station_id_code}
diff --git a/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl
index fbafc8e..803a375 100644
--- a/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl
@@ -37,7 +37,7 @@
  bts ${loop.index}
   type ${bts.osmobsc_bts_type}
   band ${bts.band}
-  cell_identity 0
+  cell_identity ${bts.cell_identity}
   location_area_code ${bts.location_area_code}
   training_sequence_code 7
   base_station_id_code ${bts.base_station_id_code}