Change in osmo-bsc[master]: WIP: Deferr IPACC MDCX after BTS side MGCP MDCX

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/.

pespin gerrit-no-reply at lists.osmocom.org
Wed Sep 2 19:15:06 UTC 2020


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/19954 )


Change subject: WIP: Deferr IPACC MDCX after BTS side MGCP MDCX
......................................................................

WIP: Deferr IPACC MDCX after BTS side MGCP MDCX

This is needed to be able to force MGW to provide an IPv4 address during
MDCX, since IPACC protocol on the BTS side only supports IPv4, but one
may need IPv6 side at the same time on the core side.
By moving the IPACC MDCX request to a later step, the BSC gains
knowledge of the local address on each side (BTS, MGW), and if they
don't match (ie. BTS uses IPv4 and MGW uses IPv6), it can then get MGW
to offer an IPv4 address during MGCP MDCX containing the BTS IPv4
address. At that point, the MGW can see the mismatch and provide an IPv4
address in the MGCP MDCX ACK, which can then finally be communicated to
the BTS during IPACC MDCX phase.

Previous order:
BSC -> MGW: CRCX
BSC <- MGW: CRCX ACK i		(get MGW local IP addr)
BSC -> BTS: IPACC CRCX
BSC <- BTS: IPACC CRCX ACK 	(get BTS local IP addr)
BSC -> BTS: IPACC MDCX 		(set MGW IP addr)
BSC <- BTS: IPACC MDCX ACK
BSC -> MGW: MDCX 		(set BTS IP addr)
BSC <- MGW: MDCX ACK

New order:
BSC -> MGW: CRCX
BSC <- MGW: CRCX ACK 		(get MGCP local IPv6 addr)
BSC -> BTS: IPACC CRCX
BSC <- BTS: IPACC CRCX ACK 	(get BTS local IPv4 addr)
BSC -> MGW: MDCX 		(set BTS IPv4 addr)
BSC <- MGW: MDCX ACK 		(here MGW changes its local addr to IPv6
BSC -> BTS: IPACC MDCX 		(set MGW IPv6 addr)
BSC <- BTS: IPACC MDCX ACK

TODO: Probably need to update some ladder diagrams

Change-Id: I4de5ea5c94c1482c9cb0b6386997a942edc60e32
---
M src/osmo-bsc/lchan_rtp_fsm.c
1 file changed, 26 insertions(+), 28 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/54/19954/1

diff --git a/src/osmo-bsc/lchan_rtp_fsm.c b/src/osmo-bsc/lchan_rtp_fsm.c
index 1dd31b1..5de2967 100644
--- a/src/osmo-bsc/lchan_rtp_fsm.c
+++ b/src/osmo-bsc/lchan_rtp_fsm.c
@@ -301,10 +301,7 @@
 	switch (event) {
 
 	case LCHAN_RTP_EV_IPACC_CRCX_ACK:
-		/* the CRCX ACK parsing has already noted the RTP port information at
-		 * lchan->abis_ip.bound_*, see ipac_parse_rtp(). We'll use that in
-		 * lchan_rtp_fsm_wait_mgw_endpoint_configured_onenter(). */
-		lchan_rtp_fsm_state_chg(LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK);
+		lchan_rtp_fsm_switch_rtp(fi);
 		return;
 
 	case LCHAN_RTP_EV_IPACC_CRCX_NACK:
@@ -366,21 +363,16 @@
 
 static void lchan_rtp_fsm_wait_ipacc_mdcx_ack(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 {
-	struct gsm_lchan *lchan = lchan_rtp_fi_lchan(fi);
 	switch (event) {
 
 	case LCHAN_RTP_EV_IPACC_MDCX_ACK:
-		lchan_rtp_fsm_switch_rtp(fi);
+		lchan_rtp_fsm_state_chg(LCHAN_RTP_ST_READY);
 		return;
 
 	case LCHAN_RTP_EV_IPACC_MDCX_NACK:
 		lchan_rtp_fail("Received NACK on IPACC MDCX");
 		return;
 
-	case LCHAN_RTP_EV_READY_TO_SWITCH_RTP:
-		lchan->activate.info.wait_before_switching_rtp = false;
-		return;
-
 	case LCHAN_RTP_EV_RELEASE:
 	case LCHAN_RTP_EV_ROLLBACK:
 		osmo_fsm_inst_term(fi, OSMO_FSM_TERM_REQUEST, 0);
@@ -480,10 +472,15 @@
 
 static void lchan_rtp_fsm_wait_mgw_endpoint_configured(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 {
-	switch (event) {
+	struct gsm_lchan *lchan = lchan_rtp_fi_lchan(fi);
 
+	switch (event) {
 	case LCHAN_RTP_EV_MGW_ENDPOINT_CONFIGURED:
-		lchan_rtp_fsm_state_chg(LCHAN_RTP_ST_READY);
+		if (is_ipaccess_bts(lchan->ts->trx->bts))
+			lchan_rtp_fsm_state_chg(LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK);
+		else {
+			lchan_rtp_fsm_state_chg(LCHAN_RTP_ST_READY);
+		}
 		return;
 
 	case LCHAN_RTP_EV_MGW_ENDPOINT_ERROR:
@@ -652,23 +649,8 @@
 			| S(LCHAN_RTP_EV_ROLLBACK)
 			,
 		.out_state_mask = 0
-			| S(LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK)
-			,
-	},
-	[LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK] = {
-		.name = "WAIT_IPACC_MDCX_ACK",
-		.onenter = lchan_rtp_fsm_wait_ipacc_mdcx_ack_onenter,
-		.action = lchan_rtp_fsm_wait_ipacc_mdcx_ack,
-		.in_event_mask = 0
-			| S(LCHAN_RTP_EV_READY_TO_SWITCH_RTP)
-			| S(LCHAN_RTP_EV_IPACC_MDCX_ACK)
-			| S(LCHAN_RTP_EV_IPACC_MDCX_NACK)
-			| S(LCHAN_RTP_EV_RELEASE)
-			| S(LCHAN_RTP_EV_ROLLBACK)
-			,
-		.out_state_mask = 0
 			| S(LCHAN_RTP_ST_WAIT_READY_TO_SWITCH_RTP)
-			| S(LCHAN_RTP_ST_WAIT_MGW_ENDPOINT_CONFIGURED)
+			| S(LCHAN_RTP_ST_WAIT_MGW_ENDPOINT_CONFIGURED) /*old: LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK*/
 			,
 	},
 	[LCHAN_RTP_ST_WAIT_READY_TO_SWITCH_RTP] = {
@@ -694,6 +676,22 @@
 			| S(LCHAN_RTP_EV_ROLLBACK)
 			,
 		.out_state_mask = 0
+			| S(LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK)
+			| S(LCHAN_RTP_ST_READY)
+			| S(LCHAN_RTP_ST_ROLLBACK)
+			,
+	},
+	[LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK] = {
+		.name = "WAIT_IPACC_MDCX_ACK",
+		.onenter = lchan_rtp_fsm_wait_ipacc_mdcx_ack_onenter,
+		.action = lchan_rtp_fsm_wait_ipacc_mdcx_ack,
+		.in_event_mask = 0
+			| S(LCHAN_RTP_EV_IPACC_MDCX_ACK)
+			| S(LCHAN_RTP_EV_IPACC_MDCX_NACK)
+			| S(LCHAN_RTP_EV_RELEASE)
+			| S(LCHAN_RTP_EV_ROLLBACK)
+			,
+		.out_state_mask = 0
 			| S(LCHAN_RTP_ST_READY)
 			| S(LCHAN_RTP_ST_ROLLBACK)
 			,

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

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I4de5ea5c94c1482c9cb0b6386997a942edc60e32
Gerrit-Change-Number: 19954
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200902/a0da1723/attachment.htm>


More information about the gerrit-log mailing list