summaryrefslogtreecommitdiffstats
path: root/src/arch/i386/drivers/net/undinet.c
diff options
context:
space:
mode:
authorMichael Brown2008-06-10 09:56:44 +0200
committerMichael Brown2008-06-10 09:56:44 +0200
commit798ddf884f16caaa1a6a4547825831ffcd290c9e (patch)
tree3784af88720f3202c6b7e7eaf8e265bc9ca26c56 /src/arch/i386/drivers/net/undinet.c
parent[slam] Add Scalable Local Area Multicast (SLAM) protocol support (diff)
downloadipxe-798ddf884f16caaa1a6a4547825831ffcd290c9e.tar.gz
ipxe-798ddf884f16caaa1a6a4547825831ffcd290c9e.tar.xz
ipxe-798ddf884f16caaa1a6a4547825831ffcd290c9e.zip
[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.
Diffstat (limited to 'src/arch/i386/drivers/net/undinet.c')
-rw-r--r--src/arch/i386/drivers/net/undinet.c8
1 files 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;