@ -36,7 +36,8 @@ static int output_recursion;
static int net_timeout ;
static int net_timeout ;
static uchar nc_ether [ 6 ] ; /* server enet address */
static uchar nc_ether [ 6 ] ; /* server enet address */
static IPaddr_t nc_ip ; /* server ip */
static IPaddr_t nc_ip ; /* server ip */
static short nc_port ; /* source/target port */
static short nc_out_port ; /* target output port */
static short nc_in_port ; /* source input port */
static const char * output_packet ; /* used by first send udp */
static const char * output_packet ; /* used by first send udp */
static int output_packet_len ;
static int output_packet_len ;
@ -71,7 +72,7 @@ void NcStart(void)
net_set_arp_handler ( nc_wait_arp_handler ) ;
net_set_arp_handler ( nc_wait_arp_handler ) ;
pkt = ( uchar * ) NetTxPacket + NetEthHdrSize ( ) + IP_UDP_HDR_SIZE ;
pkt = ( uchar * ) NetTxPacket + NetEthHdrSize ( ) + IP_UDP_HDR_SIZE ;
memcpy ( pkt , output_packet , output_packet_len ) ;
memcpy ( pkt , output_packet , output_packet_len ) ;
NetSendUDPPacket ( nc_ether , nc_ip , nc_port , nc_port ,
NetSendUDPPacket ( nc_ether , nc_ip , nc_out_ port , nc_in _port ,
output_packet_len ) ;
output_packet_len ) ;
}
}
}
}
@ -80,7 +81,7 @@ int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len)
{
{
int end , chunk ;
int end , chunk ;
if ( dest ! = nc_port | | ! len )
if ( dest ! = nc_in_ port | | ! len )
return 0 ; /* not for us */
return 0 ; /* not for us */
debug_cond ( DEBUG_DEV_PKT , " input: \" %*.*s \" \n " , len , len , pkt ) ;
debug_cond ( DEBUG_DEV_PKT , " input: \" %*.*s \" \n " , len , len , pkt ) ;
@ -139,7 +140,7 @@ static void nc_send_packet(const char *buf, int len)
memcpy ( pkt , buf , len ) ;
memcpy ( pkt , buf , len ) ;
ether = nc_ether ;
ether = nc_ether ;
ip = nc_ip ;
ip = nc_ip ;
NetSendUDPPacket ( ether , ip , nc_port , nc_port , len ) ;
NetSendUDPPacket ( ether , ip , nc_out_ port , nc_in _port , len ) ;
if ( inited )
if ( inited )
eth_halt ( ) ;
eth_halt ( ) ;
@ -148,20 +149,30 @@ static void nc_send_packet(const char *buf, int len)
static int nc_start ( void )
static int nc_start ( void )
{
{
int netmask , our_ip ;
int netmask , our_ip ;
char * p ;
nc_port = 6666 ; /* default port */
nc_out_port = 6666 ; /* default port */
nc_in_port = nc_out_port ;
if ( getenv ( " ncip " ) ) {
if ( getenv ( " ncip " ) ) {
char * p ;
nc_ip = getenv_IPaddr ( " ncip " ) ;
nc_ip = getenv_IPaddr ( " ncip " ) ;
if ( ! nc_ip )
if ( ! nc_ip )
return - 1 ; /* ncip is 0.0.0.0 */
return - 1 ; /* ncip is 0.0.0.0 */
p = strchr ( getenv ( " ncip " ) , ' : ' ) ;
p = strchr ( getenv ( " ncip " ) , ' : ' ) ;
if ( p ! = NULL )
if ( p ! = NULL ) {
nc_port = simple_strtoul ( p + 1 , NULL , 10 ) ;
nc_out_port = simple_strtoul ( p + 1 , NULL , 10 ) ;
nc_in_port = nc_out_port ;
}
} else
} else
nc_ip = ~ 0 ; /* ncip is not set */
nc_ip = ~ 0 ; /* ncip is not set, so broadcast */
p = getenv ( " ncoutport " ) ;
if ( p ! = NULL )
nc_out_port = simple_strtoul ( p , NULL , 10 ) ;
p = getenv ( " ncinport " ) ;
if ( p ! = NULL )
nc_in_port = simple_strtoul ( p , NULL , 10 ) ;
our_ip = getenv_IPaddr ( " ipaddr " ) ;
our_ip = getenv_IPaddr ( " ipaddr " ) ;
netmask = getenv_IPaddr ( " netmask " ) ;
netmask = getenv_IPaddr ( " netmask " ) ;