pespin submitted this change.

View Change


Approvals: laforge: Looks good to me, approved Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve
asp: Factor out helper function to match host in asp_peer

Change-Id: I6f13b285be09982ec83107ff96ade4dabf843815
---
M src/osmo_ss7_asp.c
1 file changed, 26 insertions(+), 25 deletions(-)

diff --git a/src/osmo_ss7_asp.c b/src/osmo_ss7_asp.c
index 596e7ae..eab6bc7 100644
--- a/src/osmo_ss7_asp.c
+++ b/src/osmo_ss7_asp.c
@@ -343,6 +343,21 @@
return osmo_ss7_asp_peer_add_host2(peer, talloc_ctx, host, false);
}

+static bool ss7_asp_peer_match_host(const struct osmo_ss7_asp_peer *peer, const char *host, bool host_is_v6)
+{
+ unsigned int i;
+ for (i = 0; i < peer->host_cnt; i++) {
+ bool iter_is_v6 = osmo_ip_str_type(peer->host[i]) == AF_INET6;
+ bool iter_is_anyaddr = host_is_ip_anyaddr(peer->host[i], iter_is_v6);
+ /* "::" (v6) covers "0.0.0.0" (v4), but not otherwise */
+ if ((iter_is_v6 != host_is_v6) && !(iter_is_v6 && iter_is_anyaddr))
+ continue;
+ if (iter_is_anyaddr || !strcmp(peer->host[i], host))
+ return true;
+ }
+ return false;
+}
+
int ss7_asp_apply_peer_primary_address(const struct osmo_ss7_asp *asp)
{
struct osmo_fd *ofd;
@@ -570,7 +585,6 @@
uint16_t local_port, remote_port;
bool loc_is_v6, rem_is_v6;
int rc;
- int i;

OSMO_ASSERT(ss7_initialized);
/* convert local and remote IP to string */
@@ -613,34 +627,12 @@
if (asp->cfg.remote.port && asp->cfg.remote.port != remote_port)
continue;

- for (i = 0; i < asp->cfg.local.host_cnt; i++) {
- bool iter_is_v6 = osmo_ip_str_type(asp->cfg.local.host[i]) == AF_INET6;
- bool iter_is_anyaddr = host_is_ip_anyaddr(asp->cfg.local.host[i], iter_is_v6);
- /* "::" (v6) covers "0.0.0.0" (v4), but not otherwise */
- if (iter_is_v6 != loc_is_v6 &&
- !(iter_is_v6 && iter_is_anyaddr))
- continue;
- if (iter_is_anyaddr ||
- !strcmp(asp->cfg.local.host[i], hostbuf_l))
- break;
- }
- if (i == asp->cfg.local.host_cnt)
+ if (!ss7_asp_peer_match_host(&asp->cfg.local, hostbuf_l, loc_is_v6))
continue; /* didn't match any local.host */

/* If no remote host was set, it's probably a server and hence we match any cli src */
if (asp->cfg.remote.host_cnt) {
- for (i = 0; i < asp->cfg.remote.host_cnt; i++) {
- bool iter_is_v6 = osmo_ip_str_type(asp->cfg.remote.host[i]) == AF_INET6;
- bool iter_is_anyaddr = host_is_ip_anyaddr(asp->cfg.remote.host[i], iter_is_v6);
- /* "::" (v6) covers "0.0.0.0" (v4), but not otherwise */
- if (iter_is_v6 != rem_is_v6 &&
- !(iter_is_v6 && iter_is_anyaddr))
- continue;
- if (iter_is_anyaddr ||
- !strcmp(asp->cfg.remote.host[i], hostbuf_r))
- break;
- }
- if (i == asp->cfg.remote.host_cnt)
+ if (!ss7_asp_peer_match_host(&asp->cfg.remote, hostbuf_r, rem_is_v6))
continue; /* didn't match any remote.host */
}


To view, visit change 34587. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Change-Id: I6f13b285be09982ec83107ff96ade4dabf843815
Gerrit-Change-Number: 34587
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: osmith <osmith@sysmocom.de>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>
Gerrit-MessageType: merged