Blame view
net/rarp.c
2.46 KB
affae2bff Initial revision |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* * (C) Copyright 2000-2002 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */ #include <common.h> #include <command.h> #include <net.h> |
c40b29568 * Patch by Rune T... |
27 |
#include "nfs.h" |
affae2bff Initial revision |
28 29 30 |
#include "bootp.h" #include "rarp.h" #include "tftp.h" |
49f3bdbba net: express the ... |
31 |
#define TIMEOUT 5000UL /* Milliseconds before trying BOOTP again */ |
affae2bff Initial revision |
32 33 34 35 36 37 38 39 40 41 42 43 44 |
#ifndef CONFIG_NET_RETRY_COUNT # define TIMEOUT_COUNT 5 /* # of timeouts before giving up */ #else # define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT) #endif int RarpTry; /* * Handle a RARP received packet. */ static void |
03eb129f8 NET: pass source ... |
45 46 |
RarpHandler(uchar *dummi0, unsigned dummi1, IPaddr_t sip, unsigned dummi2, unsigned dummi3) |
affae2bff Initial revision |
47 |
{ |
0ebf04c60 minor debug clean... |
48 49 |
debug("Got good RARP "); |
e4a3d57dc net: Export auto_... |
50 |
net_auto_load(); |
affae2bff Initial revision |
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
} /* * Timeout on BOOTP request. */ static void RarpTimeout(void) { if (RarpTry >= TIMEOUT_COUNT) { puts (" Retry count exceeded; starting again "); NetStartAgain (); } else { |
49f3bdbba net: express the ... |
66 |
NetSetTimeout (TIMEOUT, RarpTimeout); |
affae2bff Initial revision |
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
RarpRequest (); } } void RarpRequest (void) { int i; volatile uchar *pkt; ARP_t * rarp; printf("RARP broadcast %d ", ++RarpTry); pkt = NetTxPacket; |
a3d991bd0 Patches by Pantel... |
82 |
pkt += NetSetEther(pkt, NetBcastAddr, PROT_RARP); |
affae2bff Initial revision |
83 84 |
rarp = (ARP_t *)pkt; |
7a8e9bed1 * Patch by Marc S... |
85 86 |
rarp->ar_hrd = htons (ARP_ETHER); rarp->ar_pro = htons (PROT_IP); |
affae2bff Initial revision |
87 88 |
rarp->ar_hln = 6; rarp->ar_pln = 4; |
7a8e9bed1 * Patch by Marc S... |
89 |
rarp->ar_op = htons (RARPOP_REQUEST); |
affae2bff Initial revision |
90 91 92 93 94 95 96 |
memcpy (&rarp->ar_data[0], NetOurEther, 6); /* source ET addr */ memcpy (&rarp->ar_data[6], &NetOurIP, 4); /* source IP addr */ memcpy (&rarp->ar_data[10], NetOurEther, 6); /* dest ET addr = source ET addr ??*/ /* dest. IP addr set to broadcast */ for (i = 0; i <= 3; i++) { rarp->ar_data[16 + i] = 0xff; } |
a3d991bd0 Patches by Pantel... |
97 |
NetSendPacket(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE); |
affae2bff Initial revision |
98 |
|
49f3bdbba net: express the ... |
99 |
NetSetTimeout(TIMEOUT, RarpTimeout); |
affae2bff Initial revision |
100 101 |
NetSetHandler(RarpHandler); } |