Commit 03eb129f8a37f7d7d222e02330cd806d3a0aef1d

Authored by Luca Ceresoli
Committed by Wolfgang Denk
1 parent 8eccee7ae7

NET: pass source IP address to packet handlers

This is needed for the upcoming TFTP server implementation.

This also simplifies PingHandler() and fixes rxhand_f documentation.

Signed-off-by: Luca Ceresoli <luca.ceresoli@comelit.it>
Cc: Wolfgang Denk <wd@denx.de>
Acked-by: Detlev Zundel <dzu@denx.de>

Showing 9 changed files with 44 additions and 28 deletions Side-by-side Diff

drivers/net/netconsole.c
... ... @@ -40,13 +40,14 @@
40 40 static const char *output_packet; /* used by first send udp */
41 41 static int output_packet_len = 0;
42 42  
43   -static void nc_wait_arp_handler (uchar * pkt, unsigned dest, unsigned src,
  43 +static void nc_wait_arp_handler(uchar *pkt, unsigned dest,
  44 + IPaddr_t sip, unsigned src,
44 45 unsigned len)
45 46 {
46 47 NetState = NETLOOP_SUCCESS; /* got arp reply - quit net loop */
47 48 }
48 49  
49   -static void nc_handler (uchar * pkt, unsigned dest, unsigned src,
  50 +static void nc_handler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
50 51 unsigned len)
51 52 {
52 53 if (input_size)
... ... @@ -72,12 +72,17 @@
72 72 typedef ulong IPaddr_t;
73 73  
74 74  
75   -/*
76   - * The current receive packet handler. Called with a pointer to the
77   - * application packet, and a protocol type (PORT_BOOTPC or PORT_TFTP).
78   - * All other packets are dealt with without calling the handler.
  75 +/**
  76 + * An incoming packet handler.
  77 + * @param pkt pointer to the application packet
  78 + * @param dport destination UDP port
  79 + * @param sip source IP address
  80 + * @param sport source UDP port
  81 + * @param len packet length
79 82 */
80   -typedef void rxhand_f(uchar *, unsigned, unsigned, unsigned);
  83 +typedef void rxhand_f(uchar *pkt, unsigned dport,
  84 + IPaddr_t sip, unsigned sport,
  85 + unsigned len);
81 86  
82 87 /*
83 88 * A timeout handler. Called after time interval has expired.
... ... @@ -44,7 +44,8 @@
44 44 dhcp_state_t dhcp_state = INIT;
45 45 unsigned long dhcp_leasetime = 0;
46 46 IPaddr_t NetDHCPServerIP = 0;
47   -static void DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len);
  47 +static void DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
  48 + unsigned len);
48 49  
49 50 /* For Debug */
50 51 #if 0
... ... @@ -282,7 +283,8 @@
282 283 * Handle a BOOTP received packet.
283 284 */
284 285 static void
285   -BootpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
  286 +BootpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
  287 + unsigned len)
286 288 {
287 289 Bootp_t *bp;
288 290 char *s;
... ... @@ -858,7 +860,8 @@
858 860 * Handle DHCP received packets.
859 861 */
860 862 static void
861   -DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
  863 +DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
  864 + unsigned len)
862 865 {
863 866 Bootp_t *bp = (Bootp_t *)pkt;
864 867  
... ... @@ -101,7 +101,7 @@
101 101 }
102 102  
103 103 static void
104   -DnsHandler(uchar *pkt, unsigned dest, unsigned src, unsigned len)
  104 +DnsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
105 105 {
106 106 struct header *header;
107 107 const unsigned char *p, *e, *s;
... ... @@ -555,7 +555,8 @@
555 555 }
556 556  
557 557 static void
558   -startAgainHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
  558 +startAgainHandler(uchar *pkt, unsigned dest, IPaddr_t sip,
  559 + unsigned src, unsigned len)
559 560 {
560 561 /* Totally ignore the packet */
561 562 }
562 563  
... ... @@ -752,13 +753,10 @@
752 753 }
753 754  
754 755 static void
755   -PingHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
  756 +PingHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
  757 + unsigned len)
756 758 {
757   - IPaddr_t tmp;
758   - volatile IP_t *ip = (volatile IP_t *)pkt;
759   -
760   - tmp = NetReadIP((void *)&ip->ip_src);
761   - if (tmp != NetPingIP)
  759 + if (sip != NetPingIP)
762 760 return;
763 761  
764 762 NetState = NETLOOP_SUCCESS;
... ... @@ -990,7 +988,8 @@
990 988 }
991 989  
992 990 static void
993   -CDPDummyHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
  991 +CDPDummyHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
  992 + unsigned len)
994 993 {
995 994 /* nothing */
996 995 }
... ... @@ -1304,6 +1303,7 @@
1304 1303 IP_t *ip;
1305 1304 ARP_t *arp;
1306 1305 IPaddr_t tmp;
  1306 + IPaddr_t src_ip;
1307 1307 int x;
1308 1308 uchar *pkt;
1309 1309 #if defined(CONFIG_CMD_CDP)
... ... @@ -1477,7 +1477,7 @@
1477 1477 memcpy(NetArpWaitPacketMAC, &arp->ar_data[0], 6);
1478 1478  
1479 1479 #ifdef CONFIG_NETCONSOLE
1480   - (*packetHandler)(0,0,0,0);
  1480 + (*packetHandler)(0, 0, 0, 0, 0);
1481 1481 #endif
1482 1482 /* modify header, and transmit it */
1483 1483 memcpy(((Ethernet_t *)NetArpWaitTxPacket)->et_dest, NetArpWaitPacketMAC, 6);
... ... @@ -1517,7 +1517,7 @@
1517 1517 NetCopyIP(&NetServerIP, &arp->ar_data[ 6]);
1518 1518 memcpy (NetServerEther, &arp->ar_data[ 0], 6);
1519 1519  
1520   - (*packetHandler)(0,0,0,0);
  1520 + (*packetHandler)(0, 0, 0, 0, 0);
1521 1521 }
1522 1522 break;
1523 1523 #endif
... ... @@ -1557,6 +1557,8 @@
1557 1557 #endif
1558 1558 return;
1559 1559 }
  1560 + /* Read source IP address for later use */
  1561 + src_ip = NetReadIP(&ip->ip_src);
1560 1562 /*
1561 1563 * The function returns the unchanged packet if it's not
1562 1564 * a fragment, and either the complete packet or NULL if
1563 1565  
... ... @@ -1596,11 +1598,12 @@
1596 1598 * IP header OK. Pass the packet to the current handler.
1597 1599 */
1598 1600 /* XXX point to ip packet */
1599   - (*packetHandler)((uchar *)ip, 0, 0, 0);
  1601 + (*packetHandler)((uchar *)ip, 0, src_ip, 0, 0);
1600 1602 return;
1601 1603 case ICMP_ECHO_REQUEST:
1602   - debug("Got ICMP ECHO REQUEST, return %d bytes \n",
1603   - ETHER_HDR_SIZE + len);
  1604 + debug("Got ICMP ECHO REQUEST, "
  1605 + "return %d bytes\n",
  1606 + ETHER_HDR_SIZE + len);
1604 1607  
1605 1608 memcpy (&et->et_dest[0], &et->et_src[0], 6);
1606 1609 memcpy (&et->et_src[ 0], NetOurEther, 6);
... ... @@ -1678,6 +1681,7 @@
1678 1681 */
1679 1682 (*packetHandler)((uchar *)ip +IP_HDR_SIZE,
1680 1683 ntohs(ip->udp_dst),
  1684 + src_ip,
1681 1685 ntohs(ip->udp_src),
1682 1686 ntohs(ip->udp_len) - 8);
1683 1687 break;
... ... @@ -580,7 +580,7 @@
580 580 }
581 581  
582 582 static void
583   -NfsHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len)
  583 +NfsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
584 584 {
585 585 int rlen;
586 586  
... ... @@ -43,7 +43,8 @@
43 43 * Handle a RARP received packet.
44 44 */
45 45 static void
46   -RarpHandler(uchar * dummi0, unsigned dummi1, unsigned dummi2, unsigned dummi3)
  46 +RarpHandler(uchar *dummi0, unsigned dummi1, IPaddr_t sip, unsigned dummi2,
  47 + unsigned dummi3)
47 48 {
48 49 char *s;
49 50 debug("Got good RARP\n");
... ... @@ -48,7 +48,8 @@
48 48 }
49 49  
50 50 static void
51   -SntpHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len)
  51 +SntpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
  52 + unsigned len)
52 53 {
53 54 struct sntp_pkt_t *rpktp = (struct sntp_pkt_t *)pkt;
54 55 struct rtc_time tm;
... ... @@ -278,7 +278,8 @@
278 278  
279 279  
280 280 static void
281   -TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
  281 +TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
  282 + unsigned len)
282 283 {
283 284 ushort proto;
284 285 ushort *s;