Added OMCI message parsing tests
Change-Id: Ic864446241c3507dcfb389c7e774d0aa79de3b55
diff --git a/maple_experiments/chat.py b/maple_experiments/chat.py
new file mode 100755
index 0000000..358b728
--- /dev/null
+++ b/maple_experiments/chat.py
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+
+import sys
+from time import sleep
+
+from scapy.packet import Packet
+from twisted.spread import pb
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks, returnValue, DeferredQueue
+from twisted.python import util
+
+from common.frameio.frameio import hexify
+from common.utils.asleep import asleep
+from voltha.extensions.omci.omci import *
+
+
+class OmciProxy(pb.Root):
+
+ def __init__(self):
+ reactor.listenTCP(24497, pb.PBServerFactory(self))
+ self.remote = None
+ self.response_queue = DeferredQueue()
+
+ @inlineCallbacks
+ def connect(self):
+ factory = pb.PBClientFactory()
+ reactor.connectTCP("10.111.101.206", 24498, factory)
+ self.remote = yield factory.getRootObject()
+ print 'connected'
+ yield self.remote.callRemote("setRemote", port=24496)
+
+ def remote_echo(self, pkt_type, pon, onu, port, crc, size, data):
+ print "Packet Type:", pkt_type
+ print "PON:", pon
+ print "ONU ID:", onu
+ print "Port:", port
+ print "CRC OK:", crc
+ print "Packet Size:", size
+ print "received:", hexify(data)
+ self.response_queue.put(data)
+
+ @inlineCallbacks
+ def send_omci(self, msg):
+ if isinstance(msg, Packet):
+ msg = str(msg)
+ try:
+ print ' sending:', msg
+ yield self.remote.callRemote("send_omci", 0, 0, 1, msg)
+ print 'msg sent'
+
+ except Exception, e:
+ print >> sys.stderr, 'Blew up:', str(e)
+
+ def receive(self):
+ return self.response_queue.get()
+
+
+@inlineCallbacks
+def chat():
+ proxy = OmciProxy()
+ yield proxy.connect()
+
+ tx_id = [0]
+ def get_tx_id():
+ tx_id[0] += 1
+ return tx_id[0]
+
+ if 0:
+ # MIB RESET
+ frame = OmciFrame(
+ transaction_id=get_tx_id(),
+ message_type=OmciMibReset.message_id,
+ omci_message=OmciMibReset(
+ entity_class=OntData.class_id
+ )
+ )
+ yield proxy.send_omci(hexify(str(frame)))
+
+ # MIB RESET RESPONSE
+ response = yield proxy.receive()
+ resp = OmciFrame(response)
+ resp.show()
+
+ if 0:
+ # GET ALL ALARMS
+ frame = OmciFrame(
+ transaction_id=get_tx_id(),
+ message_type=OmciGetAllAlarms.message_id,
+ omci_message=OmciGetAllAlarms(
+ entity_class=OntData.class_id,
+ entity_id=0
+ )
+ )
+ yield proxy.send_omci(hexify(str(frame)))
+
+ # MIB UPLOAD RESPONSE
+ response = yield proxy.receive()
+ resp = OmciFrame(response)
+ resp.show()
+
+ if 0:
+ # MIB UPLOAD
+ frame = OmciFrame(
+ transaction_id=get_tx_id(),
+ message_type=OmciMibUpload.message_id,
+ omci_message=OmciMibUpload(
+ entity_class=OntData.class_id
+ )
+ )
+ yield proxy.send_omci(hexify(str(frame)))
+
+ # MIB UPLOAD RESPONSE
+ response = yield proxy.receive()
+ resp = OmciFrame(response)
+ resp.show()
+
+ n_commands = resp.omci_message.number_of_commands
+ for seq_num in range(n_commands):
+ print 'seq_num', seq_num
+ frame = OmciFrame(
+ transaction_id=get_tx_id(),
+ message_type=OmciMibUploadNext.message_id,
+ omci_message=OmciMibUploadNext(
+ entity_class=OntData.class_id,
+ command_sequence_number=seq_num
+ )
+ )
+ yield proxy.send_omci(hexify(str(frame)))
+
+ response = yield proxy.receive()
+ print hexify(response)
+ # resp = OmciFrame(response)
+ # resp.show()
+
+
+ if 1:
+ # GET CIRCUIT PACK
+ frame = OmciFrame(
+ transaction_id=get_tx_id(),
+ message_type=OmciGet.message_id,
+ omci_message=OmciGet(
+ entity_class=CircuitPack.class_id,
+ entity_id=0x101,
+ attributes_mask=CircuitPack.mask_for('vendor_id')
+ )
+ )
+ yield proxy.send_omci(hexify(str(frame)))
+
+ # MIB UPLOAD RESPONSE
+ response = yield proxy.receive()
+ resp = OmciFrame(response)
+ resp.show()
+
+ yield asleep(1)
+ reactor.stop()
+
+
+if __name__ == '__main__':
+ reactor.callLater(0, chat)
+ reactor.run()