summaryrefslogtreecommitdiff
path: root/maximus/python/lib
diff options
context:
space:
mode:
authorronciere2007-11-29 13:24:28 +0000
committerronciere2007-11-29 13:24:28 +0000
commit9efb3071671adfcc6c4b41dcb848babc30f38d67 (patch)
treed8f618c53a9a7fa650ecb6031131fb1675f107f1 /maximus/python/lib
parent65fa9ba4a10562cbef0c0f674f0f8c7999fc8967 (diff)
mmentryMethod updates
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@1065 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'maximus/python/lib')
-rw-r--r--maximus/python/lib/Constants.py21
-rw-r--r--maximus/python/lib/fidMethod.py12
-rw-r--r--maximus/python/lib/mmeScript.py41
-rw-r--r--maximus/python/lib/mmentryFields.py767
-rw-r--r--maximus/python/lib/mmentryMethod.py326
5 files changed, 1106 insertions, 61 deletions
diff --git a/maximus/python/lib/Constants.py b/maximus/python/lib/Constants.py
index a6bead9126..cc115e123f 100644
--- a/maximus/python/lib/Constants.py
+++ b/maximus/python/lib/Constants.py
@@ -251,3 +251,24 @@ UDP_Destination_Port_Identifier:2
#-_Identifier:-
#Vendor_defined_Classifier_Rule_Identifier:-
}
+
+
+
+
+#Interpretation = BEHDR_Value
+Non_Persistent_Schedule_BENTRY = 0x00
+Persistent_Schedule_BENTRY = 0x01
+Regions_BENTRY = 0x02
+MAC_Address_BENTRY = 0x03
+Discover_BENTRY = 0x04
+Discovered_Info_BENTRY = 0x05
+Beacon_Period_Start_Time_Offset_BENTRY = 0x06
+Encryption_Key_Change_BENTRY = 0x07
+CCo_Handover_BENTRY = 0x08
+Beacon_Relocation_BENTRY = 0x09
+AC_Line_Sync_Countdown_BENTRY = 0x0A
+Change_NumSlots_BENTRY = 0x0B
+Change HM_BENTRY = 0x0C
+Change_SNID_BENTRY = 0x0D
+#Reserved_for_future_use = 0x0E-0xFE
+Vendor_Specific_BENTRY = 0xFF \ No newline at end of file
diff --git a/maximus/python/lib/fidMethod.py b/maximus/python/lib/fidMethod.py
index 7b76ac8e50..b3b5ff259c 100644
--- a/maximus/python/lib/fidMethod.py
+++ b/maximus/python/lib/fidMethod.py
@@ -284,12 +284,12 @@ class FidMethod():
CDESC = 0
def createCDESC_FID(self, myIpVersion=None, mySourceIpAddress=None, mySourceIpPort=None, myDestinationIpAddress=None, myDestinationIpPort=None, myProtocolType=None):
print "CDESC :"
- createIpVersion(myIpVersion)
- createSourceIpAddress(mySourceIpAddress)
- createSourceIpPort(mySourceIpPort)
- createDestinationIpAddress(myDestinationIpAddress)
- createDestinationIpPort(myDestinationIpPort)
- createProtocolType(myProtocolType)
+ self.createIpVersion(myIpVersion)
+ self.createSourceIpAddress(mySourceIpAddress)
+ self.createSourceIpPort(mySourceIpPort)
+ self.createDestinationIpAddress(myDestinationIpAddress)
+ self.createDestinationIpPort(myDestinationIpPort)
+ self.createProtocolType(myProtocolType)
self.fidBody.CDESC = self.ipVersionField + self.sourceIpAddressField + self.sourceIpPortField + self.destinationIpAddressField + self.destinationIpPortField + self.protocolTypeField
return self.fidBody.CDESC
diff --git a/maximus/python/lib/mmeScript.py b/maximus/python/lib/mmeScript.py
index 13c26011ce..b3f4b232ba 100644
--- a/maximus/python/lib/mmeScript.py
+++ b/maximus/python/lib/mmeScript.py
@@ -18,12 +18,15 @@ from maximus.macframe.macframe import *
from binascii import * #binascii library is used : crc32(),
# Instantiate a Maximus object and initialize it.
+#maximus = Maximus()
+#argv = 'mmeScript.py'
+#for s in sys.argv:
+ #argv = argv + ' ' + s
+#argc = len(sys.argv)+1
+#maximus.init(argc,argv)
+
maximus = Maximus()
-argv = 'mmeScript.py'
-for s in sys.argv:
- argv = argv + ' ' + s
-argc = len(sys.argv)+1
-maximus.init(argc,argv)
+maximus.init(sys.argv)
# Create a stations.
myStaA = maximus.create_sta()
@@ -58,24 +61,28 @@ print mmentryMethod.mmentry.CC_CCO_APPOINT_REQ
myMme = MME()
-myStaAAddress = 0x41617453796D
-myMme.mmheader.oda=myStaAAddress
-myMme.mmheader.osa=maxAddress
-myMme.mmheader.vlantag=0
-myMme.mmheader.mmtype=CC_CCO_APPOINT_REQ
-myMme.mmheader.fmi=0
-myMme.mmentry=mmentryMethod.mmentry.CC_CCO_APPOINT_REQ
-
-#print pack('Q',myMme.mmheader.oda)[0:6]
-#print pack('Q',myMme.mmheader.osa)[0:6]
-
-myMme.send()
+myMmHeader = MMHeader()
+myStaAAddress = "Coucou"#0x41617453796D
+myMmHeader.set_oda(myStaAAddress)
+myMmHeader.set_osa(maxAddress)
+myMmHeader.set_vlantag(0)
+myMmHeader.set_mmtype(CC_CCO_APPOINT_REQ)
+myMmHeader.set_fmi(0)
+myMme.set_mmentry(mmentryMethod.mmentry.CC_CCO_APPOINT_REQ)
+myMme.set_mmheader(myMmHeader)
+
+myMme.send(maximus)
myMme.recv()
#Create mac frame
macFrame = MACFrame()
macFrameHeader = MACFrameHeader()
+fc_AV = FC_AV()
+fc_AV.set_dt_av('SOF')
+fc_AV.set_access(0)
+fc_AV.set_snid(0xA)
+### Faire les helper de tout les variant fields et du CRC24
macFrameHeader.set_mft(mmeMft)
macFrameHeader.set_mfl(59)
macFrame.set_macframeheader(macFrameHeader)
diff --git a/maximus/python/lib/mmentryFields.py b/maximus/python/lib/mmentryFields.py
index b9edbfc3c3..95a53b3fcc 100644
--- a/maximus/python/lib/mmentryFields.py
+++ b/maximus/python/lib/mmentryFields.py
@@ -156,7 +156,7 @@ class Qmp():
dataField = data.dico[fid]()
def createBody(self, param1=None, param2=None, param3=None, param4=None, param5=None, param6=None):
print "fidBody :"
- print self.data.dico[self.fid]
+ #print self.data.dico[self.fid]
self.dataField = self.data.dico[self.fid](param1, param2, param3, param4, param5, param6)
self.createLength()
@@ -353,6 +353,51 @@ class GlobalLinkInfo():
self.bleReverse.createBle(myNumR, myEndTimeR, myIntBleR, myIntervalR)
self.globalLinkInfo = self.cid.cid + self.steiField + self.dteiField + self.lidFField + self.lidRField + self.cspec.cspec + self.bleForward.ble + self.bleReverse.ble
+#Connection Informations
+class ConnInfo():
+ print "cid :"
+ cid = Cid()
+ stei = 0
+ steiField = pack('B',stei)
+ def createStei(self, myStei=None):
+ if myStei!=None:
+ self.stei=myStei
+ self.steiField = pack('B',self.stei)
+ print "stei = "+hex(self.stei)
+ dtei = 0
+ dteiField = pack('B',dtei)
+ def createDtei(self, myDtei=None):
+ if myDtei!=None:
+ self.dtei=myDtei
+ self.dteiField = pack('B',self.dtei)
+ print "dtei = "+hex(self.dtei)
+ lidF = 0xFF
+ lidFField = pack('B',lidF)
+ def createLidF(self, myLidF=None):
+ if myLidF!=None:
+ self.lidF=myLidF
+ self.lidFField = pack('B',self.lidF)
+ print "lidF = "+hex(self.lidF)
+ lidR = 0xFF
+ lidRField = pack('B',lidR)
+ def createLidR(self, myLidR=None):
+ if myLidR!=None:
+ self.lidR=myLidR
+ self.lidRField = pack('B',self.lidR)
+ print "lidR = "+hex(self.lidR)
+ cspec = Cspec()
+
+ ConnInfo = cid.cid + steiField + dteiField + lidFField + lidRField + cspec.cspec
+ def createConnInfo(self, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None):
+ self.cid.createCid(myTei, myLlidF)
+ self.createStei(myStei)
+ self.createDtei(myDtei)
+ self.createLidF(myLidF)
+ self.createLidR(myLidR)
+ print "cspec :"
+ self.cspec.createCspec(myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R)
+ self.ConnInfo = self.cid.cid + self.steiField + self.dteiField + self.lidFField + self.lidRField + self.cspec.cspec
+
#Station Informations
class StaInfo():
tei = 0
@@ -549,6 +594,77 @@ class NetworkInfo():
self.createOffset(myOffset)
self.networkInfo = self.nidField + self.snidAccessField + self.hmField + self.numSlotField + self.coordonatingStatusField + self.offsetField
+#Network Information of the AVLN
+class NwInfo():
+ reserved = 0
+ securityLevel = 0 #Simple connect by default
+ nidOffset = 0x0f0e0d0c
+ nid = int(nidOffset + securityLevel*pow(2,52) + reserved*pow(2,54))
+ nidField = pack('Q',nid)[0:7]
+ def createNid(self, mySecurityLevel=None, myNidOffset=None, myNid=None):
+ if mySecurityLevel!=None:
+ self.securityLevel=mySecurityLevel
+ if myNidOffset!=None:
+ self.nidOffset=myNidOffset
+ if myNid!=None:
+ self.nid=myNid
+ else:
+ self.nid = int(self.nidOffset + self.securityLevel*pow(2,52) + self.reserved*pow(2,54))
+ self.nidField = pack('Q',self.nid)[0:7]
+ print "nid = "+hex(self.nid)
+ snid = 0xA
+ snidField = pack('B',snid)
+ def createSnid(self, mySnid=None):
+ if mySnid!=None:
+ self.snid=mySnid
+ self.snidField = pack('B',self.snid)
+ print "snid = "+hex(self.snid)
+ tei=0
+ teiField = pack('B',tei)
+ def createTei(self, myTei=None):
+ if myTei!=None:
+ self.tei=myTei
+ self.teiField = pack('B',self.tei)
+ print "tei = "+hex(self.tei)
+ stationRole = 0 #Station by default
+ stationRoleField = pack('B',stationRole)
+ def createStationRole(self, myStationRole=None):
+ if myStationRole!=None:
+ self.stationRole=myStationRole
+ self.stationRoleField = pack('B',self.stationRole)
+ print "stationRole = "+hex(self.stationRole)
+ cco_MacAddress = 0x63614D6F4343 #A default CCo MAC Address by default
+ cco_MacAddressField = pack('Q',cco_MacAddress)[0:6]
+ def createCco_MacAddress(self, myCco_MacAddress=None):
+ if myCco_MacAddress!=None:
+ self.cco_MacAddress=myCco_MacAddress
+ self.cco_MacAddressField = pack('Q',self.cco_MacAddress)[0:6]
+ print "cco_MacAddress = "+hex(self.cco_MacAddress)
+ access = 0 #in home by default
+ accessField = pack('B',access)
+ def createAccess(self, myAccess=None):
+ if myAccess!=None:
+ self.access=myAccess
+ self.accessField = pack('B',self.access)
+ print "access = "+hex(self.access)
+ numCordNws = 0 #in home by default
+ numCordNwsField = pack('B',numCordNws)
+ def createNumCordNws(self, myNumCordNws=None):
+ if myNumCordNws!=None:
+ self.numCordNws=myNumCordNws
+ self.numCordNwsField = pack('B',self.numCordNws)
+ print "numCordNws = "+hex(self.numCordNws)
+ nwInfo = nidField + snidField + teiField + stationRoleField + cco_MacAddressField + accessField + numCordNwsField
+ def createNwInfo(self, mySecurityLevel=None, myNidOffset=None, myNid=None, mySnid=None, myTei=None, myStationRole=None, myCco_MacAddress=None, myAccess=None, myNumCordNws=None):
+ self.createNid(mySecurityLevel, myNidOffset, myNid)
+ self.createSnid(mySnid)
+ self.createTei(myTei)
+ self.createStationRole(myStationRole)
+ self.createCco_MacAddress(myCco_MacAddress)
+ self.createAccess(myAccess)
+ self.createNumCordNws(myNumCordNws)
+ self.nwInfo = self.nidField + self.snidField + self.teiField + self.stationRoleField + self.cco_MacAddressField + self.accessField + self.numCordNwsField
+
#GLIDs
class Glids():
glids = []
@@ -691,6 +807,24 @@ class MmentryFields():
self.reqTypeField = pack('B',self.reqType)
print "reqType = "+hex(self.reqType)
+ #Response Type
+ resType = 0 #0 is the default processed value
+ resTypeField = pack('B',resType)
+ def createResType(self, myResType=None):
+ if myResType!=None:
+ self.resType=myResType
+ self.resTypeField = pack('B',self.resType)
+ print "resType = "+hex(self.resType)
+
+ #Request Identifier
+ reqId = 0 #0 is the default processed value
+ reqIdField = pack('B',reqId)
+ def createReqId(self, myReqId=None):
+ if myReqId!=None:
+ self.reqId=myReqId
+ self.reqIdField = pack('B',self.reqId)
+ print "reqId = "+hex(self.reqId)
+
#MAC Address of the STA
macAddress = 0
macAddressField = pack('Q',macAddress)[0:6]
@@ -733,7 +867,7 @@ class MmentryFields():
while i < num:
globalLinks.append(GlobalLinkInfo())
i=i+1
- def createGlobalLinks(self, myNum=None, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None, myNumF=None, myNumR=None):
+ def createGlobalLinks(self, myNum=None, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None, myNumF=None, myEndTimeL=None, myIntBleL=None, myIntervalL=None, myNumR=None, myEndTimeR=None, myIntBleR=None, myIntervalR=None):
self.createNum(myNum)
self.i = 0
while self.i < self.num:
@@ -809,6 +943,15 @@ class MmentryFields():
self.numNetField = pack('B',self.numNet)
print "numNet = "+hex(self.numNet)
+ #Number of AVLN that the station is a member
+ numNws = 255
+ numNwsField = pack('B',numNws)
+ def createNumNws(self, myNumNws=None):
+ if myNumNws!=None:
+ self.numNws=myNumNws
+ self.numNwsField = pack('B',self.numNws)
+ print "numNws = "+hex(self.numNws)
+
#STAs Info
stationsInfo = []
i = 0
@@ -837,6 +980,20 @@ class MmentryFields():
self.networksInfo[self.i].createNetworkInfo(mySecurityLevel, myNidOffset, myNid, mySnid, myAccess, mySnidAccess, myHm, myNumSlot, myCoordonatingStatus, myOffset)
self.i = self.i + 1
+ #Networks Informations
+ nwsInfo = []
+ i = 0
+ while i < numNws:
+ nwsInfo.append(NwInfo())
+ i=i+1
+ def createNwsInfo(self, myNumNws=None, mySecurityLevel=None, myNidOffset=None, myNid=None, mySnid=None, myTei=None, myStationRole=None, myCco_MacAddress=None, myAccess=None, myNumCordNws=None):
+ self.createNumNws(myNumNws)
+ self.i = 0
+ while self.i < self.numNws:
+ print "nwsInfo["+str(self.i)+"] :"
+ self.nwsInfo[self.i].createNwInfo(mySecurityLevel, myNidOffset, myNid, mySnid, myTei, myStationRole, myCco_MacAddress, myAccess, myNumCordNws)
+ self.i = self.i + 1
+
#Init MAC Address of the STA
initMacAddress = 0
initMacAddressField = pack('Q',initMacAddress)[0:6]
@@ -993,14 +1150,14 @@ class MmentryFields():
nid = int(nidOffset + securityLevel*pow(2,52) + reserved*pow(2,54))
nidField = pack('Q',nid)[0:7]
def createNid(self, mySecurityLevel=None, myNidOffset=None, myNid=None):
- if mySecurityLevel!=None:
- self.securityLevel=mySecurityLevel
- if myNidOffset!=None:
- self.nidOffset=myNidOffset
+ if mySecurityLevel!=None or myNidOffset!=None:
+ if mySecurityLevel!=None:
+ self.securityLevel=mySecurityLevel
+ if myNidOffset!=None:
+ self.nidOffset=myNidOffset
+ self.nid = int(self.nidOffset + self.securityLevel*pow(2,52) + self.reserved*pow(2,54))
if myNid!=None:
self.nid=myNid
- else:
- self.nid = int(self.nidOffset + self.securityLevel*pow(2,52) + self.reserved*pow(2,54))
self.nidField = pack('Q',self.nid)[0:7]
print "nid = "+hex(self.nid)
@@ -1154,8 +1311,8 @@ class MmentryFields():
i=i+1
def createTeisAddrsStatuses(self, myNum=None, myTei=None, myAddr=None, myStatus=None):
print "teisAddrsStatuses :"
- self.createNum(myNum)
- self.createTeis(self.num, myTei)
+ #self.createNum(myNum)
+ self.createTeis(myNum, myTei)
self.createAddrs(self.num, myAddr)
self.createStatuses(self.num, myStatus)
self.i = 0
@@ -2106,10 +2263,600 @@ class MmentryFields():
self.paddingEncryptedField = pack('Q',self.paddingEncrypted%pow_2_64) + pack('Q',self.paddingEncrypted/pow_2_64)[0:self.paddingEncryptedSize-8]
print "paddingEncrypted = "+hex(self.paddingEncrypted)
+ #Reason Code
+ reasonCode = 0 #MME not supported by default
+ reasonCodeField = pack('B',reasonCode)
+ def createReasonCode(self, myReasonCode=None):
+ if myReasonCode!=None:
+ self.reasonCode=myReasonCode
+ self.reasonCodeField = pack('B',self.reasonCode)
+ print "reasonCode = "+hex(self.reasonCode)
+
+ #Management Message Version of the received MME
+ rx_MMV = 0 #1.0 by default
+ rx_MMVField = pack('B',rx_MMV)
+ def createRx_MMV(self, myRx_MMV=None):
+ if myRx_MMV!=None:
+ self.rx_MMV=myRx_MMV
+ self.rx_MMVField = pack('B',self.rx_MMV)
+ print "rx_MMV = "+hex(self.rx_MMV)
+
+ #Management Message Type of the received MME
+ rx_MMTYPE = 0 #1.0 by default
+ rx_MMTYPEField = pack('H',rx_MMTYPE)
+ def createRx_MMTYPE(self, myRx_MMTYPE=None):
+ if myRx_MMTYPE!=None:
+ self.rx_MMTYPE=myRx_MMTYPE
+ self.rx_MMTYPEField = pack('H',self.rx_MMTYPE)
+ print "rx_MMTYPE = "+hex(self.rx_MMTYPE)
+
+ #Byte offset of first or only invalid field in MME
+ invalidByteOffset = 0 #First octet by default
+ invalidByteOffsetField = pack('H',invalidByteOffset)
+ def createInvalidByteOffset(self, myInvalidByteOffset=None):
+ if myInvalidByteOffset!=None:
+ self.invalidByteOffset=myInvalidByteOffset
+ self.invalidByteOffsetField = pack('H',self.invalidByteOffset)
+ print "invalidByteOffset = "+hex(self.invalidByteOffset)
+
+ #LLID-R
+ llidR = 0
+ llidRField = pack('B',llidR)
+ def createLlidR(self, myLlidR=None):
+ if myLlidR!=None:
+ self.llidR=myLlidR
+ self.llidFieldR = pack('B',self.llidR)
+ print "llidR = "+hex(self.llidR)
+
+ #Number of connection
+ numConn = 255
+ numConnField = pack('B',numConn)
+ def createNumConn(self, myNumConn=None):
+ if myNumConn!=None:
+ self.numConn=myNumConn
+ self.numConnField = pack('B',self.numConn)
+ print "numConn = "+hex(self.numConn)
+
+ #Connection Informations
+ connInfos = []
+ i = 0
+ while i < numConn:
+ connInfos.append(ConnInfo())
+ i=i+1
+ def createConnInfos(self, myNumConn=None, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None):
+ self.createNumConn(myNumConn)
+ self.i = 0
+ while self.i < self.numConn:
+ print "connInfos["+str(self.i)+"] :"
+ self.connInfos[self.i].createConnInfo(myTei, myLlidF, myStei, myDtei, myLidF, myLidR, myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R)
+ self.i = self.i + 1
+
+ #HomePlug AV Version
+ avVersion = 0 #Current and only version by default
+ avVersionField = pack('B',avVersion)
+ def createAvVersion(self, myAvVersion=None):
+ if myAvVersion!=None:
+ self.avVersion=myAvVersion
+ self.avVersionField = pack('B',self.avVersion)
+ print "avVersion = "+hex(self.avVersion)
+
+ #Organizationnaly Unique Identifier
+ oui = 0x49554F
+ ouiField = pack('I',oui)[0:3]
+ def createOui(self, myOui=None):
+ if myOui!=None:
+ self.oui = myOui
+ self.ouiField = pack('I',self.oui)[0:3]
+ print "oui = "+hex(self.oui)
+
+ #Auto Connect Capability
+ autoConnect = 0 #Not supported by default
+ autoConnectField = pack('B',autoConnect)
+ def createAutoConnect(self, myAutoConnect=None):
+ if myAutoConnect!=None:
+ self.autoConnect=myAutoConnect
+ self.autoConnectField = pack('B',self.autoConnect)
+ print "autoConnect = "+hex(self.autoConnect)
+
+ #Smoothing Capability
+ smoothing = 0 #Not supported by default
+ smoothingField = pack('B',smoothing)
+ def createSmoothing(self, mySmoothing=None):
+ if mySmoothing!=None:
+ self.smoothing=mySmoothing
+ self.smoothingField = pack('B',self.smoothing)
+ print "smoothing = "+hex(self.smoothing)
+
+ #Proxy Capability
+ proxyCapable = 0 #Not capable by default
+ proxyCapableField = pack('B',proxyCapable)
+ def createProxyCapable(self, myProxyCapable=None):
+ if myProxyCapable!=None:
+ self.proxyCapable=myProxyCapable
+ self.proxyCapableField = pack('B',self.proxyCapable)
+ print "proxyCapable = "+hex(self.proxyCapable)
+
+ #Backup CCo-capable
+ backupCcoCapable = 0 #Not supported by default
+ backupCcoCapableField = pack('B',backupCcoCapable)
+ def createBackupCcoCapable(self, myBackupCcoCapable=None):
+ if myBackupCcoCapable!=None:
+ self.backupCcoCapable=myBackupCcoCapable
+ self.backupCcoCapableField = pack('B',self.backupCcoCapable)
+ print "backupCcoCapable = "+hex(self.backupCcoCapable)
+
+ #Soft Hand Over Support
+ softHandOver = 0 #Not supported by default
+ softHandOverField = pack('B',softHandOver)
+ def createSoftHandOver(self, mySoftHandOver=None):
+ if mySoftHandOver!=None:
+ self.softHandOver=mySoftHandOver
+ self.softHandOverField = pack('B',self.softHandOver)
+ print "softHandOver = "+hex(self.softHandOver)
+
+ #Two Symbol Frame Control
+ twoSymFc = 0 #Not supported by default
+ twoSymFcField = pack('B',twoSymFc)
+ def createTwoSymFc(self, myTwoSymFc=None):
+ if myTwoSymFc!=None:
+ self.twoSymFc=myTwoSymFc
+ self.twoSymFcField = pack('B',self.twoSymFc)
+ print "twoSymFc = "+hex(self.twoSymFc)
+
+ #Ability to support Enhanced Coexistance with HomePlug 1.1
+ homePlug11Cap = 0 #Not capable by default
+ homePlug11CapField = pack('B',homePlug11Cap)
+ def createHomePlug11Cap(self, myHomePlug11Cap=None):
+ if myHomePlug11Cap!=None:
+ self.homePlug11Cap=myHomePlug11Cap
+ self.homePlug11CapField = pack('B',self.homePlug11Cap)
+ print "homePlug11Cap = "+hex(self.homePlug11Cap)
+
+ #HomePlug 1.0.1 Interoperability
+ homePlug10Interop = 0 #Not capable by default
+ homePlug10InteropField = pack('B',homePlug10Interop)
+ def createHomePlug10Interop(self, myHomePlug10Interop=None):
+ if myHomePlug10Interop!=None:
+ self.homePlug10Interop=myHomePlug10Interop
+ self.homePlug10InteropField = pack('B',self.homePlug10Interop)
+ print "homePlug10Interop = "+hex(self.homePlug10Interop)
+
+ #Capability of Operating in Various Regulatory Domains
+ regulatoryCap = 0 #North America Only
+ regulatoryCapField = pack('B',regulatoryCap)
+ def createRegulatoryCap(self, myRegulatoryCap=None):
+ if myRegulatoryCap!=None:
+ self.regulatoryCap=myRegulatoryCap
+ self.regulatoryCapField = pack('B',self.regulatoryCap)
+ print "regulatoryCap = "+hex(self.regulatoryCap)
+
+ #Bidirectional Bursting Capability
+ bidirectionalBursting = 0 #Not capable by default
+ bidirectionalBurstingField = pack('B',bidirectionalBursting)
+ def createBidirectionalBursting(self, myBidirectionalBursting=None):
+ if myBidirectionalBursting!=None:
+ self.bidirectionalBursting=myBidirectionalBursting
+ self.bidirectionalBurstingField = pack('B',self.bidirectionalBursting)
+ print "bidirectionalBursting = "+hex(self.bidirectionalBursting)
+
+ #Implementation Version
+ implementationVer = 0 #0 by default
+ implementationVerField = pack('H',implementationVer)
+ def createImplementationVer(self, myImplementationVer=None):
+ if myImplementationVer!=None:
+ self.implementationVer=myImplementationVer
+ self.implementationVerField = pack('H',self.implementationVer)
+ print "implementationVer = "+hex(self.implementationVer)
+
+ #MAC Addresse of the STAs
+ das = []
+ dasField = []
+ i = 0
+ while i < numSta:
+ das.append(i+0x123456789000)
+ dasField.append(pack('Q',das[i])[0:6])
+ i=i+1
+ def createDas(self, myNumSta=None, myDa=None):
+ print "das : "
+ self.createNumSta(myNumSta)
+ self.i = 0
+ while self.i < self.numSta:
+ if myDa!=None:
+ self.das[self.i]=int((myDa+self.i)%pow(2,48))
+ self.dasField[self.i]=pack('Q',self.das[self.i])[0:6]
+ print "das["+str(self.i)+"] = "+hex(self.das[self.i])
+ self.i = self.i + 1
+
+ #Average PHY Data Rate Transmission
+ avgPhyDR_Tx = []
+ avgPhyDR_TxField = []
+ i = 0
+ while i < numSta:
+ avgPhyDR_Tx.append(255-i)
+ avgPhyDR_TxField.append(pack('B',avgPhyDR_Tx[i]))
+ i=i+1
+ def createAvgPhyDR_Tx(self, myNumSta=None, myAvgPhyDR_Tx=None):
+ print "avgPhyDR_Tx : "
+ self.createNumSta(myNumSta)
+ self.i = 0
+ while self.i < self.numSta:
+ if myAvgPhyDR_Tx!=None:
+ self.avgPhyDR_Tx[self.i]=int((myAvgPhyDR_Tx+self.i)%pow(2,48))
+ self.avgPhyDR_TxField[self.i]=pack('B',self.avgPhyDR_Tx[self.i])
+ print "avgPhyDR_Tx["+str(self.i)+"] = "+hex(self.avgPhyDR_Tx[self.i])
+ self.i = self.i + 1
+
+ #Average PHY Data Rate Reception
+ avgPhyDR_Rx = []
+ avgPhyDR_RxField = []
+ i = 0
+ while i < numSta:
+ avgPhyDR_Rx.append(i)
+ avgPhyDR_RxField.append(pack('B',avgPhyDR_Rx[i]))
+ i=i+1
+ def createAvgPhyDR_Rx(self, myNumSta=None, myAvgPhyDR_Rx=None):
+ print "avgPhyDR_Rx : "
+ self.createNumSta(myNumSta)
+ self.i = 0
+ while self.i < self.numSta:
+ if myAvgPhyDR_Rx!=None:
+ self.avgPhyDR_Rx[self.i]=int((myAvgPhyDR_Rx+self.i)%pow(2,48))
+ self.avgPhyDR_RxField[self.i]=pack('B',self.avgPhyDR_Rx[self.i])
+ print "avgPhyDR_Rx["+str(self.i)+"] = "+hex(self.avgPhyDR_Rx[self.i])
+ self.i = self.i + 1
+ #das + avgPhyDR_Tx + avgPhyDR_Rx
+ dasAvgPhyDR_TxAvgPhyDR_Rx = []
+ i = 0
+ while i < numSta:
+ dasAvgPhyDR_TxAvgPhyDR_Rx.append(dasField[i]+avgPhyDR_TxField[i]+avgPhyDR_RxField[i])
+ i=i+1
+ def createDasAvgPhyDR_TxAvgPhyDR_Rx(self, myNumSta=None, myDa=None, myAvgPhyDR_Tx=None, myAvgPhyDR_Rx=None):
+ print "dasAvgPhyDR_TxAvgPhyDR_Rx :"
+ #self.createNumSta(myNumSta)
+ self.createDas(myNumSta, myDa)
+ self.createAvgPhyDR_Tx(self.numSta, myAvgPhyDR_Tx)
+ self.createAvgPhyDR_Rx(self.numSta, myAvgPhyDR_Rx)
+ self.i = 0
+ while self.i < self.numSta:
+ self.dasAvgPhyDR_TxAvgPhyDR_Rx[self.i]=self.dasField[self.i]+self.avgPhyDR_TxField[self.i]+self.avgPhyDR_RxField[self.i]
+ self.i = self.i + 1
+ #LID
+ lid = 0
+ lidField = pack('B',lid)
+ def createLid(self, myLid=None):
+ if myLid!=None:
+ self.lid=myLid
+ self.lidField = pack('B',self.lid)
+ print "lid = "+hex(self.lid)
+
+ #Transmit Link Flag
+ tlFlag = 0 #Transmit Link by default
+ tlFlagField = pack('B',tlFlag)
+ def createTlFlag(self, myTlFlag=None):
+ if myTlFlag!=None:
+ self.tlFlag=myTlFlag
+ self.tlFlagField = pack('B',self.tlFlag)
+ print "tlFlag = "+hex(self.tlFlag)
+
+ #Management Link Flag
+ mgmt_Flag = 0 #Transmit Link by default
+ mgmt_FlagField = pack('B',mgmt_Flag)
+ def createMgmt_Flag(self, myMgmt_Flag=None):
+ if myMgmt_Flag!=None:
+ self.mgmt_Flag=myMgmt_Flag
+ self.mgmt_FlagField = pack('B',self.mgmt_Flag)
+ print "mgmt_Flag = "+hex(self.mgmt_Flag)
+
+ #Destination or Source MAC Address
+ daSa = 0x4153726F4144 #="DAorSA"
+ daSaField = pack('Q',daSa)[0:6]
+ def createDaSa(self, myDaSa=None):
+ if myDaSa!=None:
+ self.daSa=myDaSa
+ self.daSaField = pack('Q',self.daSa)[0:6]
+ print "daSa = "+hex(self.daSa)
+
+ #Beacon Period Counter
+ beaconPeriodCnt = 0 #0 by default
+ beaconPeriodCntField = pack('H',beaconPeriodCnt)
+ def createBeaconPeriodCnt(self, myBeaconPeriodCnt=None):
+ if myBeaconPeriodCnt!=None:
+ self.beaconPeriodCnt=myBeaconPeriodCnt
+ self.beaconPeriodCntField = pack('H',self.beaconPeriodCnt)
+ print "beaconPeriodCnt = "+hex(self.beaconPeriodCnt)
+
+ #Number of MSDU
+ numMsdus = 0 #0 by default
+ numMsdusField = pack('I',numMsdus)
+ def createNumMsdus(self, myNumMsdus=None):
+ if myNumMsdus!=None:
+ self.numMsdus=myNumMsdus
+ self.numMsdusField = pack('I',self.numMsdus)
+ print "numMsdus = "+hex(self.numMsdus)
+
+ #Number of MSDU Payload octets
+ octets = 0 #0 by default
+ octetsField = pack('I',octets)
+ def createOctets(self, myOctets=None):
+ if myOctets!=None:
+ self.octets=myOctets
+ self.octetsField = pack('I',self.octets)
+ print "octets = "+hex(self.octets)
+
+ #Number of generated segments
+ numSegs = 0 #0 by default
+ numSegsField = pack('I',numSegs)
+ def createNumSegs(self, myNumSegs=None):
+ if myNumSegs!=None:
+ self.numSegs=myNumSegs
+ self.numSegsField = pack('I',self.numSegs)
+ print "numSegs = "+hex(self.numSegs)
+
+ #Number of segments
+ numSeg_Suc = 0 #0 by default
+ numSeg_SucField = pack('I',numSeg_Suc)
+ def createNumSeg_Suc(self, myNumSeg_Suc=None):
+ if myNumSeg_Suc!=None:
+ self.numSeg_Suc=myNumSeg_Suc
+ self.numSeg_SucField = pack('I',self.numSeg_Suc)
+ print "numSeg_Suc = "+hex(self.numSeg_Suc)
+
+ #Number of Dropped segments
+ numSeg_Dropped = 0 #0 by default
+ numSeg_DroppedField = pack('I',numSeg_Dropped)
+ def createNumSeg_Dropped(self, myNumSeg_Dropped=None):
+ if myNumSeg_Dropped!=None:
+ self.numSeg_Dropped=myNumSeg_Dropped
+ self.numSeg_DroppedField = pack('I',self.numSeg_Dropped)
+ print "numSeg_Dropped = "+hex(self.numSeg_Dropped)
+
+ #Number of Missed segments
+ numSeg_Missed = 0 #0 by default
+ numSeg_MissedField = pack('I',numSeg_Missed)
+ def createNumSeg_Missed(self, myNumSeg_Missed=None):
+ if myNumSeg_Missed!=None:
+ self.numSeg_Missed=myNumSeg_Missed
+ self.numSeg_MissedField = pack('I',self.numSeg_Missed)
+ print "numSeg_Missed = "+hex(self.numSeg_Missed)
+
+ #Number of Handed Over PBs
+ numPbs = 0 #0 by default
+ numPbsField = pack('I',numPbs)
+ def createNumPbs(self, myNumPbs=None):
+ if myNumPbs!=None:
+ self.numPbs=myNumPbs
+ self.numPbsField = pack('I',self.numPbs)
+ print "numPbs = "+hex(self.numPbs)
+
+ #number of MPDUs
+ numMpdus = 0 #0 by default
+ numMpdusField = pack('I',numMpdus)
+ def createNumMpdus(self, myNumMpdus=None):
+ if myNumMpdus!=None:
+ self.numMpdus=myNumMpdus
+ self.numMpdusField = pack('I',self.numMpdus)
+ print "numMpdus = "+hex(self.numMpdus)
+
+ #Number of Bursts
+ numBursts = 0 #0 by default
+ numBurstsField = pack('I',numBursts)
+ def createNumBursts(self, myNumBursts=None):
+ if myNumBursts!=None:
+ self.numBursts=myNumBursts
+ self.numBurstsField = pack('I',self.numBursts)
+ print "numBursts = "+hex(self.numBursts)
+
+ #Number of Successfully Acknoledged MPDUs
+ numSacks = 0 #0 by default
+ numSacksField = pack('I',numSacks)
+ def createNumSacks(self, myNumSacks=None):
+ if myNumSacks!=None:
+ self.numSacks=myNumSacks
+ self.numSacksField = pack('I',self.numSacks)
+ print "numSacks = "+hex(self.numSacks)
+
+ #Number of Collected Latency Information Bins
+ numLatBins = 255
+ numLatBinsField = pack('B',numLatBins)
+ def createNumLatBins(self, myNumLatBins=None):
+ if myNumLatBins!=None:
+ self.numLatBins=myNumLatBins
+ self.numLatBinsField = pack('B',self.numLatBins)
+ print "numLatBins = "+hex(self.numLatBins)
+
+ #Number of Failed ICV MAC Frame
+ numIcvFails = 255
+ numIcvFailsField = pack('B',numIcvFails)
+ def createNumIcvFails(self, myNumIcvFails=None):
+ if myNumIcvFails!=None:
+ self.numIcvFails=myNumIcvFails
+ self.numIcvFailsField = pack('B',self.numIcvFails)
+ print "numIcvFails = "+hex(self.numIcvFails)
+
+ #Latency Bin Granularity ( 0 = 1 Beacon Period, 1 and more in milliseconds )
+ latBinGran = 0 #One Beacon Period by default
+ latBinGranField = pack('B',latBinGran)
+ def createLatBinGran(self, myLatBinGran=None):
+ if myLatBinGran!=None:
+ self.latBinGran=myLatBinGran
+ self.latBinGranField = pack('B',self.latBinGran)
+ print "latBinGran = "+hex(self.latBinGran)
+
+ #Number of successfully transmitted PBs with ranged latency
+ latBin = []
+ latBinField = []
+ i = 0
+ while i < numLatBins:
+ latBin.append(i)
+ latBinField.append(pack('I',latBin[i]))
+ i=i+1
+ def createLatBin(self, myNumLatBins=None, myLatBin=None, myRandomLatBin=False):
+ print "latBin : "
+ self.createNumLatBins(myNumLatBins)
+ self.i = 0
+ while self.i < self.numLatBins:
+ if myLatBin!=None:
+ self.latBin[self.i]=int((myLatBin+self.i)%pow(2,32))
+ elif myRandomLatBin==True:
+ self.latBin[self.i]=randrange(0,pow(2,4*8)-1,1)
+ self.latBinField[self.i]=pack('I',self.latBin[self.i])
+ print "latBin["+str(self.i)+"] = "+hex(self.latBin[self.i])
+ self.i = self.i + 1
+ #Receive MFS LinkStats
+ receiveMfsLinkStats = beaconPeriodCntField + numMsdusField + octetsField + numSeg_SucField + numSeg_MissedField + numPbsField + numBurstsField + numMpdusField + numIcvFailsField
+ def createReceiveMfsLinkStats(self, myBeaconPeriodCnt=None, myNumMsdus=None, myOctets=None, myNumSeg_Suc=None, myNumSeg_Missed=None, myNumPbs=None, myNumBursts=None, myNumMpdus=None, myNumIcvFails=None):
+ print "receiveMfsLinkStats :"
+ self.createBeaconPeriodCnt(myBeaconPeriodCnt)
+ self.createNumMsdus(myNumMsdus)
+ self.createOctets(myOctets)
+ self.createNumSeg_Suc(myNumSeg_Suc)
+ self.createNumSeg_Missed(myNumSeg_Missed)
+ self.createNumPbs(myNumPbs)
+ self.createNumBursts(myNumBursts)
+ self.createNumMpdus(myNumMpdus)
+ self.createNumIcvFails(myNumIcvFails)
+ self.receiveMfsLinkStats = self.beaconPeriodCntField + self.numMsdusField + self.octetsField + self.numSeg_SucField + self.numSeg_MissedField + self.numPbsField + self.numBurstsField + self.numMpdusField + self.numIcvFailsField
+
+ #Transmit MFS LinkStats
+ transmitMfsLinkStats = beaconPeriodCntField + numMsdusField + octetsField + numSegsField + numSeg_SucField + numSeg_DroppedField + numPbsField + numMpdusField + numBurstsField + numSacksField + numLatBinsField + latBinGranField
+ i = 0
+ while i < numLatBins:
+ transmitMfsLinkStats = transmitMfsLinkStats + latBinField[i]
+ i=i+1
+ def createTransmitMfsLinkStats(self, myBeaconPeriodCnt=None, myNumMsdus=None, myOctets=None, myNumSegs=None, myNumSeg_Suc=None, myNumSeg_Dropped=None, myNumPbs=None, myNumMpdus=None, myNumBursts=None, myNumSacks=None, myNumLatBins=None, myLatBinGran=None, myLatBin=None, myRandomLatBin=False):
+ print "transmitMfsLinkStats :"
+ self.createBeaconPeriodCnt(myBeaconPeriodCnt)
+ self.createNumMsdus(myNumMsdus)
+ self.createOctets(myOctets)
+ self.createNumSegs(myNumSegs)
+ self.createNumSeg_Suc(myNumSeg_Suc)
+ self.createNumSeg_Dropped(myNumSeg_Dropped)
+ self.createNumPbs(myNumPbs)
+ self.createNumMpdus(myNumMpdus)
+ self.createNumBursts(myNumBursts)
+ self.createNumSacks(myNumSacks)
+ self.createLatBinGran(myLatBinGran)
+ self.createLatBin(myNumLatBins,myLatBin,myRandomLatBin)
+ self.transmitMfsLinkStats = self.beaconPeriodCntField + self.numMsdusField + self.octetsField + self.numSegsField + self.numSeg_SucField + self.numSeg_DroppedField + self.numPbsField + self.numMpdusField + self.numBurstsField + self.numSacksField + self.numLatBinsField + self.latBinGranField
+ self.i = 0
+ while self.i < self.numLatBins:
+ self.transmitMfsLinkStats = self.transmitMfsLinkStats + self.latBinField[self.i]
+ self.i = self.i + 1
+ hm = 0 #AV Only Mode by default
+ securityLevel = 0 #Simple connect by default
+ nidOffset = 0x0f0e0d0c
+ nid = int(nidOffset + securityLevel*pow(2,52))
+ nidHm = int(nid + hm*pow(2,54))
+ nidHmField = pack('Q',nidHm)[0:7]
+ def createNidHm(self, myHm=None, mySecurityLevel=None, myNidOffset=None, myNid=None, myNidHm=None):
+ if mySecurityLevel!=None or myNidOffset!=None:
+ if mySecurityLevel!=None:
+ self.securityLevel=mySecurityLevel
+ if myNidOffset!=None:
+ self.nidOffset=myNidOffset
+ self.nid = int(self.nidOffset + self.securityLevel*pow(2,52))
+ if myNid!=None:
+ self.nid=myNid
+ if myHm!=None:
+ self.Hm=myHm
+ self.nidHm = int(self.nid + self.hm*pow(2,54))
+ if myNidHm!=None:
+ self.nidHm=myNidHm
+ print "nidHm = "+hex(self.nidHm)
+ else:
+ print "nid = "+hex(self.nid)
+ print "hm = "+hex(self.hm)
+ self.nidHmField = pack('Q',self.nidHm)[0:7]
+
+ bt = 0 #Central beacon by default
+ ncnr = 0 #not reported by default
+ npsm = 0 #not active by default
+ numSlot = 0 #1 beacon slot by default
+ btNcnrNpsmNumSlot = int(bt + ncnr*pow(2,3) + npsm*pow(2,4) + numSlot*pow(2,5))
+ btNcnrNpsmNumSlotField = pack('B',btNcnrNpsmNumSlot)
+ def createBtNcnrNpsmNumSlot(self, myBt=None, myNcnr=None, myNpsm=None, myNumSlot=None, myBtNcnrNpsmNumSlot=None):
+ if myBt!=None or myNcnr!=None or myNpsm!=None or myNumSlot!=None:
+ if myBt!=None:
+ self.bt=myBt
+ if myNcnr!=None:
+ self.ncnr=myNcnr
+ if myNpsm!=None:
+ self.npsm=myNpsm
+ if myNumSlot!=None:
+ self.numSlot=myNumSlot
+ self.btNcnrNpsmNumSlot = int(self.bt + self.ncnr*pow(2,3) + self.npsm*pow(2,4) + self.numSlot*pow(2,5))
+ if myBtNcnrNpsmNumSlot!=None:
+ self.btNcnrNpsmNumSlot = myBtNcnrNpsmNumSlot
+ print "btNcnrNpsmNumSlot = "+hex(self.btNcnrNpsmNumSlot)
+ else:
+ print "bt = "+hex(self.bt)
+ print "ncnr = "+hex(self.ncnr)
+ print "npsm = "+hex(self.npsm)
+ print "numSlot = "+hex(self.numSlot)
+ self.btNcnrNpsmNumSlotField = pack('B',self.btNcnrNpsmNumSlot)
+
+ #Beacon Slot Usage
+ slotUsage = 0 #All slot free by default
+ slotUsageField = pack('B',slotUsage)
+ def createSlotUsage(self, mySlotUsage=None):
+ if mySlotUsage!=None:
+ self.slotUsage=mySlotUsage
+ self.slotUsageField = pack('B',self.slotUsage)
+ print "slotUsage = "+hex(self.slotUsage)
+
+ slotId = 0 #First beacon slot by default
+ aclss = 0 #0 by default
+ hoip = 0 #Hand Over Not in Progress by default
+ rtsbf = 0 #0 by default
+ slotIdAclssHoipRtsbf = int(slotId + aclss*pow(2,3) + hoip*pow(2,6) + rtsbf*pow(2,7))
+ slotIdAclssHoipRtsbfField = pack('B',slotIdAclssHoipRtsbf)
+ def createSlotIdAclssHoipRtsbf(self, mySlotId=None, myAclss=None, myHoip=None, myRtsbf=None, mySlotIdAclssHoipRtsbf=None):
+ if mySlotId!=None or myAclss!=None or myHoip!=None or myRtsbf!=None:
+ if mySlotId!=None:
+ self.slotId=mySlotId
+ if myAclss!=None:
+ self.aclss=myAclss
+ if myHoip!=None:
+ self.hoip=myHoip
+ if myRtsbf!=None:
+ self.rtsbf=myRtsbf
+ self.slotIdAclssHoipRtsbf = int(self.slotId + self.aclss*pow(2,3) + self.hoip*pow(2,6) + self.rtsbf*pow(2,7))
+ if mySlotIdAclssHoipRtsbf!=None:
+ self.slotIdAclssHoipRtsbf = mySlotIdAclssHoipRtsbf
+ print "slotIdAclssHoipRtsbf = "+hex(self.slotIdAclssHoipRtsbf)
+ else:
+ print "slotId = "+hex(self.slotId)
+ print "aclss = "+hex(self.aclss)
+ print "hoip = "+hex(self.hoip)
+ print "rtsbf = "+hex(self.rtsbf)
+ self.slotIdAclssHoipRtsbfField = pack('B',self.slotIdAclssHoipRtsbf)
+
+ nm = 0 #Uncoordinated Mode by default
+ ccoCap = 0 #Level 0 by default
+ rsvd = 0 #reserved = 0 by default
+ nmCcoCapRsvd = int(nm + ccoCap*pow(2,2) + rsvd*pow(2,4))
+ nmCcoCapRsvdField = pack('B',nmCcoCapRsvd)
+ def createNmCcoCaptsbf(self, myNm=None, myCcoCap=None, myRsvd=None, my=None, myNmCcoCapRsvd=None):
+ if myNm!=None or myCcoCap!=None or myRsvd!=None:
+ if myNm!=None:
+ self.nm=myNm
+ if myCcoCap!=None:
+ self.ccoCap=myCcoCap
+ if myRsvd!=None:
+ self.rsvd=myRsvd
+ self.nmCcoCapRsvd = int(self.nm + self.ccoCap*pow(2,2) + self.rsvd*pow(2,4))
+ if myNmCcoCapRsvd!=None:
+ self.nmCcoCapRsvd = myNmCcoCapRsvd
+ print "nmCcoCapRsvd = "+hex(self.nmCcoCapRsvd)
+ else:
+ print "nm = "+hex(self.nm)
+ print "ccoCap = "+hex(self.ccoCap)
+ print "rsvd = "+hex(self.rsvd)
+ self.nmCcoCapRsvdField = pack('B',self.nmCcoCapRsvd)
diff --git a/maximus/python/lib/mmentryMethod.py b/maximus/python/lib/mmentryMethod.py
index 78bc1136a1..42e7d0dafd 100644
--- a/maximus/python/lib/mmentryMethod.py
+++ b/maximus/python/lib/mmentryMethod.py
@@ -67,13 +67,13 @@ class MmentryMethod():
#createCC_LINK_INFO_CNF_MMENTRY creates
# the MMENTRY Field of the CC_LINK_INFO.CNF MME
- def createCC_LINK_INFO_CNF_MMENTRY(self, myNum=0, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None, myNumF=None, myNumR=None):
+ def createCC_LINK_INFO_CNF_MMENTRY(self, myNum=0, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None, myNumF=None, myEndTimeL=None, myIntBleL=None, myIntervalL=None, myNumR=None, myEndTimeR=None, myIntBleR=None, myIntervalR=None):
print "CC_LINK_INFO.CNF ="
#CC_LINK_INFO_CNF_MMENTRY is composed by 2 fields :
# - Num
# - GlobalLinkInfo -* Num-
- self.mmentryFields.createNum(myNum)
- self.mmentryFields.createGlobalLinks(self.mmentryFields.num, myTei, myLlidF, myStei, myDtei, myLidF, myLidR, myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R, myNumF, myNumR)
+ #self.mmentryFields.createNum(myNum)
+ self.mmentryFields.createGlobalLinks(myNum, myTei, myLlidF, myStei, myDtei, myLidF, myLidR, myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R, myNumF, myEndTimeL, myIntBleL, myIntervalL, myNumR, myEndTimeR, myIntBleR, myIntervalR)
self.mmentry.CC_LINK_INFO_CNF = self.mmentryFields.numField
self.i=0
while self.i<self.mmentryFields.num:
@@ -83,13 +83,13 @@ class MmentryMethod():
#createCC_LINK_INFO_IND_MMENTRY creates
# the MMENTRY Field of the CC_LINK_INFO.IND MME
- def createCC_LINK_INFO_IND_MMENTRY(self, myNum=0, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None, myNumF=None, myNumR=None):
+ def createCC_LINK_INFO_IND_MMENTRY(self, myNum=0, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None, myNumF=None, myEndTimeL=None, myIntBleL=None, myIntervalL=None, myNumR=None, myEndTimeR=None, myIntBleR=None, myIntervalR=None):
print "CC_LINK_INFO.IND ="
#CC_LINK_INFO_IND_MMENTRY is composed by 2 fields :
# - Num
# - GlobalLinkInfo -* Num-
- self.mmentryFields.createNum(myNum)
- self.mmentryFields.createGlobalLinks(self.mmentryFields.num, myTei, myLlidF, myStei, myDtei, myLidF, myLidR, myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R, myNumF, myNumR)
+ #self.mmentryFields.createNum(myNum)
+ self.mmentryFields.createGlobalLinks(myNum, myTei, myLlidF, myStei, myDtei, myLidF, myLidR, myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R, myNumF, myEndTimeL, myIntBleL, myIntervalL, myNumR, myEndTimeR, myIntBleR, myIntervalR)
self.mmentry.CC_LINK_INFO_IND = self.mmentryFields.numField
self.i=0
while self.i<self.mmentryFields.num:
@@ -100,33 +100,33 @@ class MmentryMethod():
#CC_LINK_INFO.RSP has no MMENTRY
- #createCC_HANDHOVER_REQ_MMENTRY creates
- # the MMENTRY Field of the CC_HANDHOVER.REQ MME
- def createCC_HANDHOVER_REQ_MMENTRY(self, mySoftHard=None, myReason=None):
- print "CC_HANDHOVER.REQ ="
- #CC_HANDHOVER_REQ_MMENTRY is composed by 2 fields :
+ #createCC_HANDOVER_REQ_MMENTRY creates
+ # the MMENTRY Field of the CC_HANDOVER.REQ MME
+ def createCC_HANDOVER_REQ_MMENTRY(self, mySoftHard=None, myReason=None):
+ print "CC_HANDOVER.REQ ="
+ #CC_HANDOVER_REQ_MMENTRY is composed by 2 fields :
# - Soft/Hard
# - Reason
self.mmentryFields.createSoftHard(mySoftHard)
self.mmentryFields.createReason(myReason)
- self.mmentry.CC_HANDHOVER_REQ = self.mmentryFields.softHardField + self.mmentryFields.reasonField
+ self.mmentry.CC_HANDOVER_REQ = self.mmentryFields.softHardField + self.mmentryFields.reasonField
- #createCC_HANDHOVER_CNF_MMENTRY creates
- # the MMENTRY Field of the CC_HANDHOVER.CNF MME
- def createCC_HANDHOVER_CNF_MMENTRY(self, myResult=None):
- print "CC_HANDHOVER.CNF ="
- #CC_HANDHOVER_CNF_MMENTRY is composed by 1 field :
+ #createCC_HANDOVER_CNF_MMENTRY creates
+ # the MMENTRY Field of the CC_HANDOVER.CNF MME
+ def createCC_HANDOVER_CNF_MMENTRY(self, myResult=None):
+ print "CC_HANDOVER.CNF ="
+ #CC_HANDOVER_CNF_MMENTRY is composed by 1 field :
# - Result
self.mmentryFields.createResult(myResult)
- self.mmentry.CC_HANDHOVER_CNF = self.mmentryFields.resultField
+ self.mmentry.CC_HANDOVER_CNF = self.mmentryFields.resultField
- #createCC_HANDHOVER_INFO_IND_MMENTRY creates
- # the MMENTRY Field of the CC_HANDHOVER_INFO.IND MME
- def createCC_HANDHOVER_INFO_IND_MMENTRY(self, myRsc=None,myBackupCco=None,myNum=0):
- print "CC_HANDHOVER_INFO.IND ="
- #CC_HANDHOVER_INFO_IND_MMENTRY is composed by 4 field :
+ #createCC_HANDOVER_INFO_IND_MMENTRY creates
+ # the MMENTRY Field of the CC_HANDOVER_INFO.IND MME
+ def createCC_HANDOVER_INFO_IND_MMENTRY(self, myRsc=None,myBackupCco=None,myNum=0):
+ print "CC_HANDOVER_INFO.IND ="
+ #CC_HANDOVER_INFO_IND_MMENTRY is composed by 4 field :
# - RSC
# - BackupCCo
# - Num
@@ -134,10 +134,10 @@ class MmentryMethod():
self.mmentryFields.createRsc(myRsc)
self.mmentryFields.createBackupCco(myBackupCco)
self.mmentryFields.createNum(myNum)
- self.mmentry.CC_HANDHOVER_INFO_IND = self.mmentryFields.rscField + self.mmentryFields.backupCcoField + self.mmentryFields.numField
+ self.mmentry.CC_HANDOVER_INFO_IND = self.mmentryFields.rscField + self.mmentryFields.backupCcoField + self.mmentryFields.numField
self.i=0
while self.i<self.mmentryFields.num:
- self.mmentry.CC_HANDHOVER_INFO_IND = self.mmentry.CC_HANDHOVER_INFO_IND + self.mmentryFields.stasInfo[self.i].staInfo
+ self.mmentry.CC_HANDOVER_INFO_IND = self.mmentry.CC_HANDOVER_INFO_IND + self.mmentryFields.stasInfo[self.i].staInfo
self.i=self.i+1
@@ -179,7 +179,7 @@ class MmentryMethod():
# - StationInfo -*NumStation-
# - NumNetwork
# - NetworkInfo -*NumNetwork-
- self.mmentryFields.createStationsInfo(myNumSta, myMacAddress, myTei, mySameNetwork, mySnid, myAccess, mySnidAccess, myCcoCapability, myProxyNetworkCapability, myBackupCcoCapability, myCcoStatus, myPcoStatus, myBackupCcoStatus, myNinthOctet, mySignalLevel, myEndTime, myIntBle)
+ self.mmentryFields.createStationsInfo(myNumSta, myMacAddress, myTei, mySameNetwork, mySnidStation, myAccessStation, mySnidAccessStation, myCcoCapability, myProxyNetworkCapability, myBackupCcoCapability, myCcoStatus, myPcoStatus, myBackupCcoStatus, myNinthOctet, mySignalLevel, myEndTime, myIntBle)
self.mmentry.CC_DISCOVER_LIST_IND = self.mmentryFields.numStaField
self.i=0
while self.i<self.mmentryFields.numSta:
@@ -469,9 +469,9 @@ class MmentryMethod():
# - Num
# - TEI + MAC Address + Status -*Num-
self.mmentryFields.createMode(myMode)
- self.mmentryFields.createNum(myNum)
+ #self.mmentryFields.createNum(myNum)
+ self.mmentryFields.createTeisAddrsStatuses(myNum, myTei, myAddr, myStatus)
self.mmentry.CC_SET_TEI_MAP_IND = self.mmentryFields.modeField + self.mmentryFields.numField
- self.mmentryFields.createTeisAddrsStatuses(self.mmentryFields.num, myTei, myAddr, myStatus)
self.i=0
while self.i<self.mmentryFields.num:
self.mmentry.CC_SET_TEI_MAP_IND = self.mmentry.CC_SET_TEI_MAP_IND + self.mmentryFields.teisAddrsStatuses[self.i]
@@ -1095,6 +1095,276 @@ class MmentryMethod():
self.mmentry.CM_ENCRYPTED_PAYLOAD_IND = self.mmentry.CM_ENCRYPTED_PAYLOAD_IND + self.mmentryFields.ivField + self.mmentryFields.lengthForEncryptionField + self.mmentryFields.randomFillerEncryptedField + self.mmentryFields.mmOrHlePayloadEncryptedField + self.mmentryFields.crcEncryptedField + self.mmentryFields.pidEncryptedField + self.mmentryFields.prnEncryptedField + self.mmentryFields.pmnEncryptedField + self.mmentryFields.paddingEncryptedField + self.mmentryFields.rfLenEncryptedField
+ #createCM_MME_ERROR_IND_MMENTRY creates
+ # the MMENTRY Field of the CM_MME_ERROR.IND MME
+ def createCM_MME_ERROR_IND_MMENTRY(self, myReasonCode=None, myRx_MMV=None, myRx_MMTYPE=None, myInvalidByteOffset=None):
+ print "CM_MME_ERROR.IND ="
+ #CM_MME_ERROR_IND_MMENTRY is composed by 4 fields :
+ # - ReasonCode
+ # - Rx_MMV
+ # - Rx_MMTYPE
+ # - InvalidByteOffset
+ self.mmentryFields.createReasonCode(myReasonCode)
+ self.mmentryFields.createRx_MMV(myRx_MMV)
+ self.mmentryFields.createRx_MMTYPE(myRx_MMTYPE)
+ self.mmentryFields.createInvalidByteOffset(myInvalidByteOffset)
+ self.mmentry.CM_MME_ERROR_IND = self.mmentryFields.reasonCodeField + self.mmentryFields.rx_MMVField + self.mmentryFields.rx_MMTYPEField + self.mmentryFields.invalidByteOffsetField
+
+
+ #createCM_CONN_NEW_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_CONN_NEW.CNF MME
+ def createCM_CONN_NEW_CNF_MMENTRY(self, myTei=None, myLlidF=None, myLlidR=None, myResult=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None):
+ print "CM_CONN_NEW.CNF ="
+ #CM_CONN_NEW_CNF_MMENTRY is composed by 4 fields :
+ # - CID
+ # - LLID-R
+ # - Result
+ # - Proposed CSPEC
+ self.mmentryFields.createCid(myTei, myLlidF)
+ self.mmentryFields.createLlidR(myLlidR)
+ self.mmentryFields.createResult(myResult)
+ self.mmentry.CM_CONN_NEW_CNF = self.mmentryFields.cidField + self.mmentryFields.llidRField + self.mmentryFields.resultField
+ if self.mmentryFields.result == 4 :
+ self.mmentryFields.createProposedCspec(myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R)
+ self.mmentry.CM_CONN_NEW_CNF = self.mmentry.CM_CONN_NEW_CNF + self.mmentryFields.proposedCspecField
+
+
+ #createCM_CONN_REL_IND_MMENTRY creates
+ # the MMENTRY Field of the CM_CONN_REL.IND MME
+ def createCM_CONN_REL_IND_MMENTRY(self, myTei=None, myLlidF=None, myReasonCode=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None):
+ print "CM_CONN_REL.IND ="
+ #CM_CONN_REL_IND_MMENTRY is composed by 3 fields :
+ # - CID
+ # - Reason Code
+ # - Violated CSPEC
+ self.mmentryFields.createCid(myTei, myLlidF)
+ self.mmentryFields.createReasonCode(myReasonCode)
+ self.mmentry.CM_CONN_REL_IND = self.mmentryFields.cidField + self.mmentryFields.reasonCodeField
+ if self.mmentryFields.reasonCode == 1 :
+ self.mmentryFields.createViolatedCspec(myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R)
+ self.mmentry.CM_CONN_REL_IND = self.mmentry.CM_CONN_REL_IND + self.mmentryFields.violatedCspecField
+
+
+ #createCM_CONN_REL_RSP_MMENTRY creates
+ # the MMENTRY Field of the CM_CONN_REL.RSP MME
+ def createCM_CONN_REL_RSP_MMENTRY(self, myTei=None, myLlidF=None):
+ print "CM_CONN_REL.RSP ="
+ #CM_CONN_REL_RSP_MMENTRY is composed by 1 fields :
+ # - CID
+ self.mmentryFields.createCid(myTei, myLlidF)
+ self.mmentry.CM_CONN_REL_RSP = self.mmentryFields.cidField
+
+
+ #createCM_CONN_MOD_REQ_MMENTRY creates
+ # the MMENTRY Field of the CM_CONN_MOD.REQ MME
+ def createCM_CONN_MOD_REQ_MMENTRY(self, myTei=None, myLlidF=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None):
+ print "CM_CONN_MOD.REQ ="
+ #CM_CONN_MOD_REQ_MMENTRY is composed by 2 fields :
+ # - CID
+ # - Modified CSPEC
+ self.mmentryFields.createCid(myTei, myLlidF)
+ self.mmentryFields.createModifiedCspec(myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R)
+ self.mmentry.CM_CONN_MOD_REQ = self.mmentryFields.cidField + self.mmentryFields.modifiedCspecField
+
+
+ #createCM_CONN_MOD_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_CONN_MOD.CNF MME
+ def createCM_CONN_MOD_CNF_MMENTRY(self, myTei=None, myLlidF=None, myResult=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None):
+ print "CM_CONN_MOD.CNF ="
+ #CM_CONN_MOD_CNF_MMENTRY is composed by 3 fields :
+ # - CID
+ # - Result
+ # - Proposed CSPEC
+ self.mmentryFields.createCid(myTei, myLlidF)
+ self.mmentryFields.createResult(myResult)
+ self.mmentry.CM_CONN_MOD_CNF = self.mmentryFields.cidField + self.mmentryFields.resultField
+ if self.mmentryFields.result == 1 :
+ self.mmentryFields.createProposedCspec(myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R)
+ self.mmentry.CM_CONN_MOD_CNF = self.mmentry.CM_CONN_MOD_CNF + self.mmentryFields.proposedCspecField
+
+
+ #createCM_CONN_INFO_REQ_MMENTRY creates
+ # the MMENTRY Field of the CM_CONN_INFO.REQ MME
+ def createCM_CONN_INFO_REQ_MMENTRY(self, myReqType=None, myTei=None, myLlidF=None, myGlids=None):
+ print "CM_CONN_INFO.REQ ="
+ #CM_CONN_INFO_REQ_MMENTRY is composed by 3 fields :
+ # - ReqType
+ # - CID
+ # - GLID
+ self.mmentryFields.createReqType(myReqType)
+ self.mmentryFields.createCid(myTei, myLlidF)
+ myNumGlid=1
+ self.mmentryFields.createGlids(myNumGlid, myGlids)
+ self.mmentry.CM_CONN_INFO_REQ = self.mmentryFields.reqTypeField + self.mmentryFields.cidField + self.mmentryFields.glids.glidsField[0]
+
+
+ #createCM_CONN_INFO_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_CONN_INFO.CNF MME
+ def createCM_CONN_INFO_CNF_MMENTRY(self, myNumConn=0, myTei=None, myLlidF=None, myStei=None, myDtei=None, myLidF=None, myLidR=None, myCsepcLen=None, myValidF=None, myMacServiceTypeF=None, myUserPriorityF=None, myAtsF=None, mySmoothingF=None, myValidR=None, myMacServiceTypeR=None, myUserPriorityR=None, myAtsR=None, mySmoothingR=None, myFRF=None, myFidF=None, qmpParam1F=None, qmpParam2F=None, qmpParam3F=None, qmpParam4F=None, qmpParam5F=None, qmpParam6F=None, myFRR=None, myFidR=None, qmpParam1R=None, qmpParam2R=None, qmpParam3R=None, qmpParam4R=None, qmpParam5R=None, qmpParam6R=None):
+ print "CM_CONN_INFO.CNF ="
+ #CM_CONN_INFO_CNF_MMENTRY is composed by 2 fields :
+ # - NumConn
+ # - Connection Informations -* NumConn-
+ self.mmentryFields.createConnInfos(myNumConn, myTei, myLlidF, myStei, myDtei, myLidF, myLidR, myCsepcLen, myValidF, myMacServiceTypeF, myUserPriorityF, myAtsF, mySmoothingF, myValidR, myMacServiceTypeR, myUserPriorityR, myAtsR, mySmoothingR, myFRF, myFidF, qmpParam1F, qmpParam2F, qmpParam3F, qmpParam4F, qmpParam5F, qmpParam6F, myFRR, myFidR, qmpParam1R, qmpParam2R, qmpParam3R, qmpParam4R, qmpParam5R, qmpParam6R)
+ self.mmentry.CM_CONN_INFO_CNF = self.mmentryFields.numConnField
+ self.i=0
+ while self.i<self.mmentryFields.numConn:
+ self.mmentry.CM_CONN_INFO_CNF = self.mmentry.CM_CONN_INFO_CNF + self.mmentryFields.connInfos[self.i].ConnInfo
+ self.i=self.i+1
+
+
+ #CM_STA_CAP.REQ has no MMENTRY
+
+
+ #createCM_STA_CAP_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_STA_CAP.CNF MME
+ def createCM_STA_CAP_CNF_MMENTRY(self, myAvVersion=None, myMacAddress=None, myOui=None, myAutoConnect=None, mySmoothing=None, myCcoCapability=None, myProxyCapable=None, myBackupCcoCapable=None, mySoftHandOver=None, myTwoSymFc=None, myMaxFL_AV=None, myHomePlug11Cap=None, myHomePlug10Interop=None, myRegulatoryCap=None, myBidirectionalBursting=None, myImplementationVer=None):
+ print "CM_STA_CAP.CNF ="
+ #CM_STA_CAP_CNF_MMENTRY is composed by 4 fields :
+ # - avVersion
+ # - MacAddress
+ # - Oui
+ # - AutoConnect
+ # - Smoothing
+ self.mmentryFields.createAvVersion(myAvVersion)
+ self.mmentryFields.createMacAddress(myMacAddress)
+ self.mmentryFields.createOui(myOui)
+ self.mmentryFields.createAutoConnect(myAutoConnect)
+ self.mmentryFields.createSmoothing(mySmoothing)
+ self.mmentryFields.createCcoCapability(myCcoCapability)
+ self.mmentryFields.createProxyCapable(myProxyCapable)
+ self.mmentryFields.createBackupCcoCapable(myBackupCcoCapable)
+ self.mmentryFields.createSoftHandOver(mySoftHandOver)
+ self.mmentryFields.createTwoSymFc(myTwoSymFc)
+ self.mmentryFields.createMaxFL_AV(myMaxFL_AV)
+ self.mmentryFields.createHomePlug11Cap(myHomePlug11Cap)
+ self.mmentryFields.createHomePlug10Interop(myHomePlug10Interop)
+ self.mmentryFields.createRegulatoryCap(myRegulatoryCap)
+ self.mmentryFields.createBidirectionalBursting(myBidirectionalBursting)
+ self.mmentryFields.createImplementationVer(myImplementationVer)
+ self.mmentry.CM_STA_CAP_CNF = self.mmentryFields.reasonCodeField + self.mmentryFields.macAddressField + self.mmentryFields.ouiField + self.mmentryFields.autoConnectField + self.mmentryFields.smoothingField + self.mmentryFields.ccoCapabilityField + self.mmentryFields.proxyCapableField + self.mmentryFields.backupCcoCapableField + self.mmentryFields.softHandOverField + self.mmentryFields.twoSymFcField + self.mmentryFields.maxFL_AVField + self.mmentryFields.homePlug11CapField + self.mmentryFields.homePlug10InteropField + self.mmentryFields.regulatoryCapField + self.mmentryFields.bidirectionalBurstingField + self.mmentryFields.implementationVerField
+
+
+ #CM_NW_INFO.REQ has no MMENTRY
+
+
+ #createCM_NW_INFO_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_NW_INFO.CNF MME
+ def createCM_NW_INFO_CNF_MMENTRY(self, myNumNws=None, mySecurityLevel=None, myNidOffset=None, myNid=None, mySnid=None, myTei=None, myStationRole=None, myCco_MacAddress=None, myAccess=None, myNumCordNws=None):
+ print "CM_NW_INFO.CNF ="
+ #CM_NW_INFO_CNF_MMENTRY is composed by 2 field :
+ # - NumNws
+ # - NwsInfo -*NumNws-
+ self.mmentryFields.createNwsInfo(myNumNws, mySecurityLevel, myNidOffset, myNid, mySnid, myTei, myStationRole, myCco_MacAddress, myAccess, myNumCordNws)
+ self.mmentry.CM_NW_INFO_CNF = self.mmentry.CM_NW_INFO_CNF + self.mmentryFields.numNwsField
+ self.i=0
+ while self.i<self.mmentryFields.numNws:
+ self.mmentry.CM_NW_INFO_CNF = self.mmentry.CM_NW_INFO_CNF + self.mmentryFields.nwsInfo[self.i].nwInfo
+ self.i=self.i+1
+
+
+ #createCM_GET_BEACON_REQ_MMENTRY creates
+ # the MMENTRY Field of the CM_GET_BEACON.REQ MME
+ def createCM_GET_BEACON_REQ_MMENTRY(self, mySecurityLevel=None, myNidOffset=None, myNid=None):
+ print "CM_GET_BEACON.REQ ="
+ #CM_GET_BEACON_REQ_MMENTRY is composed by 1 fields :
+ # - NID
+ self.mmentryFields.createNid(mySecurityLevel, myNidOffset, myNid)
+ self.mmentry.CM_GET_BEACON_REQ = self.mmentryFields.nidField
+
+
+ #createCM_HFID_REQ_MMENTRY creates
+ # the MMENTRY Field of the CM_HFID.REQ MME
+ def createCM_HFID_REQ_MMENTRY(self, myReqType=None, mySecurityLevel=None, myNidOffset=None, myNid=None, myHfid=None):
+ print "CM_HFID.REQ ="
+ #CM_HFID_REQ_MMENTRY is composed by 3 fields :
+ # - ReqType
+ # - NID
+ # - HFID
+ self.mmentryFields.createReqType(myReqType)
+ self.mmentry.CM_HFID_REQ = self.mmentryFields.reqTypeField
+ if self.mmentryFields.reqType == 2 :
+ self.mmentryFields.createNid(mySecurityLevel, myNidOffset, myNid)
+ self.mmentry.CM_HFID_REQ = self.mmentry.CM_HFID_REQ + self.mmentryFields.nidField
+ elif self.mmentryFields.reqType == 3 :
+ self.mmentryFields.createHfid(myHfid)
+ self.mmentry.CM_HFID_REQ = self.mmentry.CM_HFID_REQ + self.mmentryFields.hfidField
+ elif self.mmentryFields.reqType == 4 :
+ self.mmentryFields.createNid(mySecurityLevel, myNidOffset, myNid)
+ self.mmentryFields.createHfid(myHfid)
+ self.mmentry.CM_HFID_REQ = self.mmentry.CM_HFID_REQ + self.mmentryFields.nidField + self.mmentryFields.hfidField
+
+
+ #createCM_HFID_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_HFID.CNF MME
+ def createCM_HFID_CNF_MMENTRY(self, myResType=None, myHfid=None):
+ print "CM_HFID.CNF ="
+ #CM_HFID_CNF_MMENTRY is composed by 2 fields :
+ # - ResType
+ # - HFID
+ self.mmentryFields.createResType(myResType)
+ self.mmentryFields.createHfid(myHfid)
+ self.mmentry.CM_HFID_CNF = self.mmentryFields.resTypeField + self.mmentryFields.hfidField
+
+
+ #CM_NW_STATS.REQ has no MMENTRY
+
+
+ #createCM_NW_STATS_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_NW_STATS.CNF MME
+ def createCM_NW_STATS_CNF_MMENTRY(self, myNumSta=0, myDa=None, myAvgPhyDR_Tx=None, myAvgPhyDR_Rx=None):
+ print "CM_NW_STATS.CNF ="
+ #CM_NW_STATS_CNF_MMENTRY is composed by 2 fields :
+ # - NumSta
+ # - TEI + AvgPhyDR_Tx + AvgPhyDR_Rx -*NumSta-
+ #self.mmentryFields.createNumSta(myNumSta)
+ self.mmentryFields.createDasAvgPhyDR_TxAvgPhyDR_Rx(myNumSta, myDa, myAvgPhyDR_Tx, myAvgPhyDR_Rx)
+ self.mmentry.CM_NW_STATS_CNF = self.mmentryFields.numStaField
+ self.i=0
+ while self.i<self.mmentryFields.numSta:
+ self.mmentry.CM_NW_STATS_CNF = self.mmentry.CM_NW_STATS_CNF + self.mmentryFields.dasAvgPhyDR_TxAvgPhyDR_Rx[self.i]
+ self.i=self.i+1
+
+
+ #createCM_LINK_STATS_REQ_MMENTRY creates
+ # the MMENTRY Field of the CM_LINK_STATS.REQ MME
+ def createCM_LINK_STATS_REQ_MMENTRY(self, myReqType=None, myReqId=None, mySecurityLevel=None, myNidOffset=None, myNid=None, myLid=None, myTlFlag=None, myMgmt_Flag=None, myDaSa=None):
+ print "CM_LINK_STATS.REQ ="
+ #CM_LINK_STATS_REQ_MMENTRY is composed by 7 fields :
+ # - ReqType
+ # - ReqId
+ # - NID
+ # - LID
+ # - TlFlag
+ # - Mgmt_Flag
+ # - DaSa
+ self.mmentryFields.createReqType(myReqType)
+ self.mmentryFields.createReqId(myReqId)
+ self.mmentryFields.createNid(mySecurityLevel, myNidOffset, myNid)
+ self.mmentryFields.createLid(myLid)
+ self.mmentryFields.createTlFlag(myTlFlag)
+ self.mmentryFields.createMgmt_Flag(myMgmt_Flag)
+ self.mmentryFields.createDaSa(myDaSa)
+ self.mmentry.CM_LINK_STATS_REQ = self.mmentryFields.reqTypeField + self.mmentryFields.reqIdField + self.mmentryFields.nidField + self.mmentryFields.lidField + self.mmentryFields.tlFlagField + self.mmentryFields.mgmt_FlagField + self.mmentryFields.daSaField
+
+
+ #createCM_LINK_STATS_CNF_MMENTRY creates
+ # the MMENTRY Field of the CM_LINK_STATS.CNF MME
+ def createCM_LINK_STATS_CNF_MMENTRY(self, myReqId=None, myResType=None, myRxTx=False, myBeaconPeriodCnt=None, myNumMsdus=None, myOctets=None, myNumSegs=None, myNumSeg_Suc=None, myNumSeg_Dropped=None, myNumSeg_Missed=None, myNumPbs=None, myNumMpdus=None, myNumBursts=None, myNumSacks=None, myNumIcvFails=None, myNumLatBins=0, myLatBinGran=None, myLatBin=None, myRandomLatBin=False): #Tx by default
+ print "CM_LINK_STATS.CNF ="
+ #CM_LINK_STATS_CNF_MMENTRY is composed by 3 fields :
+ # - ReqId
+ # - ResType
+ # - Tx or Rx MFS LinkStats
+ self.mmentryFields.createReqId(myReqId)
+ self.mmentryFields.createResType(myResType)
+ self.mmentry.CM_LINK_STATS_CNF = self.mmentryFields.resTypeField + self.mmentryFields.reqIdField
+ if myRxTx: #Rx
+ self.mmentryFields.createReceiveMfsLinkStats(myBeaconPeriodCnt, myNumMsdus, myOctets, myNumSeg_Suc, myNumSeg_Missed, myNumPbs, myNumBursts, myNumMpdus, myNumIcvFails)
+ self.mmentry.CM_LINK_STATS_CNF = self.mmentry.CM_LINK_STATS_CNF + self.mmentryFields.receiveMfsLinkStats
+ else: #Tx
+ self.mmentryFields.createTransmitMfsLinkStats(myBeaconPeriodCnt, myNumMsdus, myOctets, myNumSegs, myNumSeg_Suc, myNumSeg_Dropped, myNumPbs, myNumMpdus, myNumBursts, myNumSacks, myNumLatBins, myLatBinGran, myLatBin, myRandomLatBin)
+ self.mmentry.CM_LINK_STATS_CNF = self.mmentry.CM_LINK_STATS_CNF + self.mmentryFields.transmitMfsLinkStats