aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gb/gprs_ns2_fr.c10
-rw-r--r--src/gb/gprs_ns2_frgre.c7
-rw-r--r--src/gb/gprs_ns2_udp.c7
3 files changed, 15 insertions, 9 deletions
diff --git a/src/gb/gprs_ns2_fr.c b/src/gb/gprs_ns2_fr.c
index fc6a5c4d..f1a55765 100644
--- a/src/gb/gprs_ns2_fr.c
+++ b/src/gb/gprs_ns2_fr.c
@@ -721,8 +721,8 @@ err:
* \param[in] netif Network interface to bind to
* \param[in] fr_network
* \param[in] fr_role
- * \param[out] result pointer to created bind
- * \return 0 on success; negative on error */
+ * \param[out] result pointer to the created bind or if a bind with the name exists return the bind.
+ * \return 0 on success; negative on error. -EALREADY returned in case a bind with the name exists */
int gprs_ns2_fr_bind(struct gprs_ns2_inst *nsi,
const char *name,
const char *netif,
@@ -738,8 +738,12 @@ int gprs_ns2_fr_bind(struct gprs_ns2_inst *nsi,
if (strlen(netif) > IFNAMSIZ)
return -EINVAL;
- if (gprs_ns2_bind_by_name(nsi, name))
+ bind = gprs_ns2_bind_by_name(nsi, name);
+ if (bind) {
+ if (result)
+ *result = bind;
return -EALREADY;
+ }
rc = ns2_bind_alloc(nsi, name, &bind);
if (rc < 0)
diff --git a/src/gb/gprs_ns2_frgre.c b/src/gb/gprs_ns2_frgre.c
index 88ef0371..853375d0 100644
--- a/src/gb/gprs_ns2_frgre.c
+++ b/src/gb/gprs_ns2_frgre.c
@@ -529,8 +529,8 @@ int gprs_ns2_is_frgre_bind(struct gprs_ns2_vc_bind *bind)
* \param[in] nsi NS instance in which to create the bind
* \param[in] local local address on which to bind
* \param[in] dscp DSCP/TOS bits to use for transmitted data on this bind
- * \param[out] result pointer to created bind
- * \return 0 on success; negative on error */
+ * \param[out] result pointer to the created bind or if a bind with the name exists return the bind.
+ * \return 0 on success; negative on error. -EALREADY returned in case a bind with the name exists */
int gprs_ns2_frgre_bind(struct gprs_ns2_inst *nsi,
const char *name,
const struct osmo_sockaddr *local,
@@ -546,7 +546,8 @@ int gprs_ns2_frgre_bind(struct gprs_ns2_inst *nsi,
bind = gprs_ns2_bind_by_name(nsi, name);
if (bind) {
- *result = bind;
+ if (result)
+ *result = bind;
return -EALREADY;
}
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c
index 9277f9aa..e07f6d43 100644
--- a/src/gb/gprs_ns2_udp.c
+++ b/src/gb/gprs_ns2_udp.c
@@ -303,8 +303,8 @@ struct gprs_ns2_vc_bind *gprs_ns2_ip_bind_by_sockaddr(struct gprs_ns2_inst *nsi,
* \param[in] nsi NS Instance in which to create the NSVC
* \param[in] local the local address to bind to
* \param[in] dscp the DSCP/TOS bits used for transmitted data
- * \param[out] result if set, returns the bind object
- * \return 0 on success; negative in case of error */
+ * \param[out] result pointer to the created bind or if a bind with the name exists return the bind.
+ * \return 0 on success; negative on error. -EALREADY returned in case a bind with the name exists */
int gprs_ns2_ip_bind(struct gprs_ns2_inst *nsi,
const char *name,
const struct osmo_sockaddr *local,
@@ -320,7 +320,8 @@ int gprs_ns2_ip_bind(struct gprs_ns2_inst *nsi,
bind = gprs_ns2_ip_bind_by_sockaddr(nsi, local);
if (bind) {
- *result = bind;
+ if (result)
+ *result = bind;
return -EBUSY;
}