def whois_router_to_network(self, network=None, *, destination=None): # build a request try: request = WhoIsRouterToNetwork() if network: request.wirtnNetwork = int(network) if destination: request.pduDestination = Address(destination) self._log.debug("WhoIsRouterToNetwork Destination : {}".format( destination)) else: request.pduDestination = LocalBroadcast() except: self._log.error("WhoIsRouterToNetwork : invalid arguments") return iocb = IOCB((self.this_application.nsap.local_adapter, request)) # make an IOCB iocb.set_timeout(2) deferred(self.this_application.nse.request_io, iocb) iocb.wait() try: self.init_routing_table(str( self.this_application.nse._iartn.pop())) except IndexError: pass
def test_04(self): """Test broadcast for a router to the network it is on.""" if _debug: TestWhoIsRouterToNetwork._debug("test_02") # create a network tnet = TNetwork() # request router to network 1 on network 1, no response tnet.td.start_state.doc("4-1-0") \ .send(WhoIsRouterToNetwork(1, destination=LocalBroadcast(), )).doc("4-1-1") \ .timeout(3).doc("4-1-2") \ .success() tnet.sniffer1.start_state.success() # nothing received on network 2 tnet.sniffer2.start_state.doc("4-2-0") \ .timeout(3).doc("4-2-1") \ .success() tnet.sniffer3.start_state.success() # run the group tnet.run()
def test_02(self): """Test broadcast for existing router.""" if _debug: TestWhoIsRouterToNetwork._debug("test_02") # create a network tnet = TNetwork() # all start states are successful tnet.td.start_state.doc("2-1-0") \ .send(WhoIsRouterToNetwork(2, destination=LocalBroadcast(), )).doc("2-1-1") \ .receive(IAmRouterToNetwork, iartnNetworkList=[2], ).doc("2-1-2") \ .success() tnet.sniffer1.start_state.success() # nothing received on network 2 tnet.sniffer2.start_state.doc("2-2-0") \ .timeout(3).doc("2-2-1") \ .success() tnet.sniffer3.start_state.success() # run the group tnet.run()
def do_wirtn(self, args): """wirtn <addr> [ <net> ]""" args = args.split() if _debug: WhoIsRouterConsoleCmd._debug("do_irt %r", args) # build a request try: request = WhoIsRouterToNetwork() request.pduDestination = Address(args[0]) if (len(args) > 1): request.wirtnNetwork = int(args[1]) except: print "invalid arguments" return # give it to the application this_application.request(this_application.nsap.adapters[0], request)
def do_wirtn(self, args): """wirtn <addr> [ <net> ]""" args = args.split() if _debug: WhoIsRouterConsoleCmd._debug("do_irt %r", args) # build a request try: request = WhoIsRouterToNetwork() request.pduDestination = Address(args[0]) if (len(args) > 1): request.wirtnNetwork = int(args[1]) except: print "invalid arguments" return # give it to the application this_application.request(this_application.nsap.adapters[0], request)
def do_wirtn(self, args): """ wirtn [ <addr> ] [ <net> ] Send a Who-Is-Router-To-Network message. If <addr> is not specified the message is locally broadcast. """ args = args.split() if _debug: DiscoverConsoleCmd._debug("do_wirtn %r", args) # build a request try: request = WhoIsRouterToNetwork() if not args: request.pduDestination = LocalBroadcast() elif args[0].isdigit(): request.pduDestination = LocalBroadcast() request.wirtnNetwork = int(args[0]) else: request.pduDestination = Address(args[0]) if (len(args) > 1): request.wirtnNetwork = int(args[1]) except: print("invalid arguments") return # give it to the network service element this_application.nse.request(this_application.nsap.local_adapter, request) # sleep for responses time.sleep(3.0)
def whois_router_to_network(self, args=None): # build a request try: request = WhoIsRouterToNetwork() if not args: request.pduDestination = LocalBroadcast() elif args[0].isdigit(): request.pduDestination = LocalBroadcast() request.wirtnNetwork = int(args[0]) else: request.pduDestination = Address(args[0]) if len(args) > 1: request.wirtnNetwork = int(args[1]) except: self._log.error("WhoIsRouterToNetwork : invalid arguments") return iocb = IOCB((self.this_application.nsap.local_adapter, request)) # make an IOCB iocb.set_timeout(2) deferred(self.this_application.nse.request_io, iocb) iocb.wait() try: self.init_routing_table(str( self.this_application.nse._iartn.pop())) except IndexError: pass
def test_who_is_router_to_network(self): """Test the Result encoding and decoding.""" if _debug: TestNPDUCodec._debug("test_who_is_router_to_network") # Request successful pdu_bytes = xtob('01.80' # version, network layer message '00 0001' # message type and network ) self.request(WhoIsRouterToNetwork(1)) self.indication(pduData=pdu_bytes) self.response(PDU(pdu_bytes)) self.confirmation(WhoIsRouterToNetwork, wirtnNetwork=1)
def test_01(self): """Test broadcast for any router.""" if _debug: TestWhoIsRouterToNetwork._debug("test_01") # create a network tnet = TNetwork() # test device sends request, sees response tnet.td.start_state.doc("1-1-0") \ .send(WhoIsRouterToNetwork( destination=LocalBroadcast(), )).doc("1-1-1") \ .receive(IAmRouterToNetwork, iartnNetworkList=[2, 3], ).doc("1-1-2") \ .success() # sniffer on network 1 sees the request and the response tnet.sniffer1.start_state.doc("1-2-0") \ .receive(PDU, pduData=xtob('01.80' # version, network layer '00' # message type, no network ) ).doc("1-2-1") \ .receive(PDU, pduData=xtob('01.80' # version, network layer '01 0002 0003' # message type and network list ) ).doc("1-2-2") \ .success() # nothing received on network 2 tnet.sniffer2.start_state.doc("1-3-0") \ .timeout(3).doc("1-3-1") \ .success() # nothing received on network 3 tnet.sniffer3.start_state.doc("1-4-0") \ .timeout(3).doc("1-4-1") \ .success() # run the group tnet.run()
def test_01(self): """Test broadcast for any router.""" if _debug: TestWhoIsRouterToNetwork._debug("test_01") # create a network tnet = TNetwork() # test device sends request s111 = tnet.td.start_state.doc("1-1-0") \ .send(WhoIsRouterToNetwork( destination=LocalBroadcast(), )).doc("1-1-1") # test device sees both responses both = s111 \ .receive(IAmRouterToNetwork, iartnNetworkList=[1], ).doc("1-1-2-a") \ .receive(IAmRouterToNetwork, iartnNetworkList=[3], ).doc("1-1-2-b") \ # allow the two packets in either order s111.receive(IAmRouterToNetwork, iartnNetworkList=[3], ).doc("1-1-2-c") \ .receive(IAmRouterToNetwork, iartnNetworkList=[1], next_state=both).doc("1-1-2-d") \ # fail if anything is received after both packets both.timeout(3).doc("1-1-3") \ .success() # short circuit the snifferse tnet.sniffer1.start_state.success() tnet.sniffer2.start_state.success() tnet.sniffer3.start_state.success() # run the group tnet.run()
def test_03(self): """Test broadcast for a non-existent router.""" if _debug: TestWhoIsRouterToNetwork._debug("test_03") # create a network tnet = TNetwork() # send request, receive nothing back tnet.td.start_state.doc("3-1-0") \ .send(WhoIsRouterToNetwork(4, destination=LocalBroadcast(), )).doc("3-1-1") \ .timeout(3).doc("3-1-2") \ .success() # sniffer on network 1 sees the request tnet.sniffer1.start_state.doc("3-2-0") \ .receive(PDU, pduData=xtob('01.80' # version, network layer '00 0004' # message type and network ) ).doc("3-2-1") \ .success() # sniffer on network 2 sees request forwarded by router tnet.sniffer2.start_state.doc("3-3-0") \ .receive(PDU, pduData=xtob('01.88' # version, network layer, routed '0001 01 01' # snet/slen/sadr '00 0004' # message type and network ), ).doc("3-3-1") \ .success() tnet.sniffer3.start_state.success() # run the group tnet.run()