From 798ddf884f16caaa1a6a4547825831ffcd290c9e Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 10 Jun 2008 08:56:44 +0100 Subject: [PATCH] [undi] Ask for promiscuous packet reception when using UNDI driver We never set up specific multicast filters; native drivers will ask the card to receive all multicast packets. The only way to achieve this via the UNDI API is to enable promiscuous mode. --- src/arch/i386/drivers/net/undinet.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/arch/i386/drivers/net/undinet.c b/src/arch/i386/drivers/net/undinet.c index 512c60e9..09c29aba 100644 --- a/src/arch/i386/drivers/net/undinet.c +++ b/src/arch/i386/drivers/net/undinet.c @@ -543,9 +543,13 @@ static int undinet_open ( struct net_device *netdev ) { undinet_call ( undinic, PXENV_UNDI_SET_STATION_ADDRESS, &undi_set_address, sizeof ( undi_set_address ) ); - /* Open NIC */ + /* Open NIC. We ask for promiscuous operation, since it's the + * only way to ask for all multicast addresses. On any + * switched network, it shouldn't really make a difference to + * performance. + */ memset ( &undi_open, 0, sizeof ( undi_open ) ); - undi_open.PktFilter = ( FLTR_DIRECTED | FLTR_BRDCST ); + undi_open.PktFilter = ( FLTR_DIRECTED | FLTR_BRDCST | FLTR_PRMSCS ); if ( ( rc = undinet_call ( undinic, PXENV_UNDI_OPEN, &undi_open, sizeof ( undi_open ) ) ) != 0 ) goto err;