def METHOD_NAME (self, pipe):
    '''
        Will execute ARP request
    '''
    if self.trigger_pkt != None:
        self.log("ARP: ---> sending provided trigger packet from {0} -> {1}".format(self.trigger_pkt[IP].src, self.trigger_pkt[IP].dst))
        pipe.async_tx_pkt(self.trigger_pkt)
    else:
        self.log("ARP: ---> who has '{0}' ? tell '{1}' ".format(self.dst_ip, self.src_ip))
        pkt = Ether(dst="ff:ff:ff:ff:ff:ff",src=self.src_mac)/ARP(psrc  = self.src_ip, pdst = self.dst_ip, hwsrc = self.src_mac)
        # add VLAN to the packet if needed
        self.vlan.embed(pkt, self.fmt)
        # send the ARP request
        pipe.async_tx_pkt(pkt)
        # wait for RX packet
    pkts = yield pipe.async_wait_for_pkt(time_sec = self.timeout_sec)
    if not pkts:
        self.log("ARP: <--- timeout for '{0}'".format(self.dst_ip))
        self.record = ARPRecord(self.src_ip, self.dst_ip)
        return
    # parse record
    response = Ether(pkts[0]['pkt'])
    self.record = ARPRecord(self.src_ip, self.dst_ip, response)
    self.log("ARP: <--- '{0} is at '{1}'".format(self.record.dst_ip, self.record.dst_mac))