From patchwork Mon Apr 18 16:19:50 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Ceresoli X-Patchwork-Id: 91798 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 B9AA5B6FDF for ; Tue, 19 Apr 2011 02:20:49 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 118AC2825F; Mon, 18 Apr 2011 18:20:40 +0200 (CEST) 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 UJQy8YFV-2lh; Mon, 18 Apr 2011 18:20:39 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4D16B2826D; Mon, 18 Apr 2011 18:20:24 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 349C228213 for ; Mon, 18 Apr 2011 18:20:17 +0200 (CEST) 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 CmiI0998Arwq for ; Mon, 18 Apr 2011 18:20:15 +0200 (CEST) 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 com-exc-01.comelit.it (mail.comelit.it [217.56.59.218]) by theia.denx.de (Postfix) with ESMTP id AA3FB28202 for ; Mon, 18 Apr 2011 18:20:14 +0200 (CEST) Received: from wallace.comelit.it ([172.20.0.53]) by com-exc-01.comelit.it with Microsoft SMTPSVC(6.0.3790.4675); Mon, 18 Apr 2011 18:20:13 +0200 From: Luca Ceresoli To: u-boot@lists.denx.de Date: Mon, 18 Apr 2011 18:19:50 +0200 Message-Id: <1303143594-5345-3-git-send-email-luca.ceresoli@comelit.it> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1302796377-3321-1-git-send-email-luca.ceresoli@comelit.it> References: <1302796377-3321-1-git-send-email-luca.ceresoli@comelit.it> X-OriginalArrivalTime: 18 Apr 2011 16:20:14.0053 (UTC) FILETIME=[7F504950:01CBFDE4] X-TM-AS-Product-Ver: SMEX-8.6.0.1168-6.500.1024-18080.006 X-TM-AS-Result: No--15.384000-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Luca Ceresoli Subject: [U-Boot] [PATCH v2 2/6] NET: pass source IP address to packet handlers X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.9 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 This is needed for the upcoming TFTP server implementation. This also simplifies PingHandler() and fixes rxhand_f documentation. Signed-off-by: Luca Ceresoli Cc: Wolfgang Denk Acked-by: Detlev Zundel --- Changes in v2: - fixed checkpatch issues. drivers/net/netconsole.c | 5 +++-- include/net.h | 15 ++++++++++----- net/bootp.c | 9 ++++++--- net/dns.c | 2 +- net/net.c | 30 +++++++++++++++++------------- net/nfs.c | 2 +- net/rarp.c | 3 ++- net/sntp.c | 3 ++- net/tftp.c | 3 ++- 9 files changed, 44 insertions(+), 28 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index e27bb3e..e40efb8 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -40,13 +40,14 @@ static short nc_port; /* source/target port */ static const char *output_packet; /* used by first send udp */ static int output_packet_len = 0; -static void nc_wait_arp_handler (uchar * pkt, unsigned dest, unsigned src, +static void nc_wait_arp_handler(uchar *pkt, unsigned dest, + IPaddr_t sip, unsigned src, unsigned len) { NetState = NETLOOP_SUCCESS; /* got arp reply - quit net loop */ } -static void nc_handler (uchar * pkt, unsigned dest, unsigned src, +static void nc_handler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len) { if (input_size) diff --git a/include/net.h b/include/net.h index 95ef8ab..01f7159 100644 --- a/include/net.h +++ b/include/net.h @@ -72,12 +72,17 @@ typedef ulong IPaddr_t; -/* - * The current receive packet handler. Called with a pointer to the - * application packet, and a protocol type (PORT_BOOTPC or PORT_TFTP). - * All other packets are dealt with without calling the handler. +/** + * An incoming packet handler. + * @param pkt pointer to the application packet + * @param dport destination UDP port + * @param sip source IP address + * @param sport source UDP port + * @param len packet length */ -typedef void rxhand_f(uchar *, unsigned, unsigned, unsigned); +typedef void rxhand_f(uchar *pkt, unsigned dport, + IPaddr_t sip, unsigned sport, + unsigned len); /* * A timeout handler. Called after time interval has expired. diff --git a/net/bootp.c b/net/bootp.c index 87b027e..4db63cb 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -44,7 +44,8 @@ ulong seed1, seed2; dhcp_state_t dhcp_state = INIT; unsigned long dhcp_leasetime = 0; IPaddr_t NetDHCPServerIP = 0; -static void DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len); +static void DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, + unsigned len); /* For Debug */ #if 0 @@ -282,7 +283,8 @@ static void BootpVendorProcess (u8 * ext, int size) * Handle a BOOTP received packet. */ static void -BootpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) +BootpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, + unsigned len) { Bootp_t *bp; char *s; @@ -858,7 +860,8 @@ static void DhcpSendRequestPkt(Bootp_t *bp_offer) * Handle DHCP received packets. */ static void -DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) +DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, + unsigned len) { Bootp_t *bp = (Bootp_t *)pkt; diff --git a/net/dns.c b/net/dns.c index bb3e3f5..b51d1bd 100644 --- a/net/dns.c +++ b/net/dns.c @@ -101,7 +101,7 @@ DnsTimeout(void) } static void -DnsHandler(uchar *pkt, unsigned dest, unsigned src, unsigned len) +DnsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len) { struct header *header; const unsigned char *p, *e, *s; diff --git a/net/net.c b/net/net.c index a609632..132f99b 100644 --- a/net/net.c +++ b/net/net.c @@ -555,7 +555,8 @@ startAgainTimeout(void) } static void -startAgainHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) +startAgainHandler(uchar *pkt, unsigned dest, IPaddr_t sip, + unsigned src, unsigned len) { /* Totally ignore the packet */ } @@ -752,13 +753,10 @@ PingTimeout (void) } static void -PingHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len) +PingHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, + unsigned len) { - IPaddr_t tmp; - volatile IP_t *ip = (volatile IP_t *)pkt; - - tmp = NetReadIP((void *)&ip->ip_src); - if (tmp != NetPingIP) + if (sip != NetPingIP) return; NetState = NETLOOP_SUCCESS; @@ -990,7 +988,8 @@ CDPTimeout (void) } static void -CDPDummyHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len) +CDPDummyHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, + unsigned len) { /* nothing */ } @@ -1304,6 +1303,7 @@ NetReceive(volatile uchar * inpkt, int len) IP_t *ip; ARP_t *arp; IPaddr_t tmp; + IPaddr_t src_ip; int x; uchar *pkt; #if defined(CONFIG_CMD_CDP) @@ -1477,7 +1477,7 @@ NetReceive(volatile uchar * inpkt, int len) memcpy(NetArpWaitPacketMAC, &arp->ar_data[0], 6); #ifdef CONFIG_NETCONSOLE - (*packetHandler)(0,0,0,0); + (*packetHandler)(0, 0, 0, 0, 0); #endif /* modify header, and transmit it */ memcpy(((Ethernet_t *)NetArpWaitTxPacket)->et_dest, NetArpWaitPacketMAC, 6); @@ -1517,7 +1517,7 @@ NetReceive(volatile uchar * inpkt, int len) NetCopyIP(&NetServerIP, &arp->ar_data[ 6]); memcpy (NetServerEther, &arp->ar_data[ 0], 6); - (*packetHandler)(0,0,0,0); + (*packetHandler)(0, 0, 0, 0, 0); } break; #endif @@ -1557,6 +1557,8 @@ NetReceive(volatile uchar * inpkt, int len) #endif return; } + /* Read source IP address for later use */ + src_ip = NetReadIP(&ip->ip_src); /* * The function returns the unchanged packet if it's not * a fragment, and either the complete packet or NULL if @@ -1596,11 +1598,12 @@ NetReceive(volatile uchar * inpkt, int len) * IP header OK. Pass the packet to the current handler. */ /* XXX point to ip packet */ - (*packetHandler)((uchar *)ip, 0, 0, 0); + (*packetHandler)((uchar *)ip, 0, src_ip, 0, 0); return; case ICMP_ECHO_REQUEST: - debug("Got ICMP ECHO REQUEST, return %d bytes \n", - ETHER_HDR_SIZE + len); + debug("Got ICMP ECHO REQUEST, " + "return %d bytes\n", + ETHER_HDR_SIZE + len); memcpy (&et->et_dest[0], &et->et_src[0], 6); memcpy (&et->et_src[ 0], NetOurEther, 6); @@ -1678,6 +1681,7 @@ NetReceive(volatile uchar * inpkt, int len) */ (*packetHandler)((uchar *)ip +IP_HDR_SIZE, ntohs(ip->udp_dst), + src_ip, ntohs(ip->udp_src), ntohs(ip->udp_len) - 8); break; diff --git a/net/nfs.c b/net/nfs.c index d11bb4c..f76f60d 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -580,7 +580,7 @@ NfsTimeout (void) } static void -NfsHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len) +NfsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len) { int rlen; diff --git a/net/rarp.c b/net/rarp.c index 9444c03..94c86d3 100644 --- a/net/rarp.c +++ b/net/rarp.c @@ -43,7 +43,8 @@ int RarpTry; * Handle a RARP received packet. */ static void -RarpHandler(uchar * dummi0, unsigned dummi1, unsigned dummi2, unsigned dummi3) +RarpHandler(uchar *dummi0, unsigned dummi1, IPaddr_t sip, unsigned dummi2, + unsigned dummi3) { char *s; debug("Got good RARP\n"); diff --git a/net/sntp.c b/net/sntp.c index 76c10ec..82f2fe6 100644 --- a/net/sntp.c +++ b/net/sntp.c @@ -48,7 +48,8 @@ SntpTimeout (void) } static void -SntpHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len) +SntpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, + unsigned len) { struct sntp_pkt_t *rpktp = (struct sntp_pkt_t *)pkt; struct rtc_time tm; diff --git a/net/tftp.c b/net/tftp.c index ed559b7..00abec3 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -278,7 +278,8 @@ TftpSend (void) static void -TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len) +TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, + unsigned len) { ushort proto; ushort *s;