net: Use NULL to signal lack of promisc/multicast
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 14 Feb 2017 17:28:27 +0000 (12:28 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 14 Feb 2017 17:28:27 +0000 (12:28 -0500)
The network stack is designed such that the absence of a function pointer
for promisc or multicast means "unsupported."  We should do that instead of
adding functions that just throw errors.

This is necessary for snoopy and promisc mode.  Promisc for devether is
both "give me all packets" (aka, actually promiscuous) and "give me packets
I sent."  snoopy requires the latter, even if the NIC can't support the
former.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/net/bnx2x/bnx2x_dev.c
kern/drivers/net/mlx4/main.c
kern/src/net/netif.c

index bcf7415..fa9ad01 100644 (file)
@@ -118,29 +118,6 @@ static long bnx2x_ctl(struct ether *edev, void *buf, long n)
        return n;
 }
 
-static void bnx2x_promiscuous(void *arg, int on)
-{
-       int rctl;
-       struct bnx2x *ctlr;
-       struct ether *edev;
-
-       edev = arg;
-       ctlr = edev->ctlr;
-       /* TODO: set promisc on/off */
-       error(EFAIL, "bnx2x promiscuous mode not supported");
-}
-
-static void bnx2x_multicast(void *arg, uint8_t * addr, int add)
-{
-       int bit, x;
-       struct bnx2x *ctlr;
-       struct ether *edev;
-
-       edev = arg;
-       ctlr = edev->ctlr;
-       /* TODO: add or remove a multicast addr */
-}
-
 /* The poke function: we are guaranteed that only one copy of this func runs
  * per poke tracker (per queue).  Both transmit and tx_int will poke, and after
  * any pokes, the func will run at least once.
@@ -479,8 +456,8 @@ static int bnx2x_pnp(struct ether *edev)
        edev->shutdown = bnx2x_shutdown;
 
        edev->arg = edev;
-       edev->promiscuous = bnx2x_promiscuous;
-       edev->multicast = bnx2x_multicast;
+       edev->promiscuous = NULL;
+       edev->multicast = NULL;
 
        bnx2x_reset(ctlr);
 
index e4f7c49..3cf3c8c 100644 (file)
@@ -3899,21 +3899,6 @@ static void ether_shutdown(struct ether *edev)
        panic("Not implemented");
 }
 
-static void ether_promiscuous(void *arg, int on)
-{
-       struct ether *edev;
-
-       edev = arg;
-       /* TODO: set promisc on/off */
-       error(EFAIL, "mlx4 promiscuous mode not supported");
-}
-
-static void ether_multicast(void *arg, uint8_t *addr, int add)
-{
-       struct ether *edev = arg;
-       panic("Not implemented");
-}
-
 /* Called by devether's probe routines.  Return -1 if the edev does not match
  * any of your ctlrs. */
 static int mlx4_pnp(struct ether *edev)
@@ -3988,8 +3973,8 @@ static int mlx4_pnp(struct ether *edev)
        edev->shutdown = ether_shutdown;
 
        edev->arg = edev;
-       edev->promiscuous = ether_promiscuous;
-       edev->multicast = ether_multicast;
+       edev->promiscuous = NULL;
+       edev->multicast = NULL;
 
        return 0;
 }
index 4f348a4..89567ab 100644 (file)
@@ -405,6 +405,8 @@ long netifwrite(struct ether *nif, struct chan *c, void *a, long n)
                        nif->all++;
        } else if (matchtoken(buf, "promiscuous")) {
                if (f->prom == 0) {
+                       /* Note that promisc has two meanings: put the NIC into promisc
+                        * mode, and record our outbound traffic.  See etheroq(). */
                        if (nif->prom == 0 && nif->promiscuous != NULL)
                                nif->promiscuous(nif->arg, 1);
                        f->prom = 1;