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;