diff options
Diffstat (limited to 'net/net.c')
| -rw-r--r-- | net/net.c | 197 | 
1 files changed, 99 insertions, 98 deletions
| @@ -122,7 +122,7 @@ uchar		NetBcastAddr[6] =	/* Ethernet bcast address		*/  uchar		NetEtherNullAddr[6] =  			{ 0, 0, 0, 0, 0, 0 };  #if (CONFIG_COMMANDS & CFG_CMD_CDP) -uchar		NetCDPAddr[6] =	/* Ethernet bcast address		*/ +uchar		NetCDPAddr[6] =		/* Ethernet bcast address		*/  			{ 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };  #endif  int		NetState;		/* Network loop state			*/ @@ -132,8 +132,9 @@ static int	NetRestarted = 0;	/* Network loop restarted		*/  static int	NetDevExists = 0;	/* At least one device configured	*/  #endif -ushort		NetOurVLAN = ntohs(-1);	/* default is without VLAN		*/ -ushort		NetOurNativeVLAN = htons(-1);	/* dido				*/ +/* XXX in both little & big endian machines 0xFFFF == ntohs(-1) */ +ushort		NetOurVLAN = 0xFFFF;		/* default is without VLAN	*/ +ushort		NetOurNativeVLAN = 0xFFFF;	/* ditto			*/  char		BootFile[128];		/* Boot File name			*/ @@ -170,43 +171,45 @@ uchar 		NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];  ulong		NetArpWaitTimerStart;  int		NetArpWaitTry; -void ArpRequest(void) +void ArpRequest (void)  {  	int i;  	volatile uchar *pkt; -	ARP_t *	arp; +	ARP_t *arp;  #ifdef ET_DEBUG -	printf("ARP broadcast %d\n", NetArpWaitTry); +	printf ("ARP broadcast %d\n", NetArpWaitTry);  #endif  	pkt = NetTxPacket; -	pkt += NetSetEther(pkt, NetBcastAddr, PROT_ARP); +	pkt += NetSetEther (pkt, NetBcastAddr, PROT_ARP); -	arp = (ARP_t *)pkt; +	arp = (ARP_t *) pkt; -	arp->ar_hrd = htons(ARP_ETHER); -	arp->ar_pro = htons(PROT_IP); +	arp->ar_hrd = htons (ARP_ETHER); +	arp->ar_pro = htons (PROT_IP);  	arp->ar_hln = 6;  	arp->ar_pln = 4; -	arp->ar_op  = htons(ARPOP_REQUEST); +	arp->ar_op = htons (ARPOP_REQUEST); -	memcpy (&arp->ar_data[0], NetOurEther, 6);	/* source ET addr	*/ -	NetWriteIP((uchar*)&arp->ar_data[6], NetOurIP);	/* source IP addr	*/ -	for (i=10; i<16; ++i) { -		arp->ar_data[i] = 0;			/* dest ET addr = 0	*/ +	memcpy (&arp->ar_data[0], NetOurEther, 6);		/* source ET addr       */ +	NetWriteIP ((uchar *) & arp->ar_data[6], NetOurIP);	/* source IP addr       */ +	for (i = 10; i < 16; ++i) { +		arp->ar_data[i] = 0;				/* dest ET addr = 0     */  	} -	if((NetArpWaitPacketIP & NetOurSubnetMask) != (NetOurIP & NetOurSubnetMask)) { -	    if (NetOurGatewayIP == 0) { -		puts ("## Warning: gatewayip needed but not set\n"); -	    } -	    NetArpWaitReplyIP = NetOurGatewayIP; -	} else -	    NetArpWaitReplyIP = NetArpWaitPacketIP; +	if ((NetArpWaitPacketIP & NetOurSubnetMask) != +	    (NetOurIP & NetOurSubnetMask)) { +		if (NetOurGatewayIP == 0) { +			puts ("## Warning: gatewayip needed but not set\n"); +		} +		NetArpWaitReplyIP = NetOurGatewayIP; +	} else { +		NetArpWaitReplyIP = NetArpWaitPacketIP; +	} -	NetWriteIP((uchar*)&arp->ar_data[16], NetArpWaitReplyIP); -	(void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE); +	NetWriteIP ((uchar *) & arp->ar_data[16], NetArpWaitReplyIP); +	(void) eth_send (NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);  }  void ArpTimeoutCheck(void) @@ -260,7 +263,6 @@ NetLoop(proto_t protocol)  	if (!NetTxPacket) {  		int	i; -  		/*  		 *	Setup packet buffers, aligned correctly.  		 */ @@ -269,7 +271,6 @@ NetLoop(proto_t protocol)  		for (i = 0; i < PKTBUFSRX; i++) {  			NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN;  		} -  	}  	if (!NetArpWaitTxPacket) { @@ -279,9 +280,11 @@ NetLoop(proto_t protocol)  	}  	eth_halt(); +#ifdef CONFIG_NET_MULTI  	eth_set_current(); -	if(eth_init(bd) < 0) -	    return(-1); +#endif +	if (eth_init(bd) < 0) +		return(-1);  restart:  #ifdef CONFIG_NET_MULTI @@ -519,43 +522,42 @@ startAgainHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)  	/* Totally ignore the packet */  } -void -NetStartAgain(void) +void NetStartAgain (void)  { +#ifdef	CONFIG_NET_MULTI  	DECLARE_GLOBAL_DATA_PTR; -	char *s; +#endif +	char *nretry; +	int noretry = 0, once = 0; -	if ((s = getenv("netretry")) != NULL && *s == 'n') { -		eth_halt(); +	if ((nretry = getenv ("netretry")) != NULL) { +		noretry = (strcmp (nretry, "no") == 0); +		once = (strcmp (nretry, "once") == 0); +	} +	if (noretry) { +		eth_halt ();  		NetState = NETLOOP_FAIL;  		return;  	} -  #ifndef CONFIG_NET_MULTI -	NetSetTimeout(10 * CFG_HZ, startAgainTimeout); -	NetSetHandler(startAgainHandler); -#else -	eth_halt(); -	eth_try_another(!NetRestarted); -	eth_init(gd->bd); -	if (NetRestartWrap) -	{ +	NetSetTimeout (10 * CFG_HZ, startAgainTimeout); +	NetSetHandler (startAgainHandler); +#else	/* !CONFIG_NET_MULTI*/ +	eth_halt (); +	eth_try_another (!NetRestarted); +	eth_init (gd->bd); +	if (NetRestartWrap) {  		NetRestartWrap = 0; -		if (NetDevExists) -		{ -			NetSetTimeout(10 * CFG_HZ, startAgainTimeout); -			NetSetHandler(startAgainHandler); -		} -		else -		{ +		if (NetDevExists && !once) { +			NetSetTimeout (10 * CFG_HZ, startAgainTimeout); +			NetSetHandler (startAgainHandler); +		} else {  			NetState = NETLOOP_FAIL;  		} -	} -	else -	{ +	} else {  		NetState = NETLOOP_RESTART;  	} -#endif +#endif	/* CONFIG_NET_MULTI */  }  /**********************************************************************/ @@ -629,7 +631,7 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)  #ifdef ET_DEBUG  	printf("sending UDP to %08lx/%02x:%02x:%02x:%02x:%02x:%02x\n", -			dest, ether[0], ether[1], ether[2], ether[3], ether[4], ether[5]); +		dest, ether[0], ether[1], ether[2], ether[3], ether[4], ether[5]);  #endif  	pkt = (uchar *)NetTxPacket; @@ -637,7 +639,7 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)  	NetSetIP (pkt, dest, dport, sport, len);  	(void) eth_send(NetTxPacket, (pkt - NetTxPacket) + IP_HDR_SIZE + len); -	return 0;	/* transmited */ +	return 0;	/* transmitted */  }  #if (CONFIG_COMMANDS & CFG_CMD_PING) @@ -722,14 +724,13 @@ static void PingStart(void)  {  #if defined(CONFIG_NET_MULTI)  	printf ("Using %s device\n", eth_get_name()); -#endif +#endif	/* CONFIG_NET_MULTI */  	NetSetTimeout (10 * CFG_HZ, PingTimeout);  	NetSetHandler (PingHandler);  	PingSend();  } - -#endif +#endif	/* CFG_CMD_PING */  #if (CONFIG_COMMANDS & CFG_CMD_CDP) @@ -812,9 +813,12 @@ int CDPSendTrigger(void)  	volatile ushort *s;  	volatile ushort *cp;  	Ethernet_t *et; -	char buf[32];  	int len;  	ushort chksum; +#if defined(CONFIG_CDP_DEVICE_ID) || defined(CONFIG_CDP_PORT_ID)   || \ +    defined(CONFIG_CDP_VERSION)   || defined(CONFIG_CDP_PLATFORM) +	char buf[32]; +#endif  	pkt = NetTxPacket;  	et = (Ethernet_t *)pkt; @@ -1073,8 +1077,7 @@ static void CDPStart(void)  	CDPSendTrigger();  } - -#endif +#endif	/* CFG_CMD_CDP */  void @@ -1381,7 +1384,6 @@ NetReceive(volatile uchar * inpkt, int len)  						ntohs(ip->udp_dst),  						ntohs(ip->udp_src),  						ntohs(ip->udp_len) - 8); -  		break;  	}  } @@ -1392,68 +1394,67 @@ NetReceive(volatile uchar * inpkt, int len)  static int net_check_prereq (proto_t protocol)  {  	switch (protocol) { -			/* Fall through */ +		/* Fall through */  #if (CONFIG_COMMANDS & CFG_CMD_PING)  	case PING: -			if (NetPingIP == 0) { -				puts ("*** ERROR: ping address not given\n"); -				return (1); -			} -			goto common; +		if (NetPingIP == 0) { +			puts ("*** ERROR: ping address not given\n"); +			return (1); +		} +		goto common;  #endif  #if (CONFIG_COMMANDS & CFG_CMD_NFS)  	case NFS:  #endif  	case TFTP: -			if (NetServerIP == 0) { -				puts ("*** ERROR: `serverip' not set\n"); -				return (1); -			} - +		if (NetServerIP == 0) { +			puts ("*** ERROR: `serverip' not set\n"); +			return (1); +		}  #if (CONFIG_COMMANDS & CFG_CMD_PING) -		common: +	      common:  #endif -			if (NetOurIP == 0) { -				puts ("*** ERROR: `ipaddr' not set\n"); -				return (1); -			} -			/* Fall through */ +		if (NetOurIP == 0) { +			puts ("*** ERROR: `ipaddr' not set\n"); +			return (1); +		} +		/* Fall through */  	case DHCP:  	case RARP:  	case BOOTP:  	case CDP: -			if (memcmp(NetOurEther, "\0\0\0\0\0\0", 6) == 0) { +		if (memcmp (NetOurEther, "\0\0\0\0\0\0", 6) == 0) {  #ifdef CONFIG_NET_MULTI -			    extern int eth_get_dev_index (void); -			    int num = eth_get_dev_index(); +			extern int eth_get_dev_index (void); +			int num = eth_get_dev_index (); -			    switch (num) { -			    case -1: +			switch (num) { +			case -1:  				puts ("*** ERROR: No ethernet found.\n");  				return (1); -			    case 0: +			case 0:  				puts ("*** ERROR: `ethaddr' not set\n");  				break; -			    default: +			default:  				printf ("*** ERROR: `eth%daddr' not set\n",  					num);  				break; -			    } +			} -			    NetStartAgain (); -			    return (2); +			NetStartAgain (); +			return (2);  #else -			    puts ("*** ERROR: `ethaddr' not set\n"); -			    return (1); +			puts ("*** ERROR: `ethaddr' not set\n"); +			return (1);  #endif -			} -			/* Fall through */ -		default: -			return(0); +		} +		/* Fall through */ +	default: +		return (0);  	} -	return (0);	/* OK */ +	return (0);		/* OK */  }  /**********************************************************************/ @@ -1529,7 +1530,7 @@ NetSetIP(volatile uchar * xip, IPaddr_t dest, int dport, int sport, int len)  	/*  	 *	Construct an IP and UDP header. -			(need to set no fragment bit - XXX) +	 *	(need to set no fragment bit - XXX)  	 */  	ip->ip_hl_v  = 0x45;		/* IP_HDR_SIZE / 4 (not including UDP) */  	ip->ip_tos   = 0; @@ -1570,7 +1571,7 @@ void ip_to_string (IPaddr_t x, char *s)  		 (int) ((x >> 24) & 0xff),  		 (int) ((x >> 16) & 0xff),  		 (int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff) -		); +	);  }  IPaddr_t string_to_ip(char *s) |