Change in osmo-sgsn[master]: gbproxy: Properly implement paging to LAC/RAC

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Wed Nov 25 16:27:57 UTC 2020


laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-sgsn/+/21309 )

Change subject: gbproxy: Properly implement paging to LAC/RAC
......................................................................

gbproxy: Properly implement paging to LAC/RAC

There may very well be many PCUs connected within the same RAC or LAC.

This means we'll need to iterate the list of peers and dispatch it to
each matching peer.

Change-Id: I2c44959661fb53730586f4347cbfbbcece065e13
---
M src/gbproxy/gb_proxy.c
1 file changed, 29 insertions(+), 12 deletions(-)

Approvals:
  daniel: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/gbproxy/gb_proxy.c b/src/gbproxy/gb_proxy.c
index fb58284..6c56233 100644
--- a/src/gbproxy/gb_proxy.c
+++ b/src/gbproxy/gb_proxy.c
@@ -1098,37 +1098,54 @@
 static int gbprox_rx_paging(struct gbproxy_config *cfg, struct msgb *msg, struct tlv_parsed *tp,
 			    uint32_t nsei, uint16_t ns_bvci)
 {
-	struct gbproxy_peer *peer = NULL;
+	struct gbproxy_peer *peer;
+	unsigned int n_peers = 0;
 	int errctr = GBPROX_GLOB_CTR_PROTO_ERR_SGSN;
 
 	LOGP(DGPRS, LOGL_INFO, "NSEI=%u(SGSN) BSSGP PAGING ",
 		nsei);
 	if (TLVP_PRESENT(tp, BSSGP_IE_BVCI)) {
 		uint16_t bvci = ntohs(tlvp_val16_unal(tp, BSSGP_IE_BVCI));
-		peer = gbproxy_peer_by_bvci(cfg, bvci);
-		LOGPC(DGPRS, LOGL_INFO, "routing by BVCI to peer BVCI=%u\n",
-			bvci);
 		errctr = GBPROX_GLOB_CTR_OTHER_ERR;
+		peer = gbproxy_peer_by_bvci(cfg, bvci);
+		LOGPC(DGPRS, LOGL_INFO, "routing by BVCI to peer BVCI=%u\n", bvci);
+		if (!peer) {
+			LOGP(DGPRS, LOGL_NOTICE, "NSEI=%u(SGSN) BSSGP PAGING: "
+				"unable to route: BVCI=%u unknown\n", nsei, bvci);
+			rate_ctr_inc(&cfg->ctrg->ctr[errctr]);
+			return -EINVAL;
+		}
+		return gbprox_relay2peer(msg, peer, ns_bvci);
 	} else if (TLVP_PRESENT(tp, BSSGP_IE_ROUTEING_AREA)) {
-		peer = gbproxy_peer_by_rai(cfg, TLVP_VAL(tp, BSSGP_IE_ROUTEING_AREA));
-		LOGPC(DGPRS, LOGL_INFO, "routing by RAI to peer BVCI=%u\n",
-			peer ? peer->bvci : -1);
 		errctr = GBPROX_GLOB_CTR_INV_RAI;
+		/* iterate over all peers and dispatch the paging to each matching one */
+		llist_for_each_entry(peer, &cfg->bts_peers, list) {
+			if (!memcmp(peer->ra, TLVP_VAL(tp, BSSGP_IE_ROUTEING_AREA), 6)) {
+				LOGPC(DGPRS, LOGL_INFO, "routing by RAI to peer BVCI=%u\n", peer->bvci);
+				gbprox_relay2peer(msg, peer, ns_bvci);
+				n_peers++;
+			}
+		}
 	} else if (TLVP_PRESENT(tp, BSSGP_IE_LOCATION_AREA)) {
-		peer = gbproxy_peer_by_lai(cfg, TLVP_VAL(tp, BSSGP_IE_LOCATION_AREA));
-		LOGPC(DGPRS, LOGL_INFO, "routing by LAI to peer BVCI=%u\n",
-			peer ? peer->bvci : -1);
 		errctr = GBPROX_GLOB_CTR_INV_LAI;
+		/* iterate over all peers and dispatch the paging to each matching one */
+		llist_for_each_entry(peer, &cfg->bts_peers, list) {
+			if (!memcmp(peer->ra, TLVP_VAL(tp, BSSGP_IE_LOCATION_AREA), 5)) {
+				LOGPC(DGPRS, LOGL_INFO, "routing by LAI to peer BVCI=%u\n", peer->bvci);
+				gbprox_relay2peer(msg, peer, ns_bvci);
+				n_peers++;
+			}
+		}
 	} else
 		LOGPC(DGPRS, LOGL_INFO, "\n");
 
-	if (!peer) {
+	if (n_peers == 0) {
 		LOGP(DGPRS, LOGL_ERROR, "NSEI=%u(SGSN) BSSGP PAGING: "
 			"unable to route, missing IE\n", nsei);
 		rate_ctr_inc(&cfg->ctrg->ctr[errctr]);
 		return -EINVAL;
 	}
-	return gbprox_relay2peer(msg, peer, ns_bvci);
+	return 0;
 }
 
 /* Receive an incoming BVC-RESET message from the SGSN */

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-sgsn/+/21309
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-sgsn
Gerrit-Branch: master
Gerrit-Change-Id: I2c44959661fb53730586f4347cbfbbcece065e13
Gerrit-Change-Number: 21309
Gerrit-PatchSet: 2
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-CC: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201125/dc74ebe0/attachment.htm>


More information about the gerrit-log mailing list