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 <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: lynxis lazus <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to