Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
281 lines
12 KiB
Python
281 lines
12 KiB
Python
|
|
import socket
|
|
import array
|
|
import random
|
|
|
|
class Packet:
|
|
@staticmethod
|
|
def sendConfigurationRequest(serverAddress, serverPort, clientPort, clientType):
|
|
# Build the packet
|
|
configurationRequestPacket = array.array('B')
|
|
configurationRequestPacket.append(0x40) # Validity=1, version=0
|
|
configurationRequestPacket.append(0x00) # Priority=0
|
|
configurationRequestPacket.append(0x03) # EventType=3
|
|
# Set the event sub-type according to the client type
|
|
if clientType == "GN":
|
|
configurationRequestPacket.append(0x01) # EventSubtype=1
|
|
configurationRequestPacket.append(0xFF) # ConfigurationId=0xFFFF (all)
|
|
configurationRequestPacket.append(0xFF)
|
|
elif clientType == "FAC":
|
|
configurationRequestPacket.append(0x11) # EventSubtype=11
|
|
configurationRequestPacket.append(0xBB) # ConfigurationId=0xBBBB (only FAC)
|
|
configurationRequestPacket.append(0xBB)
|
|
elif clientType == "LTE":
|
|
# This value is not defined yet!
|
|
configurationRequestPacket.append(0x12) # EventSubtype=12
|
|
configurationRequestPacket.append(0xFF) # ConfigurationId=0xFFFF (all)
|
|
configurationRequestPacket.append(0xFF)
|
|
configurationRequestPacket.append(0x00) # TransmissionMode=0x0001 (bulk)
|
|
configurationRequestPacket.append(0x01)
|
|
|
|
# Create the socket to send to MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
managementSocket.bind(('0.0.0.0', clientPort))
|
|
sentByteCount = managementSocket.sendto(configurationRequestPacket, (serverAddress, serverPort))
|
|
print sentByteCount, "bytes sent"
|
|
|
|
receivedBytes, sourceAddress = managementSocket.recvfrom(1024)
|
|
print receivedBytes.encode('hex'), "bytes received from", sourceAddress
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def sendCommunicationProfileRequest(serverAddress, serverPort, clientPort, clientType):
|
|
# Build the packet
|
|
communicationProfileRequestPacket = array.array('B')
|
|
communicationProfileRequestPacket.append(0x40) # Validity=1, version=0
|
|
communicationProfileRequestPacket.append(0x00) # Priority=0
|
|
communicationProfileRequestPacket.append(0x03) # EventType=3
|
|
# Set the event sub-type according to the client type
|
|
if clientType == "GN":
|
|
communicationProfileRequestPacket.append(0x04) # EventSubtype=4
|
|
elif clientType == "FAC":
|
|
communicationProfileRequestPacket.append(0x15) # EventSubtype=15
|
|
elif clientType == "LTE":
|
|
# This value is not defined yet!
|
|
communicationProfileRequestPacket.append(0x16) # EventSubtype=16
|
|
communicationProfileRequestPacket.append(0xC0) # Transport (1-byte)
|
|
communicationProfileRequestPacket.append(0xC0) # Network (1-byte)
|
|
communicationProfileRequestPacket.append(0x80) # Access (1-byte)
|
|
communicationProfileRequestPacket.append(0xF8) # Channel (1-byte)
|
|
communicationProfileRequestPacket.append(random.randint(1, 100)) # Sequence number (1-byte)
|
|
communicationProfileRequestPacket.append(0x00) # Reserved (3-byte)
|
|
communicationProfileRequestPacket.append(0x00)
|
|
communicationProfileRequestPacket.append(0x00)
|
|
|
|
# Create the socket to send to MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
managementSocket.bind(('0.0.0.0', clientPort))
|
|
sentByteCount = managementSocket.sendto(communicationProfileRequestPacket, (serverAddress, serverPort))
|
|
print sentByteCount, "bytes sent"
|
|
|
|
receivedBytes, sourceAddress = managementSocket.recvfrom(1024)
|
|
print receivedBytes.encode('hex'), "bytes received from", sourceAddress
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def sendCommunicationProfileSelectionRequest(serverAddress, serverPort, clientPort, clientType):
|
|
# Build the packet
|
|
communicationProfileRequestPacket = array.array('B')
|
|
communicationProfileRequestPacket.append(0x40) # Validity=1, version=0
|
|
communicationProfileRequestPacket.append(0x00) # Priority=0
|
|
communicationProfileRequestPacket.append(0x03) # EventType=3
|
|
communicationProfileRequestPacket.append(0x17) # EventSubtype=17
|
|
communicationProfileRequestPacket.append(0x01) # Latency (1-byte)
|
|
communicationProfileRequestPacket.append(0x05) # Relevance (1-byte)
|
|
communicationProfileRequestPacket.append(0x02) # Reliability (1-byte)
|
|
communicationProfileRequestPacket.append(random.randint(1, 100)) # Sequence number (1-byte)
|
|
|
|
# Create the socket to send to MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
managementSocket.bind(('0.0.0.0', clientPort))
|
|
sentByteCount = managementSocket.sendto(communicationProfileRequestPacket, (serverAddress, serverPort))
|
|
print sentByteCount, "bytes sent"
|
|
|
|
receivedBytes, sourceAddress = managementSocket.recvfrom(1024)
|
|
print receivedBytes.encode('hex'), "bytes received from", sourceAddress
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def sendNetworkState(serverAddress, serverPort, clientPort):
|
|
# Build the packet
|
|
networkStatePacket = array.array('B')
|
|
networkStatePacket.append(0x40) # Validity=1, version=0
|
|
networkStatePacket.append(0x00) # Priority=0
|
|
networkStatePacket.append(0x04) # EventType=4
|
|
networkStatePacket.append(0x04) # EventSubtype=4
|
|
networkStatePacket.append(0x50) # Timestamp (32-bit)
|
|
networkStatePacket.append(0xA3)
|
|
networkStatePacket.append(0x26)
|
|
networkStatePacket.append(0xF3)
|
|
networkStatePacket.append(0x00) # RxPackets
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x01)
|
|
networkStatePacket.append(0xF0)
|
|
networkStatePacket.append(0x00) # RxBytes
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x02)
|
|
networkStatePacket.append(0x02)
|
|
networkStatePacket.append(0x00) # TxPackets
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x0A)
|
|
networkStatePacket.append(0x56)
|
|
networkStatePacket.append(0x00) # TxBytes
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x10)
|
|
networkStatePacket.append(0x89)
|
|
networkStatePacket.append(0x00) # ToUpperLayerPackets
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x20)
|
|
networkStatePacket.append(0x00) # DiscardedPackets
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x0A)
|
|
networkStatePacket.append(0x00) # DuplicatePackets
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x00)
|
|
networkStatePacket.append(0x0C)
|
|
networkStatePacket.append(0x00) # ForwardedPackets
|
|
networkStatePacket.append(0x01)
|
|
networkStatePacket.append(0x30)
|
|
networkStatePacket.append(0x00)
|
|
|
|
# Create the socket to send to MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
managementSocket.bind(('0.0.0.0', clientPort))
|
|
sentByteCount = managementSocket.sendto(networkStatePacket, (serverAddress, serverPort))
|
|
print sentByteCount, "bytes sent"
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def sendWirelessState(serverAddress, serverPort, clientPort, clientType):
|
|
random.seed()
|
|
|
|
# Build the packet
|
|
wirelessStatePacket = array.array('B')
|
|
wirelessStatePacket.append(0x40) # Validity=1, version=0
|
|
wirelessStatePacket.append(0x00) # Priority=0
|
|
wirelessStatePacket.append(0x04) # EventType=4
|
|
# Set the packet content according to the client type
|
|
if clientType == "GN":
|
|
wirelessStatePacket.append(0x03) # EventSubtype=3
|
|
wirelessStatePacket.append(0x01) # IF Count
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
wirelessStatePacket.append(0x00) # Interface ID (2-byte)
|
|
wirelessStatePacket.append(random.randint(1, 10))
|
|
wirelessStatePacket.append(0x00) # Access Technology (2-byte)
|
|
wirelessStatePacket.append(random.randint(1, 255))
|
|
wirelessStatePacket.append(random.randint(1, 255)) # Channel Frequency (2-byte)
|
|
wirelessStatePacket.append(random.randint(1, 255))
|
|
wirelessStatePacket.append(0x00) # Bandwidth (2-byte)
|
|
wirelessStatePacket.append(random.randint(1, 255))
|
|
wirelessStatePacket.append(random.randint(1, 100)) # Channel Busy Ratio (1-byte)
|
|
wirelessStatePacket.append(random.randint(1, 10)) # Status (1-byte)
|
|
wirelessStatePacket.append(random.randint(1, 100)) # Average TX Power (1-byte)
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
elif clientType == "LTE":
|
|
wirelessStatePacket.append(0x23) # EventSubtype=23
|
|
wirelessStatePacket.append(0x00) # Interface ID (2-byte)
|
|
wirelessStatePacket.append(0x02)
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
wirelessStatePacket.append(0x00) # Reference Signal Received Power (2-byte)
|
|
wirelessStatePacket.append(random.randint(1, 100))
|
|
wirelessStatePacket.append(0x00) # Reference Signal Received Quality (2-byte)
|
|
wirelessStatePacket.append(random.randint(1, 100))
|
|
wirelessStatePacket.append(random.randint(1, 10)) # Channel Quality Indication (1-byte)
|
|
wirelessStatePacket.append(0x01) # Status
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
wirelessStatePacket.append(0x00) # Reserved
|
|
wirelessStatePacket.append(0x00) # Packet Loss Rate (4-byte)
|
|
wirelessStatePacket.append(0x00)
|
|
wirelessStatePacket.append(random.randint(1, 10))
|
|
wirelessStatePacket.append(random.randint(1, 10))
|
|
|
|
# Create the socket to send to MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
managementSocket.bind(('0.0.0.0', clientPort))
|
|
sentByteCount = managementSocket.sendto(wirelessStatePacket, (serverAddress, serverPort))
|
|
print sentByteCount, "bytes sent"
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def sendLocationUpdate(serverAddress, serverPort, clientPort):
|
|
# Build the packet
|
|
locationUpdatePacket = array.array('B')
|
|
locationUpdatePacket.append(0x40) # Validity=1, version=0
|
|
locationUpdatePacket.append(0x00) # Priority=0
|
|
locationUpdatePacket.append(0x01) # EventType=1
|
|
locationUpdatePacket.append(0x10) # EventSubtype=10
|
|
locationUpdatePacket.append(0x01) # Timestamp (4-byte)
|
|
locationUpdatePacket.append(0x02)
|
|
locationUpdatePacket.append(0x03)
|
|
locationUpdatePacket.append(0x04)
|
|
locationUpdatePacket.append(0x01) # Latitude (4-byte)
|
|
locationUpdatePacket.append(0x02)
|
|
locationUpdatePacket.append(0x03)
|
|
locationUpdatePacket.append(0x04)
|
|
locationUpdatePacket.append(0x01) # Longitude (4-byte)
|
|
locationUpdatePacket.append(0x02)
|
|
locationUpdatePacket.append(0x03)
|
|
locationUpdatePacket.append(0x04)
|
|
locationUpdatePacket.append(0x01) # Speed (2-byte)
|
|
locationUpdatePacket.append(0x02)
|
|
locationUpdatePacket.append(0x01) # Heading (2-byte)
|
|
locationUpdatePacket.append(0x02)
|
|
locationUpdatePacket.append(0x01) # Altitude (2-byte)
|
|
locationUpdatePacket.append(0x02)
|
|
locationUpdatePacket.append(0x01) # TAcc, and PodAcc (1-byte)
|
|
locationUpdatePacket.append(0x01) # SAcc, Hacc, and AltAcc (1-byte)
|
|
|
|
# Create the socket to send to MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
managementSocket.bind(('0.0.0.0', clientPort))
|
|
sentByteCount = managementSocket.sendto(locationUpdatePacket, (serverAddress, serverPort))
|
|
print sentByteCount, "bytes sent"
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def sendConfigurationNotification(serverAddress, serverPort, clientPort):
|
|
# Build the packet
|
|
configurationNotificationPacket = array.array('B')
|
|
configurationNotificationPacket.append(0x40) # Validity=1, version=0
|
|
configurationNotificationPacket.append(0x00) # Priority=0
|
|
configurationNotificationPacket.append(0x03) # EventType=3
|
|
configurationNotificationPacket.append(0x14) # EventSubtype=14
|
|
configurationNotificationPacket.append(0x0B) # Configuration ID (2-byte)
|
|
configurationNotificationPacket.append(0xCC) # Configuration ID = LDM Garbage Collection Interval
|
|
configurationNotificationPacket.append(0x00) # Length (2-byte)
|
|
configurationNotificationPacket.append(0x04) # Length = 4-byte
|
|
configurationNotificationPacket.append(0x00) # Configuration Value (variable-size)
|
|
configurationNotificationPacket.append(0x00) # configuration Value = 100 (ms)
|
|
configurationNotificationPacket.append(0x00)
|
|
configurationNotificationPacket.append(0x64)
|
|
|
|
# Create the socket to send to MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
managementSocket.bind(('0.0.0.0', clientPort))
|
|
sentByteCount = managementSocket.sendto(configurationNotificationPacket, (serverAddress, serverPort))
|
|
print sentByteCount, "bytes sent"
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def testConfigurationResponse(address):
|
|
# Create the socket to receive from MGMT
|
|
managementSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
# managementSocket.bind(address)
|
|
|
|
receivedBytes = managementSocket.recvfrom(1024)
|
|
print receivedBytes, "bytes received"
|
|
|
|
return True
|