jolly has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/34788?usp=email )
Change subject: ASCI: Join a group/bcast call in correct MM states only ......................................................................
ASCI: Join a group/bcast call in correct MM states only
These states are: GSM48_MM_SST_NORMAL_SERVICE GSM48_MM_SST_ATTEMPT_UPDATE GSM48_MM_SST_LIMITED_SERVICE GSM48_MM_SST_LOC_UPD_NEEDED GSM48_MM_SST_PLMN_SEARCH (limited service) GSM48_MM_SST_PLMN_SEARCH_NORMAL
If the service is limited, group/bcast calls can be joined, but uplink access is not allowed.
Related: OS#5364 Change-Id: I2f8ff65f6e101972f9b1760013983d00ae6e7760 --- M src/host/layer23/src/mobile/gsm48_mm.c 1 file changed, 40 insertions(+), 7 deletions(-)
Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified
diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c index 995c5d1..0cf1fee 100644 --- a/src/host/layer23/src/mobile/gsm48_mm.c +++ b/src/host/layer23/src/mobile/gsm48_mm.c @@ -3816,10 +3816,11 @@ mm->vgcs.enabled = true; mm->vgcs.group_call = (mmh->msg_type == GSM48_MMGCC_GROUP_REQ); mm->vgcs.callref = mmh->ref; - mm->vgcs.normal_service = (mm->substate == GSM48_MM_SST_NORMAL_SERVICE); + mm->vgcs.normal_service = (mm->substate == GSM48_MM_SST_NORMAL_SERVICE || + mm->substate == GSM48_MM_SST_PLMN_SEARCH_NORMAL);
/* Change to VGCS substate. */ - new_mm_state(mm, GSM48_MM_ST_MM_IDLE, (mm->substate == GSM48_MM_SST_NORMAL_SERVICE) + new_mm_state(mm, GSM48_MM_ST_MM_IDLE, (mm->vgcs.normal_service) ? GSM48_MM_SST_RX_VGCS_NORMAL : GSM48_MM_SST_RX_VGCS_LIMITED);
/* Group recevie mode request to RR layer */ @@ -4180,10 +4181,12 @@ SBIT(GSM48_MM_SST_LOC_UPD_NEEDED), GSM48_MMCC_EST_REQ, gsm48_mm_init_mm_no_rr}, /* emergency only */
- {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_ATTEMPT_UPDATE), + {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_ATTEMPT_UPDATE) | + SBIT(GSM48_MM_SST_LOC_UPD_NEEDED), GSM48_MMBCC_GROUP_REQ, gsm48_mm_group_req},
- {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_ATTEMPT_UPDATE), + {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_ATTEMPT_UPDATE) | + SBIT(GSM48_MM_SST_LOC_UPD_NEEDED), GSM48_MMGCC_GROUP_REQ, gsm48_mm_group_req},
/* 4.2.2.3 Limited service */ @@ -4216,10 +4219,22 @@ {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_PLMN_SEARCH_NORMAL), GSM48_MMBCC_EST_REQ, gsm48_mm_init_mm_no_rr},
+ {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_PLMN_SEARCH_NORMAL), + GSM48_MMBCC_GROUP_REQ, gsm48_mm_group_req}, + + {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_PLMN_SEARCH_NORMAL), + GSM48_MMGCC_GROUP_REQ, gsm48_mm_group_req}, + /* 4.2.2.6 PLMN search */ {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_PLMN_SEARCH), GSM48_MMCC_EST_REQ, gsm48_mm_init_mm_no_rr},
+ {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_PLMN_SEARCH), + GSM48_MMBCC_GROUP_REQ, gsm48_mm_group_req}, + + {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_PLMN_SEARCH), + GSM48_MMGCC_GROUP_REQ, gsm48_mm_group_req}, + /* 4.2.2.7 Receiving group call, normal service */ {SBIT(GSM48_MM_ST_MM_IDLE), SBIT(GSM48_MM_SST_RX_VGCS_NORMAL), GSM48_MMGCC_REL_REQ, gsm48_mm_group_rel_req}, @@ -4271,9 +4286,6 @@ {SBIT(GSM48_MM_ST_MM_CONN_ACTIVE), ALL_STATES, GSM48_MMSMS_EST_REQ, gsm48_mm_init_mm_more},
- {SBIT(GSM48_MM_ST_MM_CONN_ACTIVE), ALL_STATES, - GSM48_MMGCC_GROUP_REQ, gsm48_mm_group_req}, - {SBIT(GSM48_MM_ST_WAIT_NETWORK_CMD), ALL_STATES, GSM48_MMCC_EST_REQ, gsm48_mm_init_mm_wait},