[undi] Ask for promiscuous packet reception when using UNDI driver
authorMichael Brown <mcb30@etherboot.org>
Tue, 10 Jun 2008 07:56:44 +0000 (08:56 +0100)
committerMichael Brown <mcb30@etherboot.org>
Tue, 10 Jun 2008 07:56:44 +0000 (08:56 +0100)
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

index 512c60e..09c29ab 100644 (file)
@@ -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;