Change in libosmocore[master]: gprs_ns2_sns: use different binds for the initial connection

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/.

lynxis lazus gerrit-no-reply at lists.osmocom.org
Mon Dec 7 06:41:59 UTC 2020


lynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/21574 )


Change subject: gprs_ns2_sns: use different binds for the initial connection
......................................................................

gprs_ns2_sns: use different binds for the initial connection

In case the first bind is not working the SNS would never build a
succesful connection to the SGSN. Iterate over all binds by
using an offset.
Instead of tracking the binds use an offset instead of a direct pointer.
This might result in skipping the order of the next bind.

Change-Id: I4a0a0608dac6ad8b5769ada2a14ca23f61eb0bcb
---
M src/gb/gprs_ns2_sns.c
1 file changed, 19 insertions(+), 5 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/74/21574/1

diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index 718d075..e294fee 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -117,6 +117,8 @@
 	struct sns_endpoint *initial;
 	/* all SNS PDU will be sent over this nsvc */
 	struct gprs_ns2_vc *sns_nsvc;
+	/* iterate over the binds after all remote has been tested */
+	int bind_offset;
 
 	/* local configuration to send to the remote end */
 	struct gprs_ns_ie_ip4_elem *ip4_local;
@@ -714,9 +716,15 @@
 		return;
 	}
 
-	bind = ns2_ip_get_bind_by_offset(nsi, remote, 0);
+	bind = ns2_ip_get_bind_by_offset(nsi, remote, gss->bind_offset);
 	if (!bind) {
-		return;
+		if (gss->bind_offset) {
+			gss->bind_offset = 0;
+			bind = ns2_ip_get_bind_by_offset(nsi, remote, gss->bind_offset);
+		}
+
+		if (!bind)
+			return;
 	}
 
 	/* setup the NSVC */
@@ -1333,12 +1341,18 @@
 			ns2_prim_status_ind(gss->nse, NULL, 0, NS_AFF_CAUSE_SNS_NO_ENDPOINTS);
 			osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_UNCONFIGURED, 0, 3);
 			return;
-		} else if (!gss->initial)
+		} else if (!gss->initial) {
 			gss->initial = llist_first_entry(&gss->sns_endpoints, struct sns_endpoint, list);
-		else if (gss->initial->list.next == &gss->sns_endpoints) /* last entry, continue with first */
+			gss->bind_offset = 0;
+		} else if (gss->initial->list.next == &gss->sns_endpoints) {
+			/* last entry, continue with first */
 			gss->initial = llist_first_entry(&gss->sns_endpoints, struct sns_endpoint, list);
-		else /* next element is an entry */
+			gss->bind_offset++;
+			gss->bind_offset %= ns2_ip_count_bind(nse->nsi, &gss->initial->saddr);
+		} else {
+			/* next element is an entry */
 			gss->initial = llist_entry(gss->initial->list.next, struct sns_endpoint, list);
+		}
 
 		gss->reselection_running = false;
 		osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_SIZE, nse->nsi->timeout[NS_TOUT_TSNS_PROV], 1);

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

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I4a0a0608dac6ad8b5769ada2a14ca23f61eb0bcb
Gerrit-Change-Number: 21574
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis at fe80.eu>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201207/225f9627/attachment.htm>


More information about the gerrit-log mailing list