def test2(): gnlogger.logconf() # initializes the logging facility module_logger.info('start this module') L1_ctrl_rx_q = Queue.Queue(10) L1_data_rx_q = Queue.Queue(10) L2_ctrl_rx_q = Queue.Queue(10) L2_data_rx_q = Queue.Queue(10) L1_event_tx_q = Queue.Queue(10) L2_event_tx_q = Queue.Queue(10) net_conf1 = NetworkConfiguration.NetworkConfiguration(101,'my network',256,1) mac_control = MacTdma(net_conf1,L1_ctrl_rx_q,L1_data_rx_q,L2_ctrl_rx_q,L2_data_rx_q,L1_event_tx_q,L2_event_tx_q,False) event = events.mkevent("DataData") event.ev_dc['src_addr'] = 101 event.ev_dc['dst_addr'] = 100 L2_data_rx_q.put(event,False) time.sleep(10) event = events.mkevent("MgmtBeacon") net_conf1.slots = 3 " The first slot is the control slot, the others are for data" net_conf1.control_time = 3 " Each slot has 1 second" net_conf1.list_nodes.append(101) net_conf1.list_nodes.append(100) event.ev_dc['src_addr'] = 100 event.ev_dc['dst_addr'] = net_conf1.broadcast_addr event.ev_dc['time_slot']= net_conf1.control_time/ net_conf1.slots event.ev_dc['allocation'] = net_conf1.list_nodes L1_ctrl_rx_q.put(event,False) time.sleep(5) mac_control.stop()
def mkevent(nickname=None, frame=None, ev_dc={}, payload=""): """Creates an event from a nickname or from a frame. This function accepts either an event nickname or a string frame, but not both. If an event nickname is given, an Event object of that nickname is created; if a string frame is given, an Event object is created from that frame. @param nickname: the event nickname, default None. @param frame: a frame in string format, default None. @param ev_dc: a dictionary {field_name: value} for event creation; defaults to an empty dictionary. Disregarded if a frame is given. @param payload: the payload, not included in dictionary to preserve binary string format as received. @return: an Event object. """ if not nickname and not frame: raise gwnevent.EventNameException("No event nickname or frame received") if nickname and frame: raise gwnevent.EventNameException("Both event nickname and frame received") if nickname: return events.mkevent(nickname, ev_dc=ev_dc, payload=payload) if frame: ev_dc = {} ### unpack frame try: nickname, sep, rest1 = frame.partition(",") strlen, sep, rest2 = rest1.partition(",") if int(strlen) == 0: str_ev_dc = rest2 else: str_ev_dc, payload = rest2[: -int(strlen)], rest2[-int(strlen) :] ev_dc = eval(str_ev_dc.strip(",")) # leaves out final comma # TODO: this function should adjust frame_length. How? # frame_lenght must be set in ev_dc of Event. Is it used? ev_dc["frame_length"] = 0 except: print "mkevent unpack error : ", repr(frame) print " nickname:", nickname print " str_ev_dc:", str_ev_dc print " payload:", payload return None try: ev = events.mkevent(nickname, frmpkt=frame, ev_dc=ev_dc) ev.payload = payload return ev except: # raise events.EventNameException( \ # 'cannot generate event: malformed packet\n' + \ # frame) print "evstrframes: cannot generate event: malformed packet" print repr(frame) return None
def process_data(self, port_type, port_nr, ev): '''Block specific processing. @param port_type: the type of port, a string. @param port_nr: the port number on which the event was received. @param ev: an Event object. ''' print 'Processing, block %s, port %s %d, event %s... ' % \ (self.blkname, port_type, port_nr, ev), if port_type is 'inport' and port_nr is 1: # ev is payload from op sys event = events.mkevent("DataData") event.ev_dc['src_addr'] = self.my_addr event.ev_dc['dst_addr'] = self.dst_addr event.payload = ev self.write_out(0, event) # to implement through gnlogger print '===> Received payload, send Event ===>' print event print repr(event.payload) print elif port_type is 'inport' and port_nr is 0: # ev is event from other block payload = ev.payload self.write_out(1, payload) # to implement through gnlogger print '===> Received Event, send payload ===>' print ev print repr(payload) print else: return
def test3(): gnlogger.logconf() # initializes the logging facility module_logger.info('start this module') L1_ctrl_rx_q = Queue.Queue(10) L1_data_rx_q = Queue.Queue(10) L2_ctrl_rx_q = Queue.Queue(10) L2_data_rx_q = Queue.Queue(10) L1_event_tx_q = Queue.Queue(10) L2_event_tx_q = Queue.Queue(10) net_conf1 = NetworkConfiguration.NetworkConfiguration(101,'my network',256,1) # net_conf1.slots = 3 # " The first slot is the control slot, the others are for data" # net_conf1.control_time = 3 # " Each slot has 1 second" # net_conf1.list_nodes.append(101) # net_conf1.list_nodes.append(100) mac_control = MacTdma(net_conf1,L1_ctrl_rx_q,L1_data_rx_q,L2_ctrl_rx_q,L2_data_rx_q,L1_event_tx_q,L2_event_tx_q,False) event = events.mkevent("DataData") event.ev_dc['src_addr'] = 100 event.ev_dc['dst_addr'] = 101 L1_data_rx_q.put(event,False) myConsumer = EventConsumer.EventConsumer("L3consumer",L2_event_tx_q) myConsumer.start() time.sleep(5) mac_control.stop() myConsumer.stop()
def event_data(self): event = events.mkevent(self.nickname) event.ev_dc['src_addr'] = self.param1 event.ev_dc['dst_addr'] = self.param2 length = self.convert_int(self.param3) event.ev_dc['frame_length'] = length event.payload='1'*length return event
def event_timer_config(self): event = events.mkevent(self.nickname) interval = self.convert_float(self.param1) event.ev_dc['interval']=interval retry = self.convert_int(self.param2) event.ev_dc['retry']=retry event.ev_dc['nickname1']= self.param3 return event
def event_data(self): event = api_events.mkevent(self.nickname) event.ev_dc['src_addr'] = self.param1 event.ev_dc['dst_addr'] = self.param2 length = self.convert_int(self.param3) event.ev_dc['frame_length'] = length event.payload= ' '+str(self.number) + ' '+'1'*(length-len(str(self.number))-2) return event
def sndACK(self, fsm): self.logger.info(str(self.nodeid) + ' Send ACK') event = events.mkevent("CtrlACK") event.ev_dc['src_addr']=self.net_conf.station_id rcv_event = self.macfsm.memory event.ev_dc['dst_addr']= rcv_event.ev_dc['src_addr'] self.snd_frame(event) return True
def tout1(self): ev = events.mkevent(self.nickname1) ev.ev_dc['add_info'] = self.add_info thread_lock.acquire() #print ' port %s %d in block %s generated event %s' % \ # (self.port_type, self.port_nr, self.block.blkname, ev) #print ' %s' % (ev,) self.block.process_data(self.port_type, self.port_nr, ev) thread_lock.release()
def frmtoev(frmobj): '''Make an Event object from a Frame object. @param frmobj: a Frame object. @return: an Event object. ''' # load event fields common to all types of frames ev_dc = {} payload = '' ev_dc['duration'] = frmobj.dc_fldvals['duration'] ev_dc['frame_length'] = frmobj.frame_len # determine frame type; if Action, determine type of action frame # load event fields accordint to type of frame if frmobj.frmtype == 'Action': # Mgmt Action frame act = frmobj.dc_frbd_fldvals['Action'] if act == 1: nickname = 'ActionOpen' elif act == 2: nickname = 'ActionConfirm' elif act == 3: nickname = 'ActionClose' else: #raise MacFrameException('invalid Action field code: ' + act) print 'error in action field' return ev_dc['src_addr'] = frmobj.dc_fldvals['address_1'] # Mgmt, Data frames ev_dc['dst_addr'] = frmobj.dc_fldvals['address_2'] # Mgmt, Data frames ev_dc['peerlinkId'] = frmobj.dc_frbd_fldvals['peerlinkId'] elif frmobj.frmtype in ['Beacon']: # Mgmt Beacon frame nickname = 'MgmtBeacon' ev_dc['src_addr'] = frmobj.dc_fldvals['address_1'] # Mgmt, Data frames ev_dc['dst_addr'] = frmobj.dc_fldvals['address_2'] # Mgmt, Data frames ev_dc['peerlinkId'] = frmobj.dc_frbd_fldvals['peerlinkId'] elif frmobj.frmtype == 'Data': # a Data event nickname = 'DataData' ev_dc['src_addr'] = frmobj.dc_fldvals['address_1'] # Mgmt, Data frames ev_dc['dst_addr'] = frmobj.dc_fldvals['address_2'] # Mgmt, Data frames payload = frmobj.dc_fldvals['frame_body'] elif frmobj.frmtype in ['RTS', 'CTS', 'ACK']: # Ctrl frames nickname = 'Ctrl' + frmobj.frmtype[-3:] # CtrlRTS --> RTS if frmobj.dc_fldvals.has_key('ta'): ev_dc['src_addr'] = frmobj.dc_fldvals['ta'] ev_dc['dst_addr'] = frmobj.dc_fldvals['ra'] else: raise MacFrameException(frmogj.frmtype + ' not a valid frame type') # make Event object ev = events.mkevent(nickname, ev_dc=ev_dc, payload=payload) ev.ev_dc['frame_length'] = frmobj.frame_len # adjust frame length ev.frmpkt = frmobj.frmpkt ev.frmobj = frmobj # ref to Frame obj associated with this event return ev
def run(self): while not self.finished : aux= self.my_queue.get() if aux.nickname == "TimerTimer": timer=Timer.Timer(self.my_queue, \ self.my_actual_net_conf.beacon_period, 1, "TimerTimer") timer.start() event = events.mkevent("MgmtBeacon") event.ev_dc['src_addr'] = self.my_addr event.ev_dc['dst_addr'] = self.broadcast_addr event.ev_dc['peerlinkId'] = 0 self.tx_event_q.put(event,False)
def run(self): while not self.finished : aux= self.my_queue.get() if aux.nickname == "TimerTimer": timer=Timer.Timer(self.my_queue, \ self.my_actual_net_conf.control_time,1,"TimerTimer") timer.start() event = events.mkevent("MgmtBeacon") event.ev_dc['src_addr'] = self.my_addr event.ev_dc['dst_addr'] = self.broadcast_addr event.ev_dc['time_slot']= self.my_actual_net_conf.control_time/ self.my_actual_net_conf.slots event.ev_dc['allocation'] = self.my_actual_net_conf.list_nodes self.tx_event_q.put(event,False)
def sndRTS(self, fsm): self.logger.info(str(self.nodeid) + ' Send RTS') rcv_event = self.macfsm.memory if (rcv_event.ev_subtype == 'CTSTout'): if (rcv_event.nickname == 'TimerCTSTout'): self.logger.info(str(self.nodeid) + ' Send RTS timer exausted') self.set_timer(0, interrupt=True) return event = events.mkevent("CtrlRTS") event.ev_dc['src_addr'] = self.net_conf.station_id event.ev_dc['dst_addr'] = rcv_event.ev_dc['dst_addr'] event.ev_dc['duration'] = 0; self.snd_frame(event) return True
def test2(): blk2 = TunTapInterface('/dev/net/tun', '192.168.200.1', '192.168.200.2') conn_ev1 = gwninport.AQueueConnector(10) conn_ev2 = gwninport.AQueueConnector(10) blk2.set_connection_in(conn_ev1, 0) blk2.set_connection_out(conn_ev2, 0) print 'port in 0:', blk2.ports_in[0].conn.__class__ print 'port in 1:', blk2.ports_in[1].conn.__class__ print 'port out 0:', blk2.ports_out[0].__class__ print 'port out 1:', blk2.ports_out[1].__class__ #sys.exit() print 'Set up IP address 192.168.7.1 in TUN/TAP connector,' print ' captures all incoming packets, ensures process finishes.' subprocess.check_call('ifconfig gr0 192.168.7.1', shell=True) time.sleep(2) # to read message :-) #subprocess.check_call('ifconfig tun0 192.168.7.1 %s up' % (self.tun_ifname,), \ # shell=True) #subprocess.check_call('ifconfig %s 192.168.7.1' % (self.tun_ifname,), \ # shell=True) blk2.start() time.sleep(3) for i in range(0,5): print '=== BEGIN Event %d ===' % (i,) event = events.mkevent('DataData', ev_dc={'src_addr':'sss', \ 'dst_addr':'dddd'} ) blk2.ports_in[0].conn.put(event) time.sleep(2) print '=== END Event %d ===' % (i,) time.sleep(5) blk2.stop() time.sleep(2) #blk2.ports_in[0].conn.put('0000') # to make is stop #subprocess.check_call('ping -c1 192.168.7.1') #print '1', threading.enumerate() blk2.join()
def process_data(self, port_type, port_nr, ev): '''Process data function for PSK block. ''' print " ------------------------------------" print ev print port_type,port_nr print "-------------------------------------" if port_type == 'inport' and port_nr == 0: frame = ev.frmpkt self.write_out(1, frame) # 1, to GNU radio elif port_type == 'inport' and port_nr == 1: frame = ev # ev is a frame received if not frame: print 'PSK: an empty frame from L1' else: event = events.mkevent("DataData") event.frmpkt = frame self.write_out(0, event) return
def test2(): '''Test InPort, Block classses. ''' blk1 = Timer() print blk1 connector1 = inport.AQueueConnector() connector2 = inport.AQueueConnector() #blk1.start() #time.sleep(2) blk1.set_connection_in(connector1,0) blk1.set_connection_out(connector1,0) blk1.start() time.sleep(3) event = events.mkevent("TimerConfig") event.ev_dc['interval'] = 1 event.ev_dc['retry'] = 5 event.ev_dc['nickname1'] = "TimerTOR1" connector1.put(event) time.sleep(10) blk1.stop() blk1.join()
def process_data(self, port_type, port_nr, ev): '''Process data function for PSK block. ''' # print " ------------------------------------" # print ev # print port_type,port_nr # print "-------------------------------------" # PRUEBA: EL TIMER ESTA PUESTO SOLO PARA PROBAR EL SENSADO if port_type == "intimer": self.sense_carrier() if port_type == 'inport' and port_nr == 0: frame = ev.frmpkt self.write_out(1, frame) # 1, to GNU radio elif port_type == 'inport' and port_nr == 1: frame = ev # ev is a frame received if not frame: print 'PSK: an empty frame from L1' else: event = api_events.mkevent("DataData") event.frmpkt = frame self.write_out(0, event) return
def sndCLS(self,fsm): event = events.mkevent("ActionClose") event.ev_dc['src_addr'] = self.net_conf.station_id event.ev_dc['dst_addr']= self.peer_addr event.ev_dc['peerlinkId'] = self.link_id self.tx_event_q.put(event,False)
def test(): tx_event_q=Queue.Queue(10) event_q=Queue.Queue(10) net_conf1 = NetworkConfiguration.NetworkConfiguration(100,'my network',256,1) net_conf1.retry_timeout = 5 dpcontrol = DiscoveryPeeringController(net_conf1,None,event_q,tx_event_q) dpcontrol.start() # " Test1: Beacon Confirm Open " # event = events.mkevent("MgmtBeacon") # event.src_addr=101 # event.dst_addr= net_conf1.broadcast_addr # event.peerlinkId = 0 # event_q.put(event,False) # time.sleep(5) # dpfsm = dpcontrol.my_peers.getSM(peerMACaddr= 101) # # print "state", dpfsm.fsm.current_state # event = events.mkevent("ActionConfirm") # event.src_addr=101 # event.dst_addr= 100 # event.peerlinkId = 0 # event_q.put(event,False) # time.sleep(5) # print "state", dpfsm.fsm.current_state # # event = events.mkevent("ActionOpen") # event.src_addr=101 # event.dst_addr= 100 # event.peerlinkId = 0 # event_q.put(event,False) # time.sleep(5) # print "state", dpfsm.fsm.current_state # " Test2: Open Confirm " # event = events.mkevent("ActionOpen") # event.src_addr=101 # event.dst_addr= net_conf1.broadcast_addr # event.peerlinkId = 0 # event_q.put(event,False) # time.sleep(5) # dpfsm = dpcontrol.my_peers.getSM(peerMACaddr= 101) # # print "state", dpfsm.fsm.current_state # event = events.mkevent("ActionConfirm") # event.src_addr=101 # event.dst_addr= 100 # event.peerlinkId = 0 # event_q.put(event,False) # time.sleep(5) # print "state", dpfsm.fsm.current_state # Test3: Beacon Open Confirm event = events.mkevent("MgmtBeacon") event.ev_dc['src_addr'] = 101 event.ev_dc['dst_addr'] = net_conf1.broadcast_addr event.ev_dc['peerlinkId'] = 0 event_q.put(event,False) time.sleep(5) dpfsm = dpcontrol.my_peers.getSM(peerMACaddr = 101) event = events.mkevent("ActionOpen") event.ev_dc['src_addr'] = 101 event.ev_dc['dst_addr'] = 100 event.ev_dc['peerlinkId'] = 0 event_q.put(event,False) time.sleep(5) print "state", dpfsm.fsm.current_state print "state", dpfsm.fsm.current_state event = events.mkevent("ActionConfirm") event.ev_dc['src_addr'] = 101 event.ev_dc['dst_addr'] = 100 event.ev_dc['peerlinkId'] = 0 event_q.put(event,False) time.sleep(5) print "state", dpfsm.fsm.current_state
def event_CTS(self): event = events.mkevent(self.nickname) event.ev_dc['src_addr'] = self.param1 event.ev_dc['dst_addr'] = self.param2 return event