diff --git a/src/net/arp.c b/src/net/arp.c index 9b5fd220..565eaf01 100644 --- a/src/net/arp.c +++ b/src/net/arp.c @@ -234,7 +234,7 @@ static int arp_rx ( struct io_buffer *iobuf, struct net_device *netdev, goto done; /* Create new ARP table entry if necessary */ - if ( ! merge ) { + if ( ( arphdr->ar_op == htons ( ARPOP_REPLY ) ) && (! merge ) ) { arp = &arp_table[next_new_arp_entry++ % NUM_ARP_ENTRIES]; arp->ll_protocol = ll_protocol; arp->net_protocol = net_protocol; diff --git a/src/net/icmp.c b/src/net/icmp.c index 84dad425..aad4586f 100644 --- a/src/net/icmp.c +++ b/src/net/icmp.c @@ -69,11 +69,12 @@ static int icmp_rx ( struct io_buffer *iobuf, struct sockaddr_tcpip *st_src, } /* We respond only to pings */ - if ( icmp->type != ICMP_ECHO_REQUEST ) { + /* Don't bother responding to ping, it's above what most do and the neighbor table is preciously small here */ + /* if ( icmp->type != ICMP_ECHO_REQUEST ) { */ DBG ( "ICMP ignoring type %d\n", icmp->type ); rc = 0; goto done; - } + /* } */ DBG ( "ICMP responding to ping\n" ); diff --git a/src/net/tcp.c b/src/net/tcp.c index 3e1aeedc..39d5e0c5 100644 --- a/src/net/tcp.c +++ b/src/net/tcp.c @@ -1120,7 +1120,8 @@ static int tcp_rx ( struct io_buffer *iobuf, /* If no connection was found, send RST */ if ( ! tcp ) { - tcp_xmit_reset ( tcp, st_src, tcphdr ); + /* Transmitting RST costs precious neighbor table space, and this is no worse than most boot roms */ + /* tcp_xmit_reset ( tcp, st_src, tcphdr ); */ rc = -ENOTCONN; goto discard; }