From ecd93cfc116dd95864634b837e2b8dff09ae5dce Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 9 Mar 2016 00:40:38 +0000 Subject: [PATCH] [eoib] Silently ignore EoIB heartbeat packets Some EoIB implementations transmit a vendor-proprietary heartbeat packet on the same multicast group used to provide the EoIB broadcast domain. Silently ignore these heartbeat packets, to avoid cluttering up the network interface error statistics. Signed-off-by: Michael Brown --- src/drivers/net/eoib.c | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/drivers/net/eoib.c b/src/drivers/net/eoib.c index c5b2f5c7f..44eed4cc5 100644 --- a/src/drivers/net/eoib.c +++ b/src/drivers/net/eoib.c @@ -752,3 +752,48 @@ struct ib_driver eoib_driver __ib_driver = { .notify = eoib_notify, .remove = eoib_remove, }; + +/**************************************************************************** + * + * EoIB heartbeat packets + * + **************************************************************************** + */ + +/** + * Silently ignore incoming EoIB heartbeat packets + * + * @v iobuf I/O buffer + * @v netdev Network device + * @v ll_source Link-layer source address + * @v flags Packet flags + * @ret rc Return status code + */ +static int eoib_heartbeat_rx ( struct io_buffer *iobuf, + struct net_device *netdev __unused, + const void *ll_dest __unused, + const void *ll_source __unused, + unsigned int flags __unused ) { + free_iob ( iobuf ); + return 0; +} + +/** + * Transcribe EoIB heartbeat address + * + * @v net_addr EoIB heartbeat address + * @ret string "" + * + * This operation is meaningless for the EoIB heartbeat protocol. + */ +static const char * eoib_heartbeat_ntoa ( const void *net_addr __unused ) { + return ""; +} + +/** EoIB heartbeat network protocol */ +struct net_protocol eoib_heartbeat_protocol __net_protocol = { + .name = "EoIB", + .net_proto = htons ( EOIB_MAGIC ), + .rx = eoib_heartbeat_rx, + .ntoa = eoib_heartbeat_ntoa, +};