Change in libosmocore[master]: ns2: message: BLOCK/BLOCK ACK allow to use a given NSVCI instead of u...

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

lynxis lazus gerrit-no-reply at lists.osmocom.org
Thu Sep 23 11:41:03 UTC 2021


lynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/25554 )


Change subject: ns2: message: BLOCK/BLOCK ACK allow to use a given NSVCI instead of using the nsvc nsvci
......................................................................

ns2: message: BLOCK/BLOCK ACK allow to use a given NSVCI instead of using the nsvc nsvci

The BLOCK and BLOCK ACK PDUs can be send over a working NSVC to inform
the NSE that a NSVC is blocked.

Change-Id: I6189229fdc1f054e86811bc60cb7646e1f758a78
---
M src/gb/gprs_ns2_internal.h
M src/gb/gprs_ns2_message.c
M src/gb/gprs_ns2_vc_fsm.c
M tests/gb/gprs_ns2_test.c
4 files changed, 25 insertions(+), 15 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/54/25554/1

diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h
index bfb12d9..a5d78d4 100644
--- a/src/gb/gprs_ns2_internal.h
+++ b/src/gb/gprs_ns2_internal.h
@@ -422,8 +422,8 @@
 		   unsigned int num_ip6_elems);
 
 /* transmit message over a VC */
-int ns2_tx_block(struct gprs_ns2_vc *nsvc, uint8_t cause);
-int ns2_tx_block_ack(struct gprs_ns2_vc *nsvc);
+int ns2_tx_block(struct gprs_ns2_vc *nsvc, uint8_t cause, uint16_t *nsvci);
+int ns2_tx_block_ack(struct gprs_ns2_vc *nsvc, uint16_t *nsvci);
 
 int ns2_tx_reset(struct gprs_ns2_vc *nsvc, uint8_t cause);
 int ns2_tx_reset_ack(struct gprs_ns2_vc *nsvc);
diff --git a/src/gb/gprs_ns2_message.c b/src/gb/gprs_ns2_message.c
index 5e3e025..2dbbf5e 100644
--- a/src/gb/gprs_ns2_message.c
+++ b/src/gb/gprs_ns2_message.c
@@ -207,11 +207,16 @@
  *  \param[in] vc NS-VC on which the NS-BLOCK is to be transmitted
  *  \param[in] cause Numeric NS Cause value
  *  \returns 0 in case of success */
-int ns2_tx_block(struct gprs_ns2_vc *nsvc, uint8_t cause)
+int ns2_tx_block(struct gprs_ns2_vc *nsvc, uint8_t cause, uint16_t *nsvci)
 {
 	struct msgb *msg;
 	struct gprs_ns_hdr *nsh;
-	uint16_t nsvci = osmo_htons(nsvc->nsvci);
+	uint16_t encoded_nsvci;
+
+	if (nsvci)
+		encoded_nsvci = osmo_htons(*nsvci);
+	else
+		encoded_nsvci = osmo_htons(nsvc->nsvci);
 
 	log_set_context(LOG_CTX_GB_NSE, nsvc->nse);
 	log_set_context(LOG_CTX_GB_NSVC, nsvc);
@@ -229,7 +234,7 @@
 	nsh->pdu_type = NS_PDUT_BLOCK;
 
 	msgb_tvlv_put(msg, NS_IE_CAUSE, 1, &cause);
-	msgb_tvlv_put(msg, NS_IE_VCI, 2, (uint8_t *) &nsvci);
+	msgb_tvlv_put(msg, NS_IE_VCI, 2, (uint8_t *) &encoded_nsvci);
 
 	LOG_NS_SIGNAL(nsvc, "Tx", nsh->pdu_type, LOGL_INFO, " cause=%s\n", gprs_ns2_cause_str(cause));
 	return ns_vc_tx(nsvc, msg);
@@ -238,11 +243,16 @@
 /*! Transmit a NS-BLOCK-ACK on a given NS-VC.
  *  \param[in] nsvc NS-VC on which the NS-BLOCK is to be transmitted
  *  \returns 0 in case of success */
-int ns2_tx_block_ack(struct gprs_ns2_vc *nsvc)
+int ns2_tx_block_ack(struct gprs_ns2_vc *nsvc, uint16_t *nsvci)
 {
 	struct msgb *msg;
 	struct gprs_ns_hdr *nsh;
-	uint16_t nsvci = osmo_htons(nsvc->nsvci);
+	uint16_t encoded_nsvci;
+
+	if (nsvci)
+		encoded_nsvci = osmo_htons(*nsvci);
+	else
+		encoded_nsvci = osmo_htons(nsvc->nsvci);
 
 	log_set_context(LOG_CTX_GB_NSE, nsvc->nse);
 	log_set_context(LOG_CTX_GB_NSVC, nsvc);
@@ -257,7 +267,7 @@
 	nsh = (struct gprs_ns_hdr *) msg->l2h;
 	nsh->pdu_type = NS_PDUT_BLOCK_ACK;
 
-	msgb_tvlv_put(msg, NS_IE_VCI, 2, (uint8_t *) &nsvci);
+	msgb_tvlv_put(msg, NS_IE_VCI, 2, (uint8_t *) &encoded_nsvci);
 
 	LOG_NS_TX_SIGNAL(nsvc, nsh->pdu_type);
 	return ns_vc_tx(nsvc, msg);
diff --git a/src/gb/gprs_ns2_vc_fsm.c b/src/gb/gprs_ns2_vc_fsm.c
index fa8cec2..a366c93 100644
--- a/src/gb/gprs_ns2_vc_fsm.c
+++ b/src/gb/gprs_ns2_vc_fsm.c
@@ -348,7 +348,7 @@
 		if (old_state == GPRS_NS2_ST_RESET) {
 			osmo_timer_del(&fi->timer);
 		} else {
-			ns2_tx_block(priv->nsvc, NS_CAUSE_OM_INTERVENTION);
+			ns2_tx_block(priv->nsvc, NS_CAUSE_OM_INTERVENTION, NULL);
 		}
 	} else if (priv->initiate_block) {
 		ns2_tx_unblock(priv->nsvc);
@@ -369,12 +369,12 @@
 			break;
 		case GPRS_NS2_EV_RX_BLOCK:
 			priv->accept_unitdata = false;
-			ns2_tx_block_ack(priv->nsvc);
+			ns2_tx_block_ack(priv->nsvc, NULL);
 			osmo_timer_del(&fi->timer);
 			break;
 		case GPRS_NS2_EV_RX_UNBLOCK:
 			priv->accept_unitdata = false;
-			ns2_tx_block(priv->nsvc, NS_CAUSE_OM_INTERVENTION);
+			ns2_tx_block(priv->nsvc, NS_CAUSE_OM_INTERVENTION, NULL);
 			osmo_timer_add(&fi->timer);
 			break;
 		}
@@ -382,7 +382,7 @@
 		switch (event) {
 		case GPRS_NS2_EV_RX_BLOCK:
 			/* TODO: BLOCK is a UNBLOCK_NACK */
-			ns2_tx_block_ack(priv->nsvc);
+			ns2_tx_block_ack(priv->nsvc, NULL);
 			break;
 		case GPRS_NS2_EV_RX_UNBLOCK:
 			ns2_tx_unblock_ack(priv->nsvc);
@@ -397,7 +397,7 @@
 		/* we are on the receiving end. The initiator who sent RESET is responsible to UNBLOCK! */
 		switch (event) {
 		case GPRS_NS2_EV_RX_BLOCK:
-			ns2_tx_block_ack(priv->nsvc);
+			ns2_tx_block_ack(priv->nsvc, NULL);
 			break;
 		case GPRS_NS2_EV_RX_UNBLOCK:
 			ns2_tx_unblock_ack(priv->nsvc);
@@ -441,7 +441,7 @@
 	case GPRS_NS2_EV_RX_BLOCK:
 		priv->initiate_block = false;
 		priv->accept_unitdata = false;
-		ns2_tx_block_ack(priv->nsvc);
+		ns2_tx_block_ack(priv->nsvc, NULL);
 		osmo_fsm_inst_state_chg(fi, GPRS_NS2_ST_BLOCKED,
 					0, 2);
 		break;
diff --git a/tests/gb/gprs_ns2_test.c b/tests/gb/gprs_ns2_test.c
index ad78a62..0221a8d 100644
--- a/tests/gb/gprs_ns2_test.c
+++ b/tests/gb/gprs_ns2_test.c
@@ -439,7 +439,7 @@
 
 	printf("---- Send Block NSVC[0]\n");
 	ns2_vc_block(nsvc[0]);
-	ns2_tx_block_ack(loop[0]);
+	ns2_tx_block_ack(loop[0], NULL);
 
 	/* try to receive a unitdata - this should be dropped & freed by NS */
 	printf("---- Try to receive over blocked NSVC[0]\n");

-- 
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/25554
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I6189229fdc1f054e86811bc60cb7646e1f758a78
Gerrit-Change-Number: 25554
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis at fe80.eu>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210923/b50d53bb/attachment.htm>


More information about the gerrit-log mailing list