diff --git a/include/osmocom/sgsn/gb_proxy.h b/include/osmocom/sgsn/gb_proxy.h index 269b8514..96b2bcc0 100644 --- a/include/osmocom/sgsn/gb_proxy.h +++ b/include/osmocom/sgsn/gb_proxy.h @@ -270,6 +270,7 @@ int gbproxy_cleanup_bvcs(struct gbproxy_nse *nse, uint16_t bvci); 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 e276c85d..8855a447 100644 --- a/src/gb_proxy_peer.c +++ b/src/gb_proxy_peer.c @@ -206,6 +206,19 @@ struct gbproxy_cell *gbproxy_cell_by_bvci_or_new(struct gbproxy_config *cfg, uin 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;