gprs_ns_sns: Use "correct" remote IP address for local IP endpoint

we cannot use "nsi->nsip.remote_ip", as this address is not set
when SNS is in use.  We can only have a valid nsi->nsip.remote_ip
if there's only a single NS-VC inside the NS Instance, as this would
connect() the UDP socket to the remote IP/port, breaking any possibility
to have multiple NS-VCs to different SGNS-side IP addresses.

Closes: OS#3845
Change-Id: Ic094621eb01d7458063f531289d5eeadf52bf330
This commit is contained in:
Harald Welte 2019-03-16 18:06:22 +01:00
parent 94c9b449cf
commit 24e67f86dd
1 changed files with 2 additions and 2 deletions

View File

@ -657,8 +657,8 @@ struct osmo_fsm_inst *gprs_sns_bss_fsm_alloc(void *ctx, struct gprs_nsvc *nsvc,
/* unspecified local address. Figure out which address the kernel would use if we
* wanted to send a packet to the remote_ip */
char local_ip[32];
struct in_addr in = { .s_addr = htonl(nsi->nsip.remote_ip) };
osmo_sock_local_ip(local_ip, inet_ntoa(in));
struct sockaddr_in *daddr = &nsvc->ip.bts_addr;
osmo_sock_local_ip(local_ip, inet_ntoa(daddr->sin_addr));
ip4->ip_addr = inet_addr(local_ip);
}
ip4->udp_port = htons(gss->nsi->nsip.local_port);