lynxis lazus has submitted this change. (
https://gerrit.osmocom.org/c/osmo-bsc/+/30701 )
Change subject: bts: ipa/osmo-bts/sysmobts: MO: add support for the second NSVC
......................................................................
bts: ipa/osmo-bts/sysmobts: MO: add support for the second NSVC
The second NSVC MO has been explicit skipped and never been interacted with.
osmo-bts is already supporting it for a long time as well the PCU is
supporting it at least since the NS2 code migration.
Fixes the ttcn3 test case BTS_Tests.TC_pcu_socket_two_nsvc.
Closes: OS#5835
Change-Id: I3486a7cc9a424602b73f8adc2fefce169213e46b
---
M include/osmocom/bsc/bts_ipaccess_nanobts_omlattr.h
M src/osmo-bsc/bts_ipaccess_nanobts.c
M src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
M src/osmo-bsc/nm_bts_fsm.c
M src/osmo-bsc/nm_gprs_nsvc_fsm.c
M tests/nanobts_omlattr/nanobts_omlattr_test.c
6 files changed, 33 insertions(+), 19 deletions(-)
Approvals:
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/include/osmocom/bsc/bts_ipaccess_nanobts_omlattr.h
b/include/osmocom/bsc/bts_ipaccess_nanobts_omlattr.h
index d6933fc..dd97a0a 100644
--- a/include/osmocom/bsc/bts_ipaccess_nanobts_omlattr.h
+++ b/include/osmocom/bsc/bts_ipaccess_nanobts_omlattr.h
@@ -27,10 +27,11 @@
struct gsm_bts_sm;
struct gsm_bts;
struct gsm_bts_trx;
+struct gsm_gprs_nsvc;
struct msgb *nanobts_gen_set_bts_attr(struct gsm_bts *bts);
struct msgb *nanobts_gen_set_nse_attr(struct gsm_bts_sm *bts_sm);
struct msgb *nanobts_gen_set_cell_attr(struct gsm_bts *bts);
-struct msgb *nanobts_gen_set_nsvc_attr(struct gsm_bts *bts);
+struct msgb *nanobts_gen_set_nsvc_attr(struct gsm_gprs_nsvc *nsvc);
struct msgb *nanobts_gen_set_radio_attr(struct gsm_bts *bts,
struct gsm_bts_trx *trx);
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts.c b/src/osmo-bsc/bts_ipaccess_nanobts.c
index 338c83f..9f17359 100644
--- a/src/osmo-bsc/bts_ipaccess_nanobts.c
+++ b/src/osmo-bsc/bts_ipaccess_nanobts.c
@@ -184,9 +184,6 @@
break;
case NM_OC_GPRS_NSVC:
nsvc = obj;
- /* We skip NSVC1 since we only use NSVC0 */
- if (nsvc->id == 1)
- break;
osmo_fsm_inst_dispatch(nsvc->mo.fi, NM_EV_STATE_CHG_REP, nsd);
break;
default:
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
index 0c08616..4fa69fb 100644
--- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
+++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
@@ -206,21 +206,20 @@
return msgb;
}
-struct msgb *nanobts_gen_set_nsvc_attr(struct gsm_bts *bts)
+struct msgb *nanobts_gen_set_nsvc_attr(struct gsm_gprs_nsvc *nsvc)
{
struct msgb *msgb;
uint8_t buf[256];
- struct gsm_bts_sm *bts_sm = bts->site_mgr;
msgb = msgb_alloc(1024, "nanobts_attr_bts");
if (!msgb)
return NULL;
/* 925 */
- buf[0] = bts_sm->gprs.nsvc[0].nsvci >> 8;
- buf[1] = bts_sm->gprs.nsvc[0].nsvci & 0xff;
+ buf[0] = nsvc->nsvci >> 8;
+ buf[1] = nsvc->nsvci & 0xff;
msgb_tl16v_put(msgb, NM_ATT_IPACC_NSVCI, 2, buf);
- switch (bts_sm->gprs.nsvc->remote.u.sa.sa_family) {
+ switch (nsvc->remote.u.sa.sa_family) {
case AF_INET6:
/* all fields are encoded in network byte order */
/* protocol family */
@@ -228,20 +227,20 @@
/* padding */
buf[1] = 0x00;
/* local udp port */
- osmo_store16be(bts_sm->gprs.nsvc[0].local_port, &buf[2]);
+ osmo_store16be(nsvc->local_port, &buf[2]);
/* remote udp port */
- memcpy(&buf[4], &bts_sm->gprs.nsvc[0].remote.u.sin6.sin6_port,
sizeof(uint16_t));
+ memcpy(&buf[4], &nsvc->remote.u.sin6.sin6_port, sizeof(uint16_t));
/* remote ip address */
- memcpy(&buf[6], &bts_sm->gprs.nsvc[0].remote.u.sin6.sin6_addr, sizeof(struct
in6_addr));
+ memcpy(&buf[6], &nsvc->remote.u.sin6.sin6_addr, sizeof(struct in6_addr));
msgb_tl16v_put(msgb, NM_ATT_OSMO_NS_LINK_CFG, 6 + sizeof(struct in6_addr), buf);
break;
case AF_INET:
/* remote udp port */
- memcpy(&buf[0], &bts_sm->gprs.nsvc[0].remote.u.sin.sin_port,
sizeof(uint16_t));
+ memcpy(&buf[0], &nsvc->remote.u.sin.sin_port, sizeof(uint16_t));
/* remote ip address */
- memcpy(&buf[2], &bts_sm->gprs.nsvc[0].remote.u.sin.sin_addr, sizeof(struct
in_addr));
+ memcpy(&buf[2], &nsvc->remote.u.sin.sin_addr, sizeof(struct in_addr));
/* local udp port */
- osmo_store16be(bts_sm->gprs.nsvc[0].local_port, &buf[6]);
+ osmo_store16be(nsvc->local_port, &buf[6]);
msgb_tl16v_put(msgb, NM_ATT_IPACC_NS_LINK_CFG, 8, buf);
break;
default:
diff --git a/src/osmo-bsc/nm_bts_fsm.c b/src/osmo-bsc/nm_bts_fsm.c
index 3d95b93..92728dc 100644
--- a/src/osmo-bsc/nm_bts_fsm.c
+++ b/src/osmo-bsc/nm_bts_fsm.c
@@ -143,8 +143,11 @@
bts->mo.get_attr_sent = false;
/* Announce bts_features are available to related NSVC MOs */
- nsvc = gsm_bts_sm_nsvc_num(bts->site_mgr, 0); /* we only support NSVC0 so far */
- osmo_fsm_inst_dispatch(nsvc->mo.fi, NM_EV_FEATURE_NEGOTIATED, NULL);
+ for (int i = 0; i < ARRAY_SIZE(bts->site_mgr->gprs.nsvc); i++) {
+ nsvc = gsm_bts_sm_nsvc_num(bts->site_mgr, i);
+ if (nsvc)
+ osmo_fsm_inst_dispatch(nsvc->mo.fi, NM_EV_FEATURE_NEGOTIATED, NULL);
+ }
/* Move FSM forward */
configure_loop(bts, &bts->mo.nm_state, allow_opstart);
diff --git a/src/osmo-bsc/nm_gprs_nsvc_fsm.c b/src/osmo-bsc/nm_gprs_nsvc_fsm.c
index e4a6338..5186082 100644
--- a/src/osmo-bsc/nm_gprs_nsvc_fsm.c
+++ b/src/osmo-bsc/nm_gprs_nsvc_fsm.c
@@ -90,6 +90,17 @@
}
}
+static bool has_valid_nsvc(struct gsm_gprs_nsvc *nsvc)
+{
+ switch (nsvc->remote.u.sa.sa_family) {
+ case AF_INET:
+ case AF_INET6:
+ return (nsvc->local_port > 0 &&
!osmo_sockaddr_is_any(&nsvc->remote));
+ default:
+ return false;
+ }
+}
+
static void configure_loop(struct gsm_gprs_nsvc *nsvc, const struct gsm_nm_state *state,
bool allow_opstart)
{
struct msgb *msgb;
@@ -110,8 +121,11 @@
nsvc->bts->nr);
return;
}
+ if (!has_valid_nsvc(nsvc))
+ return;
+
nsvc->mo.set_attr_sent = true;
- msgb = nanobts_gen_set_nsvc_attr(nsvc->bts);
+ msgb = nanobts_gen_set_nsvc_attr(nsvc);
OSMO_ASSERT(msgb);
abis_nm_ipaccess_set_attr(nsvc->bts, NM_OC_GPRS_NSVC, nsvc->bts->bts_nr,
nsvc->id, 0xff, msgb->data, msgb->len);
diff --git a/tests/nanobts_omlattr/nanobts_omlattr_test.c
b/tests/nanobts_omlattr/nanobts_omlattr_test.c
index bccd99e..3569327 100644
--- a/tests/nanobts_omlattr/nanobts_omlattr_test.c
+++ b/tests/nanobts_omlattr/nanobts_omlattr_test.c
@@ -88,7 +88,7 @@
printf("Testing nanobts_gen_set_nsvc_attr()...\n");
- msgb = nanobts_gen_set_nsvc_attr(bts);
+ msgb = nanobts_gen_set_nsvc_attr(&bts->site_mgr->gprs.nsvc[0]);
printf("result= %s\n", osmo_hexdump_nospc(msgb->data, msgb->len));
printf("expected=%s\n", osmo_hexdump_nospc(expected, msgb->len));
OSMO_ASSERT(msgb_eq_data_print(msgb, expected, msgb->len));
--
To view, visit
https://gerrit.osmocom.org/c/osmo-bsc/+/30701
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I3486a7cc9a424602b73f8adc2fefce169213e46b
Gerrit-Change-Number: 30701
Gerrit-PatchSet: 2
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged