From 2d807b6c7d8ea58ad79e11ed5c66cf43c8b21163 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 24 Mar 2021 01:57:30 +0100 Subject: gprs_ns2_sns: Compute local endpoints before using them This fixes some bug introduced in Change-Id I1638f04ba45fef3ba0b237948dff6022267141fb Related: OS#3373 Change-Id: Ic0873e63f1f046b674c7898480ff070a18a7abc7 --- src/gb/gprs_ns2_sns.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') 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); -- cgit v1.2.3