diff options
| -rw-r--r-- | doc/README.NetConsole | 3 | ||||
| -rw-r--r-- | drivers/net/netconsole.c | 29 | ||||
| -rwxr-xr-x | tools/netconsole | 18 | 
3 files changed, 34 insertions, 16 deletions
| diff --git a/doc/README.NetConsole b/doc/README.NetConsole index c8bcb90a3..070e86a6f 100644 --- a/doc/README.NetConsole +++ b/doc/README.NetConsole @@ -11,6 +11,9 @@ port of the destination. The format is <ip_addr>:<port>. If <port> is  omitted, the value of 6666 is used. If the env var doesn't exist, the  broadcast address and port 6666 are used. If it is set to an IP  address of 0 (or 0.0.0.0) then no messages are sent to the network. +The source / listening port can be configured separately by setting +the 'ncinport' environment variable and the destination port can be +configured by setting the 'ncoutport' environment variable.  For example, if your server IP is 192.168.1.1, you could use: diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 14243b8a9..86f530114 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -36,7 +36,8 @@ static int output_recursion;  static int net_timeout;  static uchar nc_ether[6]; /* server enet address */  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 int output_packet_len; @@ -71,7 +72,7 @@ void NcStart(void)  		net_set_arp_handler(nc_wait_arp_handler);  		pkt = (uchar *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE;  		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);  	}  } @@ -80,7 +81,7 @@ int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len)  {  	int end, chunk; -	if (dest != nc_port || !len) +	if (dest != nc_in_port || !len)  		return 0; /* not for us */  	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);  	ether = nc_ether;  	ip = nc_ip; -	NetSendUDPPacket(ether, ip, nc_port, nc_port, len); +	NetSendUDPPacket(ether, ip, nc_out_port, nc_in_port, len);  	if (inited)  		eth_halt(); @@ -148,20 +149,30 @@ static void nc_send_packet(const char *buf, int len)  static int nc_start(void)  {  	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")) { -		char *p;  		nc_ip = getenv_IPaddr("ncip");  		if (!nc_ip)  			return -1;	/* ncip is 0.0.0.0 */  		p = strchr(getenv("ncip"), ':'); -		if (p != NULL) -			nc_port = simple_strtoul(p + 1, NULL, 10); +		if (p != NULL) { +			nc_out_port = simple_strtoul(p + 1, NULL, 10); +			nc_in_port = nc_out_port; +		}  	} 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");  	netmask = getenv_IPaddr("netmask"); diff --git a/tools/netconsole b/tools/netconsole index c8109bb09..1a0ef2224 100755 --- a/tools/netconsole +++ b/tools/netconsole @@ -2,7 +2,7 @@  usage() {  	( -	echo "Usage: $0 <board IP> [board port]" +	echo "Usage: $0 <board-IP> [board-port [board-in-port]]"  	echo ""  	echo "If port is not specified, '6666' will be used"  	[ -z "$*" ] && exit 0 @@ -24,9 +24,13 @@ while [ -n "$1" ] ; do  done  ip=$1 -port=${2:-6666} +board_out_port=${2:-6666} +board_in_port=${3:-${board_out_port}} -if [ -z "${ip}" ] || [ -n "$3" ] ; then +echo Board out port: ${board_out_port} +echo Board in port: ${board_in_port} + +if [ -z "${ip}" ] || [ -n "$4" ] ; then  	usage "Invalid number of arguments"  fi @@ -41,19 +45,19 @@ stty -icanon -echo intr ^T  (  if type ncb 2>/dev/null ; then  	# see if ncb is in $PATH -	exec ncb ${port} +	exec ncb ${board_out_port}  elif [ -x ${0%/*}/ncb ] ; then  	# maybe it's in the same dir as the netconsole script -	exec ${0%/*}/ncb ${port} +	exec ${0%/*}/ncb ${board_out_port}  else  	# blah, just use regular netcat -	while ${nc} -u -l -p ${port} < /dev/null ; do +	while ${nc} -u -l -p ${board_out_port} < /dev/null ; do  		:  	done  fi  ) &  pid=$! -${nc} -u ${ip} ${port} +${nc} -u ${ip} ${board_in_port}  kill ${pid} 2>/dev/null |