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)
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
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 ) )