Commit 03eb129f8a37f7d7d222e02330cd806d3a0aef1d
Committed by
Wolfgang Denk
1 parent
8eccee7ae7
Exists in
master
and in
54 other branches
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) |
include/net.h
... | ... | @@ -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. |
net/bootp.c
... | ... | @@ -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 |
net/dns.c
... | ... | @@ -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; |
net/net.c
... | ... | @@ -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; |
net/nfs.c
net/rarp.c
... | ... | @@ -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"); |
net/sntp.c
... | ... | @@ -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; |
net/tftp.c