aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2021-03-24 01:57:30 +0100
committerHarald Welte <laforge@osmocom.org>2021-03-24 01:58:52 +0100
commit2d807b6c7d8ea58ad79e11ed5c66cf43c8b21163 (patch)
tree3e5cc5536dd934f54e9fcbd7c19d2f080830e03a /src
parent5e4083166a3956655d2d96ba18221497790d17d6 (diff)
gprs_ns2_sns: Compute local endpoints before using them
This fixes some bug introduced in Change-Id I1638f04ba45fef3ba0b237948dff6022267141fb Related: OS#3373 Change-Id: Ic0873e63f1f046b674c7898480ff070a18a7abc7
Diffstat (limited to 'src')
-rw-r--r--src/gb/gprs_ns2_sns.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index 51e4e9e3..72688094 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -2179,10 +2179,12 @@ static void ns2_sns_st_all_action_sgsn(struct osmo_fsm_inst *fi, uint32_t event,
/* decide if we go for IPv4 or IPv6 */
if (gss->num_max_ip6_remote && ns2_sns_count_num_local_ep(fi, IPv6)) {
gss->ip = IPv6;
+ ns2_sns_compute_local_ep_from_binds(fi);
num_local_eps = gss->num_ip6_local;
num_remote_eps = gss->num_max_ip6_remote;
} else if (gss->num_max_ip4_remote && ns2_sns_count_num_local_ep(fi, IPv4)) {
gss->ip = IPv4;
+ ns2_sns_compute_local_ep_from_binds(fi);
num_local_eps = gss->num_ip4_local;
num_remote_eps = gss->num_max_ip4_remote;
} else {
@@ -2193,7 +2195,6 @@ static void ns2_sns_st_all_action_sgsn(struct osmo_fsm_inst *fi, uint32_t event,
ns2_tx_sns_size_ack(gss->sns_nsvc, &cause);
break;
}
- ns2_sns_compute_local_ep_from_binds(fi);
/* ensure number of NS-VCs is sufficient for full mesh */
gss->num_max_nsvcs = tlvp_val16be(tp, NS_IE_MAX_NR_NSVC);
if (gss->num_max_nsvcs < num_remote_eps * num_local_eps) {
@@ -2224,6 +2225,7 @@ static void ns2_sns_st_all_action_sgsn(struct osmo_fsm_inst *fi, uint32_t event,
gprs_ns2_free_nsvc(nsvc);
}
}
+ ns2_sns_compute_local_ep_from_binds(fi);
}
/* send SIZE_ACK */
ns2_tx_sns_size_ack(gss->sns_nsvc, NULL);