From patchwork Fri Jan 20 00:53:26 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Hershberger X-Patchwork-Id: 136965 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 833A51007D8 for ; Fri, 20 Jan 2012 20:09:38 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E6F05282BF; Fri, 20 Jan 2012 10:08:42 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Y74QbAhy3WLN; Fri, 20 Jan 2012 10:08:42 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 05C8228345; Fri, 20 Jan 2012 10:07:38 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id C300228399 for ; Fri, 20 Jan 2012 00:14:06 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 15-IuHQf8YDA for ; Fri, 20 Jan 2012 00:14:06 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from spamkiller05.natinst.com (mailserver5.natinst.com [130.164.80.5]) by theia.denx.de (Postfix) with ESMTP id 402AE28373 for ; Fri, 20 Jan 2012 00:14:06 +0100 (CET) Received: from mailserv59-us.natinst.com (nb-hsrp-1338.natinst.com [130.164.19.133]) by spamkiller05.natinst.com (8.14.4/8.14.4) with ESMTP id q0JLxcuV018237; Thu, 19 Jan 2012 15:59:38 -0600 Received: from localhost.localdomain ([130.164.14.197]) by mailserv59-us.natinst.com (Lotus Domino Release 8.5.2FP3) with ESMTP id 2012011915590813-509610 ; Thu, 19 Jan 2012 15:59:08 -0600 From: Joe Hershberger To: u-boot@lists.denx.de Date: Thu, 19 Jan 2012 18:53:26 -0600 Message-Id: <1327020811-1538-24-git-send-email-joe.hershberger@ni.com> X-Mailer: git-send-email 1.6.0.2 In-Reply-To: <1327020811-1538-1-git-send-email-joe.hershberger@ni.com> References: <1327020811-1538-1-git-send-email-joe.hershberger@ni.com> X-MIMETrack: Itemize by SMTP Server on MailServ59-US/AUS/H/NIC(Release 8.5.2FP3|July 10, 2011) at 01/19/2012 03:59:08 PM, Serialize by Router on MailServ59-US/AUS/H/NIC(Release 8.5.2FP3|July 10, 2011) at 01/19/2012 03:59:08 PM, Serialize complete at 01/19/2012 03:59:08 PM X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.6.7361, 1.0.211, 0.0.0000 definitions=2012-01-19_09:2012-01-19, 2012-01-19, 1970-01-01 signatures=0 X-Mailman-Approved-At: Fri, 20 Jan 2012 10:07:24 +0100 Cc: Joe Hershberger Subject: [U-Boot] [PATCH 23/28] net: Refactor NetSendUDPPacket to share more code X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de Signed-off-by: Joe Hershberger Cc: Joe Hershberger Cc: Wolfgang Denk --- net/net.c | 44 +++++++++++++++++++++++++------------------- 1 files changed, 25 insertions(+), 19 deletions(-) diff --git a/net/net.c b/net/net.c index 51d899b..59ac167 100644 --- a/net/net.c +++ b/net/net.c @@ -638,6 +638,9 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int payload_len) { uchar *pkt; + int need_arp = 0; + int eth_hdr_size; + int pkt_hdr_size; /* make sure the NetTxPacket is initialized (NetInit() was called) */ if (NetTxPacket == NULL) { @@ -658,40 +661,43 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, * an ARP request */ if (memcmp(ether, NetEtherNullAddr, 6) == 0) { + need_arp = 1; + pkt = NetArpWaitTxPacket; + } else + pkt = (uchar *)NetTxPacket; + + eth_hdr_size = NetSetEther(pkt, ether, PROT_IP); + pkt += eth_hdr_size; + NetSetUDPHeader(pkt, dest, dport, sport, payload_len); + pkt_hdr_size = eth_hdr_size + IP_UDP_HDR_SIZE; - debug("sending ARP for %08x\n", dest); + if (need_arp) { + debug("sending ARP for %pI4\n", &dest); + /* save the ip and eth addr for the packet to send after arp */ NetArpWaitPacketIP = dest; NetArpWaitPacketMAC = ether; - pkt = NetArpWaitTxPacket; - pkt += NetSetEther(pkt, NetArpWaitPacketMAC, PROT_IP); - - NetSetUDPHeader(pkt, dest, dport, sport, payload_len); + /* + * Copy the packet data from the NetTxPacket into the + * NetArpWaitTxPacket to send after arp + */ memcpy(pkt + IP_UDP_HDR_SIZE, (uchar *)NetTxPacket + - (pkt - (uchar *)NetArpWaitTxPacket) + - IP_UDP_HDR_SIZE, payload_len); + pkt_hdr_size, payload_len); /* size of the waiting packet */ - NetArpWaitTxPacketSize = (pkt - NetArpWaitTxPacket) + - IP_UDP_HDR_SIZE + payload_len; + NetArpWaitTxPacketSize = pkt_hdr_size + payload_len; /* and do the ARP request */ NetArpWaitTry = 1; NetArpWaitTimerStart = get_timer(0); ArpRequest(); return 1; /* waiting */ + } else { + debug("sending UDP to %pI4/%pM\n", &dest, ether); + NetSendPacket(NetTxPacket, pkt_hdr_size + payload_len); + return 0; /* transmitted */ } - - debug("sending UDP to %08x/%pM\n", dest, ether); - - pkt = (uchar *)NetTxPacket; - pkt += NetSetEther(pkt, ether, PROT_IP); - NetSetUDPHeader(pkt, dest, dport, sport, payload_len); - NetSendPacket(NetTxPacket, (pkt - NetTxPacket) + IP_UDP_HDR_SIZE + - payload_len); - - return 0; /* transmitted */ } #ifdef CONFIG_IP_DEFRAG