Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
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() 
Exemplo n.º 5
0
 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            
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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            
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 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()
Exemplo n.º 10
0
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
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
 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)
Exemplo n.º 13
0
 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
Exemplo n.º 14
0
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()
Exemplo n.º 15
0
 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
Exemplo n.º 16
0
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()
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
 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
Exemplo n.º 20
0
 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