git: 9front

Download patch

ref: 02ba2ea11b7f963c28da8a774bf3cd07da02e213
parent: cb64eaae6266aa32d2fc4cde03c5b8682e06519a
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Jan 13 02:16:17 EST 2018

ether82557: don't turn off promisc mode when mcast table is not empty

the driver doesnt implement multicast filter, but just turns
on promiscuous mode when a multicast address is added. but this
breaks when one actually enables and then disables promiscuous
mode with say, running snoopy.

we have to keep promisc mode active as long as multicast table
is not empty.

--- a/sys/src/9/pc/ether82557.c
+++ b/sys/src/9/pc/ether82557.c
@@ -588,20 +588,15 @@
 static void
 promiscuous(void* arg, int on)
 {
-	configure(arg, on);
+	Ether *ether = arg;
+	configure(ether, on || ether->nmaddr > 0);
 }
 
 static void
-multicast(void* ether, uchar *addr, int add)
+multicast(void* arg, uchar *, int)
 {
-	USED(addr);
-	/*
-	 * TODO: if (add) add addr to list of mcast addrs in controller
-	 *	else remove addr from list of mcast addrs in controller
-	 * enable multicast input (see CbMAS) instead of promiscuous mode.
-	 */
-	if (add)
-		configure(ether, 1);
+	Ether *ether = arg;
+	configure(ether, ether->prom || ether->nmaddr > 0);
 }
 
 static void
--