Change in libosmocore[master]: Set DTX in Cell Options
From Max <msuraev@sysmocom.de>:
Max has uploaded a new change for review. https://gerrit.osmocom.org/39 Change subject: Set DTX in Cell Options ...................................................................... Set DTX in Cell Options * rename field of struct gsm48_cell_options to better match the spec * add comments with spec references * add function for setting DTX in cell options struct * add necessary enum type Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 --- M include/osmocom/gsm/protocol/gsm_04_08.h M src/gsm/gsm48.c M src/gsm/libosmogsm.map 3 files changed, 61 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/39/39/1 diff --git a/include/osmocom/gsm/protocol/gsm_04_08.h b/include/osmocom/gsm/protocol/gsm_04_08.h index 3282bc1..5ee387b 100644 --- a/include/osmocom/gsm/protocol/gsm_04_08.h +++ b/include/osmocom/gsm/protocol/gsm_04_08.h @@ -1,6 +1,7 @@ #pragma once #include <stdint.h> +#include <stdbool.h> #include <osmocom/core/utils.h> @@ -469,11 +470,20 @@ uint8_t t3212; } __attribute__ ((packed)); +enum gsm48_dtx_mode { + GSM48_MAY_USE, + GSM48_SHALL_USE, + GSM48_SHALL_NOT +}; + +/* Cell Options for SI6, SACCH (10.5.2.3a.2) or SI3, BCCH (Table 10.5.2.3.1), + 3GPP TS 44.018 */ struct gsm48_cell_options { uint8_t radio_link_timeout:4, dtx:2, pwrc:1, - spare:1; + /* either DN-IND or top bit of DTX IND */ + d:1; } __attribute__ ((packed)); /* Section 9.2.9 CM service request */ @@ -827,6 +837,9 @@ } } +void gsm48_set_dtx(struct gsm48_cell_options *op, enum gsm48_dtx_mode full, + enum gsm48_dtx_mode half, bool is_bcch); + #define gsm48_hdr_msg_type gsm48_hdr_msg_type_r99 /* Section 10.4 */ diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c index ab62605..2a30b3c 100644 --- a/src/gsm/gsm48.c +++ b/src/gsm/gsm48.c @@ -25,7 +25,7 @@ #include <stdint.h> #include <stdio.h> #include <string.h> - +#include <stdbool.h> #include <arpa/inet.h> #include <osmocom/core/utils.h> @@ -358,6 +358,50 @@ return 0; } +/*! \brief Set DTX mode in Cell Options IE (3GPP TS 44.018) + * \param[in] op Cell Options structure in which DTX parameters will be set + * \param[in] full Mode for full-rate channels + * \param[in] half Mode for half-rate channels + * \param[in] is_bcch Indicates if we should use 10.5.2.3.1 instead of + * 10.5.2.3a.2 + * + * There is no space for separate DTX settings for Full and Half rate channels + * in BCCH - in this case full setting is used for both and half parameter is + * ignored. + */ +void gsm48_set_dtx(struct gsm48_cell_options *op, enum gsm48_dtx_mode full, + enum gsm48_dtx_mode half, bool is_bcch) +{ + if (is_bcch) { + switch (full) { + case GSM48_MAY_USE: + op->dtx = 0; + return; + case GSM48_SHALL_USE: + op->dtx = 1; + return; + case GSM48_SHALL_NOT: + op->dtx = 2; + return; + } + } else { + switch (full) { + case GSM48_MAY_USE: + op->dtx = (half == GSM48_SHALL_USE) ? 3 : 0; + op->d = (half == GSM48_SHALL_NOT) ? 0 : 1; + return; + case GSM48_SHALL_USE: + op->dtx = (half == GSM48_MAY_USE) ? 3 : 1; + op->d = (half == GSM48_SHALL_USE) ? 1 : 0; + return; + case GSM48_SHALL_NOT: + op->dtx = 2; + op->d = (half == GSM48_SHALL_USE) ? 1 : 0; + return; + } + } +} + int gsm48_generate_mid_from_tmsi(uint8_t *buf, uint32_t tmsi) { uint32_t tmsi_be = htonl(tmsi); diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index e0d9dcb..834e5d6 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -162,6 +162,8 @@ gsm48_number_of_paging_subchannels; gsm48_parse_ra; gsm48_rr_att_tlvdef; +gsm48_set_dtx; +gsm48_dtx_mode; gsm48_mi_type_name; gsm48_mcc_mnc_to_bcd; gsm48_mcc_mnc_from_bcd; -- To view, visit https://gerrit.osmocom.org/39 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev@sysmocom.de>
From Harald Welte <laforge@gnumonks.org>:
Harald Welte has posted comments on this change. Change subject: Set DTX in Cell Options ...................................................................... Patch Set 1: Code-Review-1 (1 comment) aside from the naming (see comment) it looks fine to me https://gerrit.osmocom.org/#/c/39/1/include/osmocom/gsm/protocol/gsm_04_08.h File include/osmocom/gsm/protocol/gsm_04_08.h: Line 474: GSM48_MAY_USE, Naming. GSM48_MAY_USE is very generic, as 04.08 covers all of GSM L3. So unless we intend to use the same enum for other topics, too (which we don't, as it is called gsm48_dtx_mode), it should be called GSM48_{MAY,SHALL,SHALL_NOT}_USE_DTX or GSM48_DTX_{MAY,SHALL,SHALL_NOT}_BE_USED -- To view, visit https://gerrit.osmocom.org/39 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev@sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> Gerrit-Reviewer: Jenkins Builder Gerrit-HasComments: Yes
From Max <msuraev@sysmocom.de>:
Hello Harald Welte, Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/39 to look at the new patch set (#2). Change subject: Set DTX in Cell Options ...................................................................... Set DTX in Cell Options * rename field of struct gsm48_cell_options to better match the spec * add comments with spec references * add function for setting DTX in cell options struct * add necessary enum type Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 --- M include/osmocom/gsm/protocol/gsm_04_08.h M src/gsm/gsm48.c M src/gsm/libosmogsm.map 3 files changed, 61 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/39/39/2 -- To view, visit https://gerrit.osmocom.org/39 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 Gerrit-PatchSet: 2 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev@sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> Gerrit-Reviewer: Jenkins Builder
From Max <msuraev@sysmocom.de>:
Max has posted comments on this change. Change subject: Set DTX in Cell Options ...................................................................... Patch Set 2: Build failure in unrelated test bssgp-fc - weird. How can I download testsuite.log from jenkins? -- To view, visit https://gerrit.osmocom.org/39 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 Gerrit-PatchSet: 2 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev@sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max <msuraev@sysmocom.de> Gerrit-HasComments: No
From Harald Welte <laforge@gnumonks.org>:
Harald Welte has posted comments on this change. Change subject: Set DTX in Cell Options ...................................................................... Patch Set 2: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/39 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 Gerrit-PatchSet: 2 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev@sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max <msuraev@sysmocom.de> Gerrit-HasComments: No
From Holger Freyther <holger@freyther.de>:
Holger Freyther has submitted this change and it was merged. Change subject: Set DTX in Cell Options ...................................................................... Set DTX in Cell Options * rename field of struct gsm48_cell_options to better match the spec * add comments with spec references * add function for setting DTX in cell options struct * add necessary enum type Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 Reviewed-on: https://gerrit.osmocom.org/39 Reviewed-by: Harald Welte <laforge@gnumonks.org> Tested-by: Jenkins Builder --- M include/osmocom/gsm/protocol/gsm_04_08.h M src/gsm/gsm48.c M src/gsm/libosmogsm.map 3 files changed, 61 insertions(+), 2 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/include/osmocom/gsm/protocol/gsm_04_08.h b/include/osmocom/gsm/protocol/gsm_04_08.h index 3282bc1..4800b48 100644 --- a/include/osmocom/gsm/protocol/gsm_04_08.h +++ b/include/osmocom/gsm/protocol/gsm_04_08.h @@ -1,6 +1,7 @@ #pragma once #include <stdint.h> +#include <stdbool.h> #include <osmocom/core/utils.h> @@ -469,11 +470,20 @@ uint8_t t3212; } __attribute__ ((packed)); +enum gsm48_dtx_mode { + GSM48_DTX_MAY_BE_USED, + GSM48_DTX_SHALL_BE_USED, + GSM48_DTX_SHALL_NOT_BE_USED +}; + +/* Cell Options for SI6, SACCH (10.5.2.3a.2) or SI3, BCCH (Table 10.5.2.3.1), + 3GPP TS 44.018 */ struct gsm48_cell_options { uint8_t radio_link_timeout:4, dtx:2, pwrc:1, - spare:1; + /* either DN-IND or top bit of DTX IND */ + d:1; } __attribute__ ((packed)); /* Section 9.2.9 CM service request */ @@ -827,6 +837,9 @@ } } +void gsm48_set_dtx(struct gsm48_cell_options *op, enum gsm48_dtx_mode full, + enum gsm48_dtx_mode half, bool is_bcch); + #define gsm48_hdr_msg_type gsm48_hdr_msg_type_r99 /* Section 10.4 */ diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c index ab62605..8a46f76 100644 --- a/src/gsm/gsm48.c +++ b/src/gsm/gsm48.c @@ -25,7 +25,7 @@ #include <stdint.h> #include <stdio.h> #include <string.h> - +#include <stdbool.h> #include <arpa/inet.h> #include <osmocom/core/utils.h> @@ -358,6 +358,50 @@ return 0; } +/*! \brief Set DTX mode in Cell Options IE (3GPP TS 44.018) + * \param[in] op Cell Options structure in which DTX parameters will be set + * \param[in] full Mode for full-rate channels + * \param[in] half Mode for half-rate channels + * \param[in] is_bcch Indicates if we should use 10.5.2.3.1 instead of + * 10.5.2.3a.2 + * + * There is no space for separate DTX settings for Full and Half rate channels + * in BCCH - in this case full setting is used for both and half parameter is + * ignored. + */ +void gsm48_set_dtx(struct gsm48_cell_options *op, enum gsm48_dtx_mode full, + enum gsm48_dtx_mode half, bool is_bcch) +{ + if (is_bcch) { + switch (full) { + case GSM48_DTX_MAY_BE_USED: + op->dtx = 0; + return; + case GSM48_DTX_SHALL_BE_USED: + op->dtx = 1; + return; + case GSM48_DTX_SHALL_NOT_BE_USED: + op->dtx = 2; + return; + } + } else { + switch (full) { + case GSM48_DTX_MAY_BE_USED: + op->dtx = (half == GSM48_DTX_SHALL_BE_USED) ? 3 : 0; + op->d = (half == GSM48_DTX_SHALL_NOT_BE_USED) ? 0 : 1; + return; + case GSM48_DTX_SHALL_BE_USED: + op->dtx = (half == GSM48_DTX_MAY_BE_USED) ? 3 : 1; + op->d = (half == GSM48_DTX_SHALL_BE_USED) ? 1 : 0; + return; + case GSM48_DTX_SHALL_NOT_BE_USED: + op->dtx = 2; + op->d = (half == GSM48_DTX_SHALL_BE_USED) ? 1 : 0; + return; + } + } +} + int gsm48_generate_mid_from_tmsi(uint8_t *buf, uint32_t tmsi) { uint32_t tmsi_be = htonl(tmsi); diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index e0d9dcb..834e5d6 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -162,6 +162,8 @@ gsm48_number_of_paging_subchannels; gsm48_parse_ra; gsm48_rr_att_tlvdef; +gsm48_set_dtx; +gsm48_dtx_mode; gsm48_mi_type_name; gsm48_mcc_mnc_to_bcd; gsm48_mcc_mnc_from_bcd; -- To view, visit https://gerrit.osmocom.org/39 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I5a8924f57669c951b2e51b663d95f1d360062a54 Gerrit-PatchSet: 3 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev@sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> Gerrit-Reviewer: Holger Freyther <holger@freyther.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max <msuraev@sysmocom.de>
participants (1)
-
gerrit-no-reply@lists.osmocom.org