diff options
author | Harald Welte <laforge@osmocom.org> | 2021-03-24 01:57:30 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2021-03-24 01:58:52 +0100 |
commit | 2d807b6c7d8ea58ad79e11ed5c66cf43c8b21163 (patch) | |
tree | 3e5cc5536dd934f54e9fcbd7c19d2f080830e03a | |
parent | 5e4083166a3956655d2d96ba18221497790d17d6 (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
-rw-r--r-- | src/gb/gprs_ns2_sns.c | 4 |
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); |