osmith has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-iuh/+/30088 )
Change subject: asn1tostruct: fix defines getting redefined
......................................................................
asn1tostruct: fix defines getting redefined
Patch asn1tostruct.py, so it does not write the same define twice for
two fields in a struct, for example:
#define ENHANCEDRELOCATIONCOMPLETEREQUESTIES_RANAP_EXTENDEDRNC_ID_PRESENT
(1 << 0)
#define ENHANCEDRELOCATIONCOMPLETEREQUESTIES_RANAP_EXTENDEDRNC_ID_PRESENT
(1 << 1)
#define
ENHANCEDRELOCATIONCOMPLETEREQUESTIES_RANAP_RAB_SETUPLIST_ENHANCEDRELOCCOMPLETEREQ_PRESENT
(1 << 2)
typedef struct RANAP_EnhancedRelocationCompleteRequestIEs_s {
uint16_t presenceMask;
RANAP_IuSignallingConnectionIdentifier_t oldIuSigConId;
RANAP_IuSignallingConnectionIdentifier_t iuSigConId;
RANAP_GlobalRNC_ID_t relocation_SourceRNC_ID;
RANAP_ExtendedRNC_ID_t relocation_SourceExtendedRNC_ID; ///<
Optional field
RANAP_GlobalRNC_ID_t relocation_TargetRNC_ID;
RANAP_ExtendedRNC_ID_t relocation_TargetExtendedRNC_ID; ///<
Optional field
RANAP_RAB_SetupList_EnhancedRelocCompleteReq_t
raB_SetupList_EnhancedRelocCompleteReq; ///< Optional field
} RANAP_EnhancedRelocationCompleteRequestIEs_t;
The problem is that the type is used and it may not be unique inside a
struct. Change the code to use the name of the field if the type is not
unique. Keep using the type otherwise so existing code doesn't need to
be modified a lot to fix this.
Fix for:
../include/osmocom/ranap/ranap_ies_defs.h:514: warning:
"RANAP_ENHANCEDRELOCATIONINFORMATIONREQUESTIES_RANAP_IUSIGNALLINGCONNECTIONIDENTIFIER_PRESENT"
redefined
Change-Id: I2ecae6789899952d1dc5691ab76907abeaa71c12
---
M asn1/utils/asn1tostruct.py
1 file changed, 24 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-iuh refs/changes/88/30088/1
diff --git a/asn1/utils/asn1tostruct.py b/asn1/utils/asn1tostruct.py
index 220517d..988f7f3 100755
--- a/asn1/utils/asn1tostruct.py
+++ b/asn1/utils/asn1tostruct.py
@@ -79,6 +79,29 @@
print("-p [pfx] Prefix all types with given prefix")
print("-h Print this help and return")
+def getUniqueIENameForDefine(ies, ie):
+ """ Usually the type of the IE is used for defines. However a struct
may
+ use the same type multiple times, in that case we use the actual name
+ of the field. """
+ unique = True
+
+ for ie_other in ies:
+ if ie_other == ie:
+ continue
+ if ie_other[2] == ie[2]:
+ unique = False
+ assert ie[0] != ie_other[0], "failed to find a unique name for" \
+ f" IE {ie}. Found another entry in ies {ie_other}" \
+ " that has the same ie[0] value."
+
+ if unique:
+ ret = ie[2]
+ else:
+ ret = ie[0]
+
+ ret = re.sub('-', '_', ret.upper())
+ return ret
+
try:
opts, args = getopt.getopt(sys.argv[1:], "df:ho:p:", ["debug",
"file", "help", "outdir", "prefix"])
except getopt.GetoptError as err:
@@ -167,7 +190,7 @@
# Presence mask
for ie in iesDefs[key]["ies"]:
- ieupperunderscore = re.sub('-', '_', ie[2].upper())
+ ieupperunderscore = getUniqueIENameForDefine(iesDefs[key]["ies"], ie)
if ie[3] == "optional" or ie[3] == "conditional":
f.write("#define {0:<{pad}}
{1}\n".format("%s_%s%s_PRESENT" % (keyupperunderscore, prefix,
ieupperunderscore), "(1 << %d)" % shift,
pad=iesDefs[key]["length"] + len(keyupperunderscore) + 9))
--
To view, visit
https://gerrit.osmocom.org/c/osmo-iuh/+/30088
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-iuh
Gerrit-Branch: master
Gerrit-Change-Id: I2ecae6789899952d1dc5691ab76907abeaa71c12
Gerrit-Change-Number: 30088
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <osmith(a)sysmocom.de>
Gerrit-MessageType: newchange