1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 16:52:14 +02:00

net: Add net_update_ether() to handle ARP and Ping replies

When the network is VLAN or SNAP, net_update_ether() will preserve
the original Ethernet packet header and simply replace the src and
dest MACs and the protocol

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Joe Hershberger
2012-05-23 07:59:16 +00:00
parent ece223b52a
commit e711101581
4 changed files with 30 additions and 6 deletions

View File

@@ -87,6 +87,7 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
{
struct icmp_hdr *icmph = (struct icmp_hdr *)&ip->udp_src;
IPaddr_t src_ip;
int eth_hdr_size;
switch (icmph->type) {
case ICMP_ECHO_REPLY:
@@ -95,11 +96,10 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
net_set_state(NETLOOP_SUCCESS);
return;
case ICMP_ECHO_REQUEST:
debug("Got ICMP ECHO REQUEST, return "
"%d bytes\n", ETHER_HDR_SIZE + len);
eth_hdr_size = net_update_ether(et, et->et_src, PROT_IP);
memcpy(&et->et_dest[0], &et->et_src[0], 6);
memcpy(&et->et_src[0], NetOurEther, 6);
debug("Got ICMP ECHO REQUEST, return "
"%d bytes\n", eth_hdr_size + len);
ip->ip_sum = 0;
ip->ip_off = 0;
@@ -112,7 +112,7 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
icmph->checksum = 0;
icmph->checksum = ~NetCksum((uchar *)icmph,
(len - IP_HDR_SIZE) >> 1);
NetSendPacket((uchar *)et, ETHER_HDR_SIZE + len);
NetSendPacket((uchar *)et, eth_hdr_size + len);
return;
/* default:
return;*/