MME2 changes - Propped commits from openmme/paging branch. Added scripts
for code gen
Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/scripts/GtpV2StackCodeGen/groupedIECodeGen.py b/scripts/GtpV2StackCodeGen/groupedIECodeGen.py
new file mode 100644
index 0000000..072ccc0
--- /dev/null
+++ b/scripts/GtpV2StackCodeGen/groupedIECodeGen.py
@@ -0,0 +1,271 @@
+# Copyright 2019-present Infosys Limited
+# SPDX-License-Identifier: Apache-2.0
+
+
+import re
+import os
+
+from template import Template
+from xlUtils import xlUtils,wb
+templateData = {}
+templateData['instList']=[]
+grpIeDataTypeData={}
+grpIeDataTypeData['grpList']=[]
+grpIeDataTypeData['grpTypeList']=[]
+class GenerateGrpIeClass():
+ def __init__( self ):
+
+ self.groupIEParser()
+
+ def groupIEParser(self):
+
+
+ sheet = wb['Grouped IE Modeling']
+ state = ''
+
+ data = {}
+ grpIeData = {}
+ currentGrpie = ''
+ currentMsg = ''
+ currentVar = ''
+ currentInstance = ''
+ currentInstanceValue = 0
+ grpIeList = []
+ ieDetailsList = []
+ ieList = []
+
+ for i in range(1,sheet.max_row+1):
+
+ cell_value_B = xlUtils.getCellValue(sheet,i,'B')
+
+ mGroupedIeDefStart = re.search('Grouped IE Definition Start:(\w+):(\d+):(\w+):(\w+):Instance\[(\d+)]',str(cell_value_B))
+ mGroupedIeDefEnd = re.search('Grouped IE Definition End:(\w+):(\w+)',str(cell_value_B))
+
+ if mGroupedIeDefStart:
+
+ state = 'StartDetected'
+ currentGrpie = mGroupedIeDefStart.group(1)
+ currentMsg = mGroupedIeDefStart.group(4)
+ currentVar = mGroupedIeDefStart.group(3)
+ currentInstanceValue = mGroupedIeDefStart.group(5)
+ currentInstance = currentVar + 'In' + currentMsg
+
+ if currentGrpie not in grpIeList:
+ grpIeList.append(currentGrpie)
+ data['grpIeList'] = grpIeList
+ data['grpIeDetails'] = {}
+ data['grpIeDetails'][currentGrpie] = {}
+ data['grpIeDetails'][currentGrpie]['ieTypeValue'] = mGroupedIeDefStart.group(2)
+ data['grpIeDetails'][currentGrpie]['instList'] = []
+ data['grpIeDetails'][currentGrpie]['instList'].append(currentInstance)
+ data['grpIeDetails'][currentGrpie][currentInstance] = {}
+ data['grpIeDetails'][currentGrpie][currentInstance]['instance'] = currentInstanceValue
+ grpIeData = data['grpIeDetails'][currentGrpie][currentInstance]
+ grpIeData['msgName'] = currentMsg
+
+ elif mGroupedIeDefEnd:
+ state = 'EndDetected'
+ grpIeData = {}
+ ieList = []
+ grpIeList=[]
+ ieDetailsList = []
+
+ GenerateGrpIeClass.generateGroupedIeClasses(data)
+ GenerateGrpIeClass.prepareGrpIeMakeFile()
+
+
+ elif state == 'StartDetected':
+ state = 'IeListStart'
+
+ elif state == 'IeListStart':
+
+ if xlUtils.getCellValue(sheet,i,'D') != None:
+ ieData = {}
+ ieDescription = xlUtils.getCellValue(sheet,i,'D')
+ ieData['ieDescription'] = xlUtils.getCellValue(sheet,i,'D')
+ ieData['presence'] = xlUtils.getCellValue(sheet,i,'E')
+ ieData['grouped'] = xlUtils.getCellValue(sheet,i,'B')
+ ieData['cardinality'] = xlUtils.getCellValue(sheet,i,'C')
+ ieData['instance'] = xlUtils.getCellValue(sheet,i,'H')
+
+ if ieData['cardinality'] == None:
+ ieData['cardinality'] = 1
+ ieTypeDescription = xlUtils.getCellValue(sheet,i,'G')
+ ieData['ieTypeDescription'] = ieTypeDescription
+
+ ieVarName = xlUtils.getVarNameFromString(ieDescription,0)
+
+ ieTypeName = xlUtils.getVarNameFromString(ieTypeDescription,1)
+
+ if ieData['grouped'] == 'Yes':
+ ieData['ieGroupTypeName'] = ieVarName.capitalize() + 'In' + currentMsg
+
+ ieData['ieVarName'] = ieVarName
+ ieData['ieTypeName'] = ieTypeName
+
+
+ ieList.append(ieVarName)
+ grpIeData['ieList'] = ieList
+ grpIeData['ieDetails'] = {}
+ grpIeData['ieDetails'][ieVarName] = ieData
+ ieDetailsList.append(grpIeData['ieDetails'])
+ grpIeData['ieDetails'] = ieDetailsList
+
+
+ def generateGroupedIeClasses(data):
+ parsedData = data
+
+ for grpIe in parsedData['grpIeList']:
+
+ grpIeDetails = parsedData['grpIeDetails'][grpIe]
+
+ GenerateGrpIeClass.generateGroupedIeClass(grpIeDetails,grpIe)
+ GenerateGrpIeClass.generateGroupedIeDataType(grpIeDetails, grpIe)
+ def generateGroupedIeClass(grpIeDetails,grpIe):
+
+ templateData['fileName'] = grpIe[0].lower()+grpIe[1:] + 'Ie'
+ templateData['className'] = grpIe + 'Ie'
+ templateData['classNameUC'] = templateData['fileName'].upper()
+ fileName=templateData['fileName']
+
+ for inst in grpIeDetails['instList']:
+ instanceInfo = {}
+ instDetails = grpIeDetails[inst]
+ GenerateGrpIeClass.generateGroupedIeInstanceClass(instDetails, inst)
+
+ instanceInfo['className'] = inst
+ instanceInfo['fileName'] = inst[0].lower()+inst[1:]
+ instanceInfo['msgType'] = instDetails['msgName'] + 'MsgType'
+ instanceInfo['instance'] = instDetails['instance']
+
+ if instanceInfo not in templateData['instList']:
+ templateData['instList'].append(instanceInfo)
+
+ templateData[fileName]=[inst for inst in templateData['instList'] if grpIe in inst['className']]
+
+ outputDir = '../../src/gtpV2Codec/ieClasses'
+ ttFileNameCpp = 'tts/grpietemplate.cpp.tt'
+ ttFileNameH = 'tts/grpietemplate.h.tt'
+ xlUtils.templateProcess(templateData,ttFileNameCpp,ttFileNameH,outputDir,outputDir)
+
+ objectfile ='ieClasses/' + templateData['fileName'] + '.o'
+ sourcefile = 'ieClasses/' + templateData['fileName'] + '.cpp'
+ xlUtils.addToMakeSo('gtpV2Stack.so',objectfile,sourcefile)
+
+ def generateGroupedIeDataType(grpIeDetails, grpIe):
+ grpIeInfo={}
+
+ grpIeInfo['iePresenceList']=[]
+ grpIeTypeInfo={}
+ grpIeTypeInfo['grpIeTypeName']=grpIe + 'IeType'
+ grpIeTypeInfo['grpIeTypeValue']=grpIeDetails['ieTypeValue']
+ if grpIeTypeInfo not in grpIeDataTypeData['grpTypeList']:
+ grpIeDataTypeData['grpTypeList'].append(grpIeTypeInfo)
+
+ for inst in grpIeDetails['instList']:
+
+ instDetails = grpIeDetails[inst]
+ grpIeInfo={}
+ grpIeInfo['iePresenceList']=[]
+ grpIeInfo['grpIeName']= inst+'Data'
+ grpIeInfo['ieList']=[]
+ for ieDict in instDetails['ieDetails']:
+ for ieDetails in ieDict:
+ if ieDict[ieDetails]['presence']!='M':
+ grpIeInfo['iePresenceList'].append(ieDict[ieDetails]['ieVarName']+'IePresent')
+ ieInfo={}
+ ieInfo['ieTypeName']=ieDict[ieDetails]['ieTypeName']+'IeData'
+ ieInfo['ieVarName']=ieDict[ieDetails]['ieVarName']
+ grpIeInfo['ieList'].append(ieInfo)
+
+ if grpIeInfo not in grpIeDataTypeData['grpList']:
+ grpIeDataTypeData['grpList'].append(grpIeInfo)
+ template = Template()
+ ttFileNamefactoryH = 'tts/grpIeDataTypetemplate.h.tt'
+ outputDir = '../../src/gtpV2Codec/ieClasses/'
+
+ if not os.path.exists(outputDir):
+ os.makedirs(outputDir)
+ outputFileName = 'gtpV2GrpIeDataTypes.h'
+ template.__init__({'OUTPUT' : outputFileName, 'OUTPUT_PATH' : outputDir})
+ template.process(ttFileNamefactoryH, {'tempdata' : grpIeDataTypeData})
+
+ def generateGroupedIeInstanceClass(instDetails, inst):
+ templateInstData = {}
+ ieTypeList = []
+ ieTypeDetailsList = []
+
+ ieInfoList =[]
+
+ templateInstData['fileName'] = inst[0].lower()+inst[1:]
+
+ templateInstData['msgClassName'] = inst
+ templateInstData['classNameUC'] = templateInstData['fileName'].upper()
+
+ for ieEntry in instDetails['ieList']:
+
+ ieInfo = {}
+ ieTypeInfo = {}
+
+ ies = instDetails['ieDetails']
+ for x in ies:
+
+ ie = x.get(ieEntry)
+
+ if ie != None and ieEntry == ie.get('ieVarName'):
+ ieInfo['ieName'] = ie['ieVarName']
+ ieInfo['ieVarName'] = ie['ieVarName']
+ ieInfo['ieType'] = ie['ieTypeName']
+ ieInfo['ieFileName'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:] + 'Ie'
+ ieInfo['ieLocalVar'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:]
+ ieInfo['iePresence'] = ie['presence']
+ ieInfo['ieCardinality'] = ie['cardinality']
+ ieInfo['instance'] = ie['instance']
+ ieInfo['grouped'] = ie['grouped']
+
+ ieType = ieInfo['ieType']
+
+ ieTypeInfo['ieName'] = ie['ieVarName']
+ ieTypeInfo['ieVarName'] = ie['ieVarName']
+ ieTypeInfo['ieType'] = ie['ieTypeName']
+ ieTypeInfo['ieFileName'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:] + 'Ie'
+ ieTypeInfo['ieLocalVar'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:]
+ ieTypeInfo['iePresence'] = ie['presence']
+ ieTypeInfo['ieCardinality'] = ie['cardinality']
+ ieTypeInfo['instance'] = ie['instance']
+ ieTypeInfo['grouped'] = ie['grouped']
+
+ if ieInfo['ieType'] not in ieTypeList:
+ ieTypeList.append(ieInfo['ieType'])
+ templateInstData['ieTypeList'] = ieTypeList
+
+ if ieInfo not in ieInfoList:
+
+ ieInfoList.append(ieInfo)
+ templateInstData['ieList'] = ieInfoList
+
+ templateInstData['ieTypeDetails'] = {}
+ templateInstData['ieTypeDetails'][ieType] = []
+ if ieTypeInfo not in templateInstData['ieTypeDetails'][ieType]:
+ templateInstData['ieTypeDetails'][ieType].append(ieTypeInfo)
+ ieTypeDetailsList.append(templateInstData['ieTypeDetails'])
+ templateInstData['ieTypeDetails'] = ieTypeDetailsList
+
+ GenerateGrpIeClass.templateInstanceprocess(templateInstData)
+ outputDirCpp = 'ieClasses/'
+ objectfile = outputDirCpp +templateInstData['fileName'] + '.o'
+ sourcefile = outputDirCpp + templateInstData['fileName'] + '.cpp'
+ xlUtils.addToMakeSo('gtpV2Stack.so',objectfile,sourcefile)
+
+ def templateInstanceprocess(templateInstData):
+
+ ttFileNameInstCpp = 'tts/grpieinsttemplate.cpp.tt'
+ outputDir = '../../src/gtpV2Codec/ieClasses'
+ ttFileNameInstH = 'tts/grpieinsttemplate.h.tt'
+ xlUtils.templateProcess(templateInstData,ttFileNameInstCpp,ttFileNameInstH,outputDir,outputDir)
+
+ def prepareGrpIeMakeFile():
+ outputDirCpp = 'ieClasses/manual/'
+ xlUtils.addToMakeSo("gtpV2Stack.so", outputDirCpp+'gtpV2GroupedIe.o',outputDirCpp+'gtpV2GroupedIe.cpp')
+
+GenerateGrpIeClass()