diff options
author | Alexander Couzens <lynxis@fe80.eu> | 2021-02-16 23:06:53 +0100 |
---|---|---|
committer | lynxis lazus <lynxis@fe80.eu> | 2021-02-19 10:41:50 +0000 |
commit | 7bb39e368d644e9d1029a210ea8a720674bd5185 (patch) | |
tree | e68e6989bda10b2de9704f3b7164b63735690e02 | |
parent | b2de546a5ca2e6ee76d342e66eda39afe4c08bbe (diff) |
gprs_ns2: ensure no duplicate UDP NSVC can be created
Change-Id: I58a95817e2730bbbaa851a43a5b072d1de2db037
-rw-r--r-- | src/gb/gprs_ns2_udp.c | 4 | ||||
-rw-r--r-- | src/gb/gprs_ns2_vty.c | 9 | ||||
-rw-r--r-- | tests/gb/gprs_ns2_vty.vty | 20 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c index 36f6a97e..30816802 100644 --- a/src/gb/gprs_ns2_udp.c +++ b/src/gb/gprs_ns2_udp.c @@ -402,6 +402,10 @@ struct gprs_ns2_vc *ns2_ip_bind_connect(struct gprs_ns2_vc_bind *bind, return NULL; } + /* duplicate */ + if (gprs_ns2_nsvc_by_sockaddr_bind(bind, remote)) + return NULL; + sockaddr_str = (char *)osmo_sockaddr_to_str(remote); osmo_identifier_sanitize_buf(sockaddr_str, NULL, '_'); snprintf(idbuf, sizeof(idbuf), "%s-NSE%05u-remote-%s", gprs_ns2_lltype_str(nse->ll), diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c index 4bd7cdef..62149079 100644 --- a/src/gb/gprs_ns2_vty.c +++ b/src/gb/gprs_ns2_vty.c @@ -1093,6 +1093,15 @@ static int ns_nse_nsvc_udp_cmds(struct vty *vty, const char *bind_name, const ch goto err; } + nsvc = gprs_ns2_nsvc_by_sockaddr_bind(bind, &remote); + if (nsvc) { + if (nsvc->nse == nse) + vty_out(vty, "Specified NSVC is already present in this NSE.%s", VTY_NEWLINE); + else + vty_out(vty, "Specified NSVC is already present in another NSE%05u.%s", nsvc->nse->nsei, VTY_NEWLINE); + goto err; + } + nsvc = gprs_ns2_ip_connect(bind, &remote, nse, 0); if (!nsvc) { vty_out(vty, "Can not create NS-VC.%s", VTY_NEWLINE); diff --git a/tests/gb/gprs_ns2_vty.vty b/tests/gb/gprs_ns2_vty.vty index a9698813..f0253fcf 100644 --- a/tests/gb/gprs_ns2_vty.vty +++ b/tests/gb/gprs_ns2_vty.vty @@ -61,3 +61,23 @@ UDP bind: 127.0.0.14:42999 DSCP: 0 NSVCI 00000: udp)[127.0.0.14]:42999<>[127.0.0.17]:9496 NSVCI 00000: udp)[127.0.0.14]:42999<>[127.0.0.16]:9496 NSVCI 00000: udp)[127.0.0.14]:42999<>[127.0.0.15]:9496 +OsmoNSdummy# configure terminal +OsmoNSdummy(config)# ns +OsmoNSdummy(config-ns)# nse 1234 +OsmoNSdummy(config-ns-nse)# nsvc udp abc 127.0.0.16 9496 signalling-weight 2 data-weight 2 +Specified NSVC is already present in this NSE. +OsmoNSdummy(config-ns-nse)# exit +OsmoNSdummy(config-ns)# nse 1235 +OsmoNSdummy(config-ns-nse)# nsvc udp abc 127.0.0.16 9496 signalling-weight 2 data-weight 2 +Specified NSVC is already present in another NSE01234. +OsmoNSdummy(config-ns-nse)# exit +OsmoNSdummy(config-ns)# nse 2342 +OsmoNSdummy(config-ns-nse)# ip-sns-bind abc +OsmoNSdummy(config-ns-nse)# ip-sns-bind abc +Failed to add ip-sns-bind abc already present +OsmoNSdummy(config-ns-nse)# ip-sns-bind abc2 +Can not find the given bind 'abc2' +OsmoNSdummy(config-ns-nse)# ip-sns-remote 127.0.0.1 22222 +OsmoNSdummy(config-ns-nse)# ip-sns-remote 127.0.0.1 22222 +Specified SNS endpoint already part of the NSE. +OsmoNSdummy(config-ns-nse)# exit |