From 68b4f037e0e2286fd2fe1f314d9bd2dc66fb646b Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 9 Jun 2010 16:22:28 +0200 Subject: [GPRS] BSSGP/SGSN: Implement Gb-Interface Paging We now have a function that generates BSSGP PS and CS paging request. It is called from the libgtp code when we receive a GTP packet from the GGSN for a MM context that is in SUSPEND state. We then issue a PS paging request to the Cell with the BVCI where the last RA update was being performed. TODO: We still don't enqueue the GTP packet (and transmit it on paging complete), and we don't rate-limit the paging requests, i.e. every GTP packet will trigger another paging request. We probably also need some kind of logic that marks the phone as UNREGISTERED if it doesn't respond to paging requests for some time. --- openbsc/include/openbsc/gprs_bssgp.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'openbsc/include') diff --git a/openbsc/include/openbsc/gprs_bssgp.h b/openbsc/include/openbsc/gprs_bssgp.h index 9eaf989a..e432cf75 100644 --- a/openbsc/include/openbsc/gprs_bssgp.h +++ b/openbsc/include/openbsc/gprs_bssgp.h @@ -199,6 +199,33 @@ static inline int bssgp_tlv_parse(struct tlv_parsed *tp, uint8_t *buf, int len) return tlv_parse(tp, &tvlv_att_def, buf, len, 0, 0); } +enum bssgp_paging_mode { + BSSGP_PAGING_PS, + BSSGP_PAGING_CS, +}; + +enum bssgp_paging_scope { + BSSGP_PAGING_BSS_AREA, /* all cells in BSS */ + BSSGP_PAGING_LOCATION_AREA, /* all cells in LA */ + BSSGP_PAGING_ROUTEING_AREA, /* all cells in RA */ + BSSGP_PAGING_BVCI, /* one cell */ +}; + +struct bssgp_paging_info { + enum bssgp_paging_mode mode; + enum bssgp_paging_scope scope; + struct gprs_ra_id raid; + uint16_t bvci; + const char *imsi; + uint32_t *ptmsi; + uint16_t drx_params; + uint8_t qos[3]; +}; + +/* Send a single GMM-PAGING.req to a given NSEI/NS-BVCI */ +int gprs_bssgp_tx_paging(uint16_t nsei, uint16_t ns_bvci, + struct bssgp_paging_info *pinfo); + /* gprs_bssgp_vty.c */ int gprs_bssgp_vty_init(void); -- cgit v1.2.3