gprs_ns2_sns: dynamic calculate the maximum NS-VCs

The previous hard-coded value could be not enough if the user configures
too many local binds. Allow at least 8 NS-VCs. In case the user
configures too many binds (> 2) increase the maximum NS-VCs to allow
the SGSN to have 4 redundant connections.

Change-Id: Iae859dc504716fd6f705e72db5fc293b4b3298e7
This commit is contained in:
Alexander Couzens 2020-12-06 02:40:44 +01:00 committed by laforge
parent e03d863e1f
commit 42ad549152
1 changed files with 3 additions and 2 deletions

View File

@ -1265,6 +1265,7 @@ int ns2_sns_bss_fsm_start(struct gprs_ns2_nse *nse, struct gprs_ns2_vc *nsvc,
gss->sns_nsvc = nsvc;
nsvc->sns_only = true;
/* count how many bindings are available (only UDP binds) */
int count = 0;
llist_for_each_entry(bind, &nsi->binding, list) {
if (!gprs_ns2_is_ip_bind(bind))
@ -1320,6 +1321,7 @@ int ns2_sns_bss_fsm_start(struct gprs_ns2_nse *nse, struct gprs_ns2_vc *nsvc,
gss->num_ip4_local = count;
gss->num_max_ip4_remote = 4;
gss->num_max_nsvcs = OSMO_MAX(gss->num_max_ip4_remote * 4, 8);
break;
case IPv6:
/* IPv6 */
@ -1358,11 +1360,10 @@ int ns2_sns_bss_fsm_start(struct gprs_ns2_nse *nse, struct gprs_ns2_vc *nsvc,
}
gss->num_ip6_local = count;
gss->num_max_ip6_remote = 4;
gss->num_max_nsvcs = OSMO_MAX(gss->num_max_ip6_remote * 4, 8);
break;
}
gss->num_max_nsvcs = 8;
return osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_START, NULL);
err: