Exemplo n.º 1
0
    def sendPackage(self):

        #Verifica pacotes a serem enviados
        if (self._listPackages != []):

            package = self._listPackages[0]
            header = package.getNetworkHeader()
            sequence = None

            for route in self._routes:
                if (route._destiny == package._headers[0]._macDestiny):
                    sequence = route._sequence
                    if (package._headers[0]._macDestiny
                            in self._waitingRouteToList):
                        self._waitingRouteToList.remove(
                            package._headers[0]._macDestiny)

            #Verifica se a rota para o destino é conhecida
            if (sequence != None):
                package.updateSequence(sequence)
                self._listPackages.pop(0)

                for index, mac in enumerate(package._headers[0]._sequenceList):
                    if (mac == self._linkLayer._phyLayer._id):
                        nextDestiny = header._sequenceList[index - 1]
                        break

                self._linkLayer.addPackage(package, nextDestiny)
                indicesToSend.append(self._linkLayer._phyLayer._id)

            elif (not header._macDestiny in self._waitingRouteToList):

                self._waitingRouteToList.append(
                    package._headers[0]._macDestiny)
                self.sendRREQ(package._headers[0]._macDestiny)

        #Chama a função de enviar pacotes da camada de enlace
        self._linkLayer.sendPackage()
Exemplo n.º 2
0
    def receivePackage(self):

        #Chama a função de tratar pacote recebido na camada de enlace
        self._linkLayer.receivePackage()

        #Verifica se tem pacotes recebidos
        if (self._linkLayer._readedPackages != []):

            package = self._linkLayer._readedPackages.pop(0)
            header = package.getNetworkHeader()

            #Se o pacote for recebido for de dados
            if (header._request == -1):

                #Verifica se o pacote é para mim
                if (header._macDestiny == self._linkLayer._phyLayer._id):
                    print("ID", self._linkLayer._phyLayer._id,
                          ": Chegada de pacote de dados: ", package._data)
                else:
                    print(
                        "ID", self._linkLayer._phyLayer._id,
                        ": Chegada de pacote de dados, porém não sou o destino"
                    )
                    print("ID", self._linkLayer._phyLayer._id,
                          ": Enviando pacote de dados para o nó seguinte")
                    for index, mac in enumerate(
                            package._headers[0]._sequenceList):
                        if (mac == self._linkLayer._phyLayer._id):
                            nextDestiny = header._sequenceList[index - 1]
                            break

                    package._headers.pop(1)
                    self._linkLayer.addPackage(package, nextDestiny)
                    indicesToSend.append(self._linkLayer._phyLayer._id)

            #Se o pacote for recebido for um RREQ
            elif (header._request == 0):

                print("ID", self._linkLayer._phyLayer._id,
                      ": Chegada de pacote RREQ: ", header._sequenceNumber)

                #Verifica se eu já recebi esse RREQ
                if (not header._sequenceNumber in self._listRREQs):
                    self._listRREQs.append(header._sequenceNumber)
                    header._sequenceList.append(self._linkLayer._phyLayer._id)

                    #Verifica se o RREQ é para mim
                    if (header._macDestiny == self._linkLayer._phyLayer._id):
                        print("ID", self._linkLayer._phyLayer._id,
                              ": Eu sou o destino do RREQ")
                        route = header._sequenceList
                        macDestiny = route[0]
                        sequenceToSource = route
                        sequenceToSource.reverse()
                        self.sendRREP(macDestiny, sequenceToSource, route)
                        indicesToSend.append(self._linkLayer._phyLayer._id)

                    else:
                        print("ID", self._linkLayer._phyLayer._id,
                              ": Eu não sou o destino do RREQ")
                        self._linkLayer.addPackage(package, -1)
                        indicesToSend.append(self._linkLayer._phyLayer._id)

                else:
                    print("ID", self._linkLayer._phyLayer._id,
                          ": Já possuo esse RREQ: ", header._sequenceNumber)

            #Se o pacote for recebido for um RREP
            elif (header._request == 1):

                destiny = header._macDestiny
                print("ID", self._linkLayer._phyLayer._id,
                      ": Chegada de pacote RREP: ", header._sequenceList)

                #Verifica se o RREP é para mim
                if (destiny == self._linkLayer._phyLayer._id):
                    print("ID", self._linkLayer._phyLayer._id,
                          ": Eu sou o destino do RREP")
                    print("ID", self._linkLayer._phyLayer._id,
                          ": Enviando pacote de dados")
                    sequenceToDestiny = package._data
                    route = Route(header._sequenceList[0], sequenceToDestiny)
                    self._routes.append(route)
                    indicesToSend.append(self._linkLayer._phyLayer._id)

                else:

                    print("ID", self._linkLayer._phyLayer._id,
                          ": Eu não sou o destino do RREP")

                    for index, mac in enumerate(header._sequenceList):
                        if (mac == self._linkLayer._phyLayer._id):
                            nextDestiny = header._sequenceList[index + 1]
                            nextPackage = package
                            package._headers.pop(1)
                            self._linkLayer.addPackage(nextPackage,
                                                       nextDestiny)
                            indicesToSend.append(self._linkLayer._phyLayer._id)
                            break
Exemplo n.º 3
0
    #Loop para percorrer 
    for host in hosts:
        
        #Numero aleatorio entre 0 e 100 para probabilidade de criação de pacotes
        rand = random.randint(0, 100)

        #Numero aleatorio entre 0 e a quantidade de hosts, para escolher um para enviar
        towho = random.randint(0, len(hosts)-1)

        #Teste se rand é menor que 3, gerando assim uma probabilidade de 0.3
        if(rand < 3):

                #Se o ID do destino for diferente do dele mesmo, adiciona o pacote no host
                if(towho != host._networkLayer._linkLayer._phyLayer._id):
                        host.createPackage(towho, "Signal: Ping", 1)
                        indicesToSend.append(host._networkLayer._linkLayer._phyLayer._id)


    if(nextTosend != []):
        for i in nextTosend:
                indicesToSend.append(i)
    del nextTosend[:]

    #Existe algum nó querendo receber, recebe
    for j in indicesToRead:
            hosts[j]._networkLayer.receivePackage()
    del indicesToRead[:]
    
    #Existe algum nó querendo transmitir, transmite naquele instante se posssível
    for i in indicesToSend: 
            hosts[i]._networkLayer.sendPackage()