Example #1
0
 def sendLLDPInOF_PACKET_IN_OPENFLOWV1(self, ethernet_data, in_port):
     # create OF_PACKET_IN message
     packed_data = pI()
     packed_data.header.xid = 0
     packed_data.buffer_id = 4294967295
     packed_data.in_port = in_port
     packed_data.reason = pIR.OFPR_ACTION
     packed_data.data = ethernet_data
     packed_data.total_len = packed_data.get_size() - 8
     packed_data = packed_data.pack()
     self.s.send(packed_data)
Example #2
0
    def sendLLDPInOF_PACKET_IN_OPENFLOWV1(self, data):

        try:
            # ethernet header of lldp
            ethernetH = data.data.value
            ethernetH = lldp.unpack_ethernet_frame(ethernetH)

            # check paket is lldp
            if ethernetH[3] != 35020:
                return True

            # get Src from ethernet header
            temp = ethernetH[2]  # tuple
            temp = list(map(str, temp))  # tuple to list

            srcEthernet = ""
            hexNumberTemp = ""
            for i in temp:
                hexNumberTemp = hex(
                    int(i))[2:]  # change number to Hex cut 0x out
                if (len(hexNumberTemp) == 1):
                    srcEthernet += "0" + hexNumberTemp
                else:
                    srcEthernet += hexNumberTemp
                srcEthernet += ":"

            srcEthernet = srcEthernet[0:len(srcEthernet) - 1]  # src ethernet

            #data.actions[0].port is output_field
            print("output port : " + str(data.actions[0].port))
            snmpPosition, tempPort = self.searchSnmpPosition(
                data.actions[0].port)
            """
            for key , port in self.listActivePort.items():
                print("snmp poisition : " + key + " port : " + port.hw_addr)
            """
            """
            if snmpPosition == "5" :
                print("snmpposition : " + snmpPosition + " port : " + str(tempPort.hw_addr))
            """

            # init value
            chassis_id = None
            port_id = None

            if self.dictRemoteSwitchDataFromPort[snmpPosition][2]:
                # send Packet_IN contain lldp frame
                chassis_id = self.dictRemoteSwitchDataFromPort[snmpPosition][0]
                port_id = self.dictRemoteSwitchDataFromPort[snmpPosition][1]
                in_port = tempPort.port_no
                print("port : " + str(port_id))
            else:

                tempHwAddr = self.dictRemoteSwitchDataFromPort[snmpPosition][
                    0][2:]
                tempHwAddr = tempHwAddr[0:2] + ":" + tempHwAddr[
                    2:4] + ":" + tempHwAddr[4:6] + ":" + tempHwAddr[
                        6:8] + ":" + tempHwAddr[8:10] + ":" + tempHwAddr[10:12]

                try:
                    self.lock.acquire_read()
                    chassis_id = self.dictAllActivePortInTDA[(
                        tempHwAddr,
                        self.dictRemoteSwitchDataFromPort[snmpPosition][1])][0]
                    port_id = self.dictAllActivePortInTDA[(
                        tempHwAddr,
                        self.dictRemoteSwitchDataFromPort[snmpPosition][1])][1]
                    self.lock.release()
                    if chassis_id == None:
                        return False
                except Exception as err:
                    self.lock.release()
                in_port = tempPort.port_no
            print("612 error : " + chassis_id)
            ethernet_data = self.createLLDPPacket(
                srcEthernet, bytes(chassis_id, encoding='utf-8'), port_id)

            # create OF_PACKET_IN message
            packed_data = pI()
            packed_data.header.xid = 0
            packed_data.buffer_id = 4294967295
            packed_data.in_port = in_port
            packed_data.reason = pIR.OFPR_ACTION
            packed_data.data = ethernet_data
            packed_data.total_len = packed_data.get_size() - 8
            packed_data = packed_data.pack()

            # OF_PACKET_IN -> controller
            self.s.send(packed_data)

            return True

        except Exception as err:

            print(" 514 Switch ip " + self.switchIp +
                  " handling run-time error : " + str(err))
            return False
Example #3
0
    def sendLLDPInOF_PACKET_IN_OPENFLOWV1( self, data ):

        try :
            # ethernet header of lldp
            ethernetH = data.data.value
            ethernetH = lldp.unpack_ethernet_frame(ethernetH)

            # check paket is lldp
            if ethernetH[3] != 35020 :
                return True



            # get Src from ethernet header
            temp = ethernetH[2] # tuple
            temp = list(map(str, temp)) # tuple to list

            srcEthernet = ""
            hexNumberTemp = ""
            for i in temp:
                hexNumberTemp = hex(int(i))[2:] # change number to Hex cut 0x out
                if(len(hexNumberTemp) == 1):
                    srcEthernet  += "0" + hexNumberTemp
                else:
                    srcEthernet += hexNumberTemp
                srcEthernet += ":"

            srcEthernet = srcEthernet[0: len(srcEthernet)-1] # src ethernet
            #print(srcEthernet)

            #print(data.actions[0].port)

            snmpPosition, tempPort = self.searchSnmpPosition(data.actions[0].port)
            #print(dir(tempPort))
            """
            for key , port in self.listActivePort.items():
                print("snmp poisition : " + key + " port : " + port.hw_addr)
            """
            """
            if snmpPosition == "5" :
                print("snmpposition : " + snmpPosition + " port : " + str(tempPort.hw_addr))
            """

            # send Packet_IN contain lldp frame
            chassis_id = self.listRemoteDataFromPort[snmpPosition][0]
            port_id = self.listRemoteDataFromPort[snmpPosition][1]
            in_port = tempPort.port_no

            ethernet_data = self.createLLDPPacket( srcEthernet  , bytes(chassis_id, encoding='utf-8') , port_id )

            # create OF_PACKET_IN message
            packed_data = pI()
            packed_data.header.xid = 0
            packed_data.buffer_id = 4294967295
            packed_data.in_port = in_port
            packed_data.reason = pIR.OFPR_ACTION
            packed_data.data = ethernet_data
            packed_data.total_len = packed_data.get_size()-8
            packed_data = packed_data.pack()

            # OF_PACKET_IN -> controller
            self.s.send( packed_data )

        except Exception as err:
            print( " 514 Switch ip " + self.switchIp + " handling run-time error : " + str( err ) )