gb_proxy_peer: Add Function to get gbproxy cell by cell id

Change-Id: I3403736eed9d6819634c26db0b90393ac6f4416a
Related: SYS#5103
diff --git a/include/osmocom/sgsn/gb_proxy.h b/include/osmocom/sgsn/gb_proxy.h
index 269b851..96b2bcc 100644
--- a/include/osmocom/sgsn/gb_proxy.h
+++ b/include/osmocom/sgsn/gb_proxy.h
@@ -270,6 +270,7 @@
 
 struct gbproxy_cell *gbproxy_cell_alloc(struct gbproxy_config *cfg, uint16_t bvci);
 struct gbproxy_cell *gbproxy_cell_by_bvci(struct gbproxy_config *cfg, uint16_t bvci);
+struct gbproxy_cell *gbproxy_cell_by_cellid(struct gbproxy_config *cfg, const struct gprs_ra_id *raid, uint16_t cid);
 void gbproxy_cell_free(struct gbproxy_cell *cell);
 bool gbproxy_cell_add_sgsn_bvc(struct gbproxy_cell *cell, struct gbproxy_bvc *bvc);
 
diff --git a/src/gb_proxy_peer.c b/src/gb_proxy_peer.c
index e276c85..8855a44 100644
--- a/src/gb_proxy_peer.c
+++ b/src/gb_proxy_peer.c
@@ -206,6 +206,19 @@
 	return cell;
 }
 
+struct gbproxy_cell *gbproxy_cell_by_cellid(struct gbproxy_config *cfg, const struct gprs_ra_id *raid, uint16_t cid)
+{
+	int i;
+	struct gbproxy_cell *cell;
+
+	hash_for_each(cfg->cells, i, cell, list) {
+		if (cell->id.cid == cid && gsm48_ra_equal(&cell->id.raid, raid)) {
+			return cell;
+		}
+	}
+	return NULL;
+}
+
 void gbproxy_cell_free(struct gbproxy_cell *cell)
 {
 	unsigned int i;