aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2020-09-23 23:56:37 +0200
committerlaforge <laforge@osmocom.org>2020-09-25 09:45:24 +0000
commit38b19e88bbe0da721792f94995504524ee083ae3 (patch)
tree79c195d0b5fe56a56e38a19844290e112d726b20
parentc1cd333072062e676a8cab4a0931beddb7b4a788 (diff)
ns2: refactor nsvc_by_ functions
gprs_ns2_nsvc_by_sockaddr_nsei is doing the lookup within a NSE. gprs_ns2_nsvc_by_sockaddr_bind is doing the lookup within a bind. Make both function look similiar and take similiar arguments. Change-Id: Ia499fc279013668abe7348e578a0768f7d16faf9
-rw-r--r--include/osmocom/gprs/gprs_ns2.h10
-rw-r--r--src/gb/gprs_ns2.c2
-rw-r--r--src/gb/gprs_ns2_sns.c4
-rw-r--r--src/gb/gprs_ns2_udp.c17
4 files changed, 14 insertions, 19 deletions
diff --git a/include/osmocom/gprs/gprs_ns2.h b/include/osmocom/gprs/gprs_ns2.h
index 68484c14..cd2de96f 100644
--- a/include/osmocom/gprs/gprs_ns2.h
+++ b/include/osmocom/gprs/gprs_ns2.h
@@ -131,10 +131,9 @@ struct osmo_sockaddr *gprs_ns2_ip_vc_sockaddr(struct gprs_ns2_vc *nsvc);
struct osmo_sockaddr *gprs_ns2_ip_bind_sockaddr(struct gprs_ns2_vc_bind *bind);
int gprs_ns2_is_ip_bind(struct gprs_ns2_vc_bind *bind);
int gprs_ns2_ip_bind_set_dscp(struct gprs_ns2_vc_bind *bind, int dscp);
-int gprs_ns2_find_vc_by_sockaddr(
+struct gprs_ns2_vc *gprs_ns2_nsvc_by_sockaddr_bind(
struct gprs_ns2_vc_bind *bind,
- struct osmo_sockaddr *saddr,
- struct gprs_ns2_vc **result);
+ struct osmo_sockaddr *saddr);
int gprs_ns2_frgre_bind(struct gprs_ns2_inst *nsi,
struct osmo_sockaddr *local,
@@ -142,8 +141,9 @@ int gprs_ns2_frgre_bind(struct gprs_ns2_inst *nsi,
struct gprs_ns2_vc_bind **result);
int gprs_ns2_is_frgre_bind(struct gprs_ns2_vc_bind *bind);
-struct gprs_ns2_vc *gprs_ns2_nsvc_by_sockaddr(struct gprs_ns2_nse *nsei,
- struct osmo_sockaddr *sockaddr);
+struct gprs_ns2_vc *gprs_ns2_nsvc_by_sockaddr_nse(
+ struct gprs_ns2_nse *nse,
+ struct osmo_sockaddr *sockaddr);
void gprs_ns2_start_alive_all_nsvcs(struct gprs_ns2_nse *nse);
const char *gprs_ns2_cause_str(int cause);
const char *gprs_ns2_ll_str(struct gprs_ns2_vc *nsvc);
diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c
index 57a08d1d..835c22a1 100644
--- a/src/gb/gprs_ns2.c
+++ b/src/gb/gprs_ns2.c
@@ -824,7 +824,7 @@ int gprs_ns2_ip_connect_sns(struct gprs_ns2_vc_bind *bind,
* \param[in] nse NS Entity in which to search
* \param[in] sockaddr socket address to search for
* \return NS-VC matching sockaddr; NULL if none found */
-struct gprs_ns2_vc *gprs_ns2_nsvc_by_sockaddr(struct gprs_ns2_nse *nse,
+struct gprs_ns2_vc *gprs_ns2_nsvc_by_sockaddr_nse(struct gprs_ns2_nse *nse,
struct osmo_sockaddr *sockaddr)
{
struct gprs_ns2_vc *nsvc;
diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index 812200dc..753ac4d8 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -179,7 +179,7 @@ static struct gprs_ns2_vc *nsvc_by_ip4_elem(struct gprs_ns2_nse *nse,
sa.u.sin.sin_port = ip4->udp_port;
sa.u.sin.sin_family = AF_INET;
- return gprs_ns2_nsvc_by_sockaddr(nse, &sa);
+ return gprs_ns2_nsvc_by_sockaddr_nse(nse, &sa);
}
static struct gprs_ns2_vc *nsvc_by_ip6_elem(struct gprs_ns2_nse *nse,
@@ -191,7 +191,7 @@ static struct gprs_ns2_vc *nsvc_by_ip6_elem(struct gprs_ns2_nse *nse,
sa.u.sin6.sin6_port = ip6->udp_port;
sa.u.sin6.sin6_family = AF_INET;
- return gprs_ns2_nsvc_by_sockaddr(nse, &sa);
+ return gprs_ns2_nsvc_by_sockaddr_nse(nse, &sa);
}
/*! called when a nsvc is beeing freed */
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c
index bb421a75..9994a725 100644
--- a/src/gb/gprs_ns2_udp.c
+++ b/src/gb/gprs_ns2_udp.c
@@ -81,16 +81,12 @@ static void free_vc(struct gprs_ns2_vc *nsvc)
/*! Find a NS-VC by its remote socket address.
* \param[in] bind in which to search
* \param[in] saddr remote peer socket adddress to search
- * \param[out] result pointer to result
- * \returns 0 on success; 1 if no NS-VC was found; negative on error */
-int gprs_ns2_find_vc_by_sockaddr(struct gprs_ns2_vc_bind *bind, struct osmo_sockaddr *saddr, struct gprs_ns2_vc **result)
+ * \returns NS-VC matching sockaddr; NULL if none found */
+struct gprs_ns2_vc *gprs_ns2_nsvc_by_sockaddr_bind(struct gprs_ns2_vc_bind *bind, struct osmo_sockaddr *saddr)
{
struct gprs_ns2_vc *nsvc;
struct priv_vc *vcpriv;
- if (!result)
- return -EINVAL;
-
llist_for_each_entry(nsvc, &bind->nsvc, blist) {
vcpriv = nsvc->priv;
if (vcpriv->remote.u.sa.sa_family != saddr->u.sa.sa_family)
@@ -98,11 +94,10 @@ int gprs_ns2_find_vc_by_sockaddr(struct gprs_ns2_vc_bind *bind, struct osmo_sock
if (osmo_sockaddr_cmp(&vcpriv->remote, saddr))
continue;
- *result = nsvc;
- return 0;
+ return nsvc;
}
- return 1;
+ return NULL;
}
static inline int nsip_sendmsg(struct gprs_ns2_vc_bind *bind,
@@ -194,8 +189,8 @@ static int handle_nsip_read(struct osmo_fd *bfd)
return -EINVAL;
/* check if a vc is available */
- rc = gprs_ns2_find_vc_by_sockaddr(bind, &saddr, &nsvc);
- if (rc) {
+ nsvc = gprs_ns2_nsvc_by_sockaddr_bind(bind, &saddr);
+ if (!nsvc) {
/* VC not found */
rc = ns2_create_vc(bind, msg, "newconnection", &reject, &nsvc);
switch (rc) {