
Check the incoming packets' source IP address... if ncip isn't set to a broadcast address, only listen to the client at ncip.
Signed-off-by: Joe Hershberger joe.hershberger@ni.com ---
drivers/net/netconsole.c | 8 ++++++-- include/net.h | 3 ++- net/net.c | 1 + 3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 2e25fd5..b0cc81c 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -138,13 +138,17 @@ void NcStart(void) } }
-int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len) +int nc_input_packet(uchar *pkt, IPaddr_t src_ip, unsigned dest_port, + unsigned src_port, unsigned len) { int end, chunk;
- if (dest != nc_in_port || !len) + if (dest_port != nc_in_port || !len) return 0; /* not for us */
+ if (src_ip != nc_ip && !is_broadcast(nc_ip)) + return 0; /* not from our client */ + debug_cond(DEBUG_DEV_PKT, "input: "%*.*s"\n", len, len, pkt);
if (input_size == sizeof(input_buffer)) diff --git a/include/net.h b/include/net.h index 6d2d6cd..f0cf2ee 100644 --- a/include/net.h +++ b/include/net.h @@ -529,7 +529,8 @@ extern void NetReceive(uchar *, int);
#ifdef CONFIG_NETCONSOLE void NcStart(void); -int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len); +int nc_input_packet(uchar *pkt, IPaddr_t src_ip, unsigned dest_port, + unsigned src_port, unsigned len); #endif
/* diff --git a/net/net.c b/net/net.c index e8ff066..83fcbe5 100644 --- a/net/net.c +++ b/net/net.c @@ -1147,6 +1147,7 @@ NetReceive(uchar *inpkt, int len)
#ifdef CONFIG_NETCONSOLE nc_input_packet((uchar *)ip + IP_UDP_HDR_SIZE, + ntohl(ip->ip_src), ntohs(ip->udp_dst), ntohs(ip->udp_src), ntohs(ip->udp_len) - UDP_HDR_SIZE);