This commit is a very unclean fix to deal with
extension version groups present in the RRC release 10
ASN.1 file (extensions between [[ and ]]).
Basically we do a syntactic replacement at compile time.
[[ becomes '<name> SEQUENCE {'
]] becomes '} OPTIONAL'
<name> is 'ext<N>' where N is a number
increasing at each new extension group
in a given definition.
The UPER encoding for the two syntaxes is identical
(as far as y understanding of the specifications goes).
The XER encoding is different, due to the new 'ext<N>'
name.
Other encodings may be different.
The real solution is to fix the ASN.1 compiler.
This is not a simple task.
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7705 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -6,7 +6,110 @@ mkdir -p $1
|
|||||||
cd $1
|
cd $1
|
||||||
shift
|
shift
|
||||||
|
|
||||||
asn1c -gen-PER -fcompound-names $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample
|
#if this script is called with only 2 arguments (so 1 here after the shift), it's for RRC
|
||||||
|
#(there may be a better way...)
|
||||||
|
if [ $# -eq 1 ]; then
|
||||||
|
|
||||||
|
#asn1c does not work well with extension groups, we need the following fix:
|
||||||
|
# replace [[ by '<name> SEQUENCE {'
|
||||||
|
# and ]] by '} OPTIONAL'
|
||||||
|
#<name> is ext<N> with N starting from 1 and incremented at each new [[ ]] just
|
||||||
|
#following another [[ ]]
|
||||||
|
#
|
||||||
|
#this is what the following C program does
|
||||||
|
|
||||||
|
echo generate asnfix.c
|
||||||
|
|
||||||
|
cat << EOF > asnfix.c
|
||||||
|
/* transforms:
|
||||||
|
* '[[' to 'name SEQUENCE {'
|
||||||
|
* ']]' to '} OPTIONAL'
|
||||||
|
* name is ext1, ext2, ..., for each [[ at the same level
|
||||||
|
* levels are delimited by { and }
|
||||||
|
* -- to end of line is a comment and unprocessed
|
||||||
|
* nested [[ ]] not handled
|
||||||
|
* { and } must be balanced
|
||||||
|
* [[ and ]] can be whatever, every combination is valid
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
void level(int toplevel)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
int next_name = 1;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
c = getchar();
|
||||||
|
next:
|
||||||
|
if (c == EOF) { if (toplevel) break; abort(); }
|
||||||
|
|
||||||
|
if (c == '-') {
|
||||||
|
c = getchar();
|
||||||
|
if (c != '-') { putchar('-'); goto next; }
|
||||||
|
putchar(c); putchar(c);
|
||||||
|
while (1) {
|
||||||
|
c = getchar(); if (c == EOF) abort();
|
||||||
|
putchar(c);
|
||||||
|
if (c == '\n') break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == '[') {
|
||||||
|
c = getchar();
|
||||||
|
if (c != '[') { putchar('['); goto next; }
|
||||||
|
printf("ext%d SEQUENCE {", next_name);
|
||||||
|
next_name++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == ']') {
|
||||||
|
c = getchar();
|
||||||
|
if (c != ']') { putchar(']'); goto next; }
|
||||||
|
printf("} OPTIONAL");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
putchar(c);
|
||||||
|
if (c == '}') { if (toplevel) abort(); break; }
|
||||||
|
if (c == '{') level(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
level(1);
|
||||||
|
fflush(stdout);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo compile asnfix.c
|
||||||
|
|
||||||
|
gcc -Wall -o asnfix asnfix.c
|
||||||
|
|
||||||
|
echo run asnfix on $1
|
||||||
|
|
||||||
|
./asnfix < $1 > fixed_grammar.asn
|
||||||
|
|
||||||
|
rm -f asnfix asnfix.c
|
||||||
|
|
||||||
|
echo done with asnfix
|
||||||
|
|
||||||
|
echo running asn1c
|
||||||
|
|
||||||
|
asn1c -gen-PER -fcompound-names fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample
|
||||||
|
|
||||||
|
rm -f fixed_grammar.asn
|
||||||
|
|
||||||
|
echo asn1c done
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
asn1c -gen-PER -fcompound-names $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
awk '
|
awk '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
|
|||||||
@@ -220,8 +220,8 @@ rrc_mac_config_req(
|
|||||||
|
|
||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
|
|
||||||
if (mac_MainConfig->sr_ProhibitTimer_r9) {
|
if (mac_MainConfig->ext1 && mac_MainConfig->ext1->sr_ProhibitTimer_r9) {
|
||||||
UE_mac_inst[Mod_id].scheduling_info.sr_ProhibitTimer = (uint16_t) *mac_MainConfig->sr_ProhibitTimer_r9;
|
UE_mac_inst[Mod_id].scheduling_info.sr_ProhibitTimer = (uint16_t) *mac_MainConfig->ext1->sr_ProhibitTimer_r9;
|
||||||
} else {
|
} else {
|
||||||
UE_mac_inst[Mod_id].scheduling_info.sr_ProhibitTimer = (uint16_t) 0;
|
UE_mac_inst[Mod_id].scheduling_info.sr_ProhibitTimer = (uint16_t) 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -688,10 +688,14 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
|
|
||||||
(*sib2)->ac_BarringInfo = NULL;
|
(*sib2)->ac_BarringInfo = NULL;
|
||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
|
#if 0
|
||||||
(*sib2)->ssac_BarringForMMTEL_Voice_r9 = NULL;
|
(*sib2)->ssac_BarringForMMTEL_Voice_r9 = NULL;
|
||||||
(*sib2)->ssac_BarringForMMTEL_Video_r9 = NULL;
|
(*sib2)->ssac_BarringForMMTEL_Video_r9 = NULL;
|
||||||
(*sib2)->ac_BarringForCSFB_r10 = NULL;
|
(*sib2)->ac_BarringForCSFB_r10 = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
(*sib2)->ext1 = NULL;
|
||||||
|
(*sib2)->ext2 = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
|
|
||||||
@@ -989,10 +993,13 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
|
|
||||||
/// (*SIB3)
|
/// (*SIB3)
|
||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
|
(*sib3)->ext1 = NULL;
|
||||||
|
#if 0
|
||||||
(*sib3)->s_IntraSearch_v920=NULL;
|
(*sib3)->s_IntraSearch_v920=NULL;
|
||||||
(*sib3)->s_NonIntraSearch_v920=NULL;
|
(*sib3)->s_NonIntraSearch_v920=NULL;
|
||||||
(*sib3)->q_QualMin_r9=NULL;
|
(*sib3)->q_QualMin_r9=NULL;
|
||||||
(*sib3)->threshServingLowQ_r9=NULL;
|
(*sib3)->threshServingLowQ_r9=NULL;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
(*sib3)->cellReselectionInfoCommon.q_Hyst=SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB4;
|
(*sib3)->cellReselectionInfoCommon.q_Hyst=SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB4;
|
||||||
|
|
||||||
|
|||||||
+17
-17
@@ -2883,33 +2883,33 @@ static void dump_sib2( SystemInformationBlockType2_t *sib2 )
|
|||||||
} else
|
} else
|
||||||
LOG_I( RRC, "lateNonCriticalExtension : not defined\n" );
|
LOG_I( RRC, "lateNonCriticalExtension : not defined\n" );
|
||||||
|
|
||||||
if (sib2->ssac_BarringForMMTEL_Voice_r9) {
|
if (sib2->ext1 && sib2->ext1->ssac_BarringForMMTEL_Voice_r9) {
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringFactor : %ld\n",
|
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringFactor : %ld\n",
|
||||||
sib2->ssac_BarringForMMTEL_Voice_r9->ac_BarringFactor );
|
sib2->ext1->ssac_BarringForMMTEL_Voice_r9->ac_BarringFactor );
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringTime : %ld\n",
|
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringTime : %ld\n",
|
||||||
sib2->ssac_BarringForMMTEL_Voice_r9->ac_BarringTime );
|
sib2->ext1->ssac_BarringForMMTEL_Voice_r9->ac_BarringTime );
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringForSpecialAC : %"PRIu32"\n",
|
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringForSpecialAC : %"PRIu32"\n",
|
||||||
BIT_STRING_to_uint32(&sib2->ssac_BarringForMMTEL_Voice_r9->ac_BarringForSpecialAC) );
|
BIT_STRING_to_uint32(&sib2->ext1->ssac_BarringForMMTEL_Voice_r9->ac_BarringForSpecialAC) );
|
||||||
} else
|
} else
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9 : not defined\n" );
|
LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9 : not defined\n" );
|
||||||
|
|
||||||
if (sib2->ssac_BarringForMMTEL_Video_r9) {
|
if (sib2->ext1 && sib2->ext1->ssac_BarringForMMTEL_Video_r9) {
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringFactor : %ld\n",
|
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringFactor : %ld\n",
|
||||||
sib2->ssac_BarringForMMTEL_Video_r9->ac_BarringFactor );
|
sib2->ext1->ssac_BarringForMMTEL_Video_r9->ac_BarringFactor );
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringTime : %ld\n",
|
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringTime : %ld\n",
|
||||||
sib2->ssac_BarringForMMTEL_Video_r9->ac_BarringTime );
|
sib2->ext1->ssac_BarringForMMTEL_Video_r9->ac_BarringTime );
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringForSpecialAC : %"PRIu32"\n",
|
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringForSpecialAC : %"PRIu32"\n",
|
||||||
BIT_STRING_to_uint32(&sib2->ssac_BarringForMMTEL_Video_r9->ac_BarringForSpecialAC) );
|
BIT_STRING_to_uint32(&sib2->ext1->ssac_BarringForMMTEL_Video_r9->ac_BarringForSpecialAC) );
|
||||||
} else
|
} else
|
||||||
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9 : not defined\n" );
|
LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9 : not defined\n" );
|
||||||
|
|
||||||
if (sib2->ac_BarringForCSFB_r10) {
|
if (sib2->ext2 && sib2->ext2->ac_BarringForCSFB_r10) {
|
||||||
LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringFactor : %ld\n",
|
LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringFactor : %ld\n",
|
||||||
sib2->ac_BarringForCSFB_r10->ac_BarringFactor );
|
sib2->ext2->ac_BarringForCSFB_r10->ac_BarringFactor );
|
||||||
LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringTime : %ld\n",
|
LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringTime : %ld\n",
|
||||||
sib2->ac_BarringForCSFB_r10->ac_BarringTime );
|
sib2->ext2->ac_BarringForCSFB_r10->ac_BarringTime );
|
||||||
LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringForSpecialAC : %"PRIu32"\n",
|
LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringForSpecialAC : %"PRIu32"\n",
|
||||||
BIT_STRING_to_uint32(&sib2->ac_BarringForCSFB_r10->ac_BarringForSpecialAC) );
|
BIT_STRING_to_uint32(&sib2->ext2->ac_BarringForCSFB_r10->ac_BarringForSpecialAC) );
|
||||||
} else
|
} else
|
||||||
LOG_I( RRC, "ac_BarringForCSFB_r10 : not defined\n" );
|
LOG_I( RRC, "ac_BarringForCSFB_r10 : not defined\n" );
|
||||||
|
|
||||||
@@ -3143,12 +3143,12 @@ static void dump_sib5( SystemInformationBlockType5_t *sib5 )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
if (ifcfInfo->q_QualMin_r9)
|
if (ifcfInfo->ext1 && ifcfInfo->ext1->q_QualMin_r9)
|
||||||
LOG_I(RRC," Q_QualMin_r9 : %d\n",*ifcfInfo->q_QualMin_r9);
|
LOG_I(RRC," Q_QualMin_r9 : %d\n",*ifcfInfo->ext1->q_QualMin_r9);
|
||||||
|
|
||||||
if (ifcfInfo->threshX_Q_r9) {
|
if (ifcfInfo->ext1 && ifcfInfo->ext1->threshX_Q_r9) {
|
||||||
LOG_I(RRC," threshX_HighQ_r9 : %d\n",ifcfInfo->threshX_Q_r9->threshX_HighQ_r9);
|
LOG_I(RRC," threshX_HighQ_r9 : %d\n",ifcfInfo->ext1->threshX_Q_r9->threshX_HighQ_r9);
|
||||||
LOG_I(RRC," threshX_LowQ_r9: %d\n",ifcfInfo->threshX_Q_r9->threshX_LowQ_r9);
|
LOG_I(RRC," threshX_LowQ_r9: %d\n",ifcfInfo->ext1->threshX_Q_r9->threshX_LowQ_r9);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1268,7 +1268,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(
|
|||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long));
|
sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long));
|
||||||
*sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR
|
*sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR
|
||||||
mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9;
|
mac_MainConfig->ext1 = CALLOC(1, sizeof(struct MAC_MainConfig__ext1));
|
||||||
|
mac_MainConfig->ext1->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9;
|
||||||
//sps_RA_ConfigList_rlola = NULL;
|
//sps_RA_ConfigList_rlola = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -2408,7 +2409,8 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
|
|||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long));
|
sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long));
|
||||||
*sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR
|
*sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR
|
||||||
mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9;
|
mac_MainConfig->ext1 = CALLOC(1, sizeof(struct MAC_MainConfig__ext1));
|
||||||
|
mac_MainConfig->ext1->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9;
|
||||||
//sps_RA_ConfigList_rlola = NULL;
|
//sps_RA_ConfigList_rlola = NULL;
|
||||||
#endif
|
#endif
|
||||||
// Measurement ID list
|
// Measurement ID list
|
||||||
|
|||||||
Reference in New Issue
Block a user