X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=net%2Fping.c;h=0e33660f6c5faf8db51940826491c256d7c685ba;hb=HEAD;hp=4918a1cb36d3e2ebc7c888545ee9c0fc3d6c5c98;hpb=049a95a7759c0e384c1fc7b8575d968d56a33997;p=oweals%2Fu-boot.git diff --git a/net/ping.c b/net/ping.c index 4918a1cb36..0e33660f6c 100644 --- a/net/ping.c +++ b/net/ping.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copied from Linux Monitor (LiMon) - Networking. * @@ -6,13 +7,14 @@ * Copyright 2000 Roland Borde * Copyright 2000 Paolo Scaffardi * Copyright 2000-2002 Wolfgang Denk, wd@denx.de - * SPDX-License-Identifier: GPL-2.0 */ #include "ping.h" #include "arp.h" +#include +#include -static ushort PingSeqNo; +static ushort ping_seq_number; /* The ip address to ping */ struct in_addr net_ping_ip; @@ -22,20 +24,15 @@ static void set_icmp_header(uchar *pkt, struct in_addr dest) /* * Construct an IP and ICMP header. */ - struct ip_hdr *ip = (struct ip_hdr *)pkt; struct icmp_hdr *icmp = (struct icmp_hdr *)(pkt + IP_HDR_SIZE); - net_set_ip_header(pkt, dest, net_ip); - - ip->ip_len = htons(IP_ICMP_HDR_SIZE); - ip->ip_p = IPPROTO_ICMP; - ip->ip_sum = compute_ip_checksum(ip, IP_HDR_SIZE); + net_set_ip_header(pkt, dest, net_ip, IP_ICMP_HDR_SIZE, IPPROTO_ICMP); icmp->type = ICMP_ECHO_REQUEST; icmp->code = 0; icmp->checksum = 0; icmp->un.echo.id = 0; - icmp->un.echo.sequence = htons(PingSeqNo++); + icmp->un.echo.sequence = htons(ping_seq_number++); icmp->checksum = compute_ip_checksum(icmp, ICMP_HDR_SIZE); } @@ -50,22 +47,22 @@ static int ping_send(void) net_arp_wait_packet_ip = net_ping_ip; - eth_hdr_size = NetSetEther(NetTxPacket, NetEtherNullAddr, PROT_IP); - pkt = (uchar *)NetTxPacket + eth_hdr_size; + eth_hdr_size = net_set_ether(net_tx_packet, net_null_ethaddr, PROT_IP); + pkt = (uchar *)net_tx_packet + eth_hdr_size; set_icmp_header(pkt, net_ping_ip); /* size of the waiting packet */ - NetArpWaitTxPacketSize = eth_hdr_size + IP_ICMP_HDR_SIZE; + arp_wait_tx_packet_size = eth_hdr_size + IP_ICMP_HDR_SIZE; /* and do the ARP request */ - NetArpWaitTry = 1; - NetArpWaitTimerStart = get_timer(0); - ArpRequest(); + arp_wait_try = 1; + arp_wait_timer_start = get_timer(0); + arp_request(); return 1; /* waiting */ } -static void ping_timeout(void) +static void ping_timeout_handler(void) { eth_halt(); net_set_state(NETLOOP_FAIL); /* we did not get the reply */ @@ -74,7 +71,7 @@ static void ping_timeout(void) void ping_start(void) { printf("Using %s device\n", eth_get_name()); - NetSetTimeout(10000UL, ping_timeout); + net_set_timeout_handler(10000UL, ping_timeout_handler); ping_send(); } @@ -84,6 +81,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; struct in_addr src_ip; int eth_hdr_size; + uchar *tx_packet; switch (icmph->type) { case ICMP_ECHO_REPLY: @@ -94,8 +92,9 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len) case ICMP_ECHO_REQUEST: eth_hdr_size = net_update_ether(et, et->et_src, PROT_IP); - debug_cond(DEBUG_DEV_PKT, "Got ICMP ECHO REQUEST, return " - "%d bytes\n", eth_hdr_size + len); + debug_cond(DEBUG_DEV_PKT, + "Got ICMP ECHO REQUEST, return %d bytes\n", + eth_hdr_size + len); ip->ip_sum = 0; ip->ip_off = 0; @@ -106,7 +105,10 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len) icmph->type = ICMP_ECHO_REPLY; icmph->checksum = 0; icmph->checksum = compute_ip_checksum(icmph, len - IP_HDR_SIZE); - NetSendPacket((uchar *)et, eth_hdr_size + len); + + tx_packet = net_get_async_tx_pkt_buf(); + memcpy(tx_packet, et, eth_hdr_size + len); + net_send_packet(tx_packet, eth_hdr_size + len); return; /* default: return;*/