The following reply was made to PR kern/138620; it has been noted by GNATS.

From: Ed Maste <[email protected]>
To: <[email protected]>, <[email protected]>
Cc:  
Subject: kern/138620 [patch] Sysctl for direct BPF writes to lagg child ports
Date: Tue, 1 May 2012 13:08:01 -0400

 --jRHKVT23PllUwdXP
 Content-Type: text/plain; charset="us-ascii"
 Content-Disposition: inline
 
 The attached patch adds a sysctl to enable or disable the behaviour
 you're looking for (direct BPF writes to the underlying lagg child
 ports).  I intend to commit it shortly after review / test.
 
 --jRHKVT23PllUwdXP
 Content-Type: text/plain; charset="us-ascii"
 Content-Disposition: attachment; filename="if_lagg.c.diff"
 
 Index: if_lagg.c
 ===================================================================
 --- if_lagg.c  (revision 234896)
 +++ if_lagg.c  (working copy)
 @@ -177,6 +177,10 @@
  SYSCTL_INT(_net_link_lagg, OID_AUTO, default_use_flowid, CTLFLAG_RW,
      &def_use_flowid, 0,
      "Default setting for using flow id for load sharing");
 +static int lagg_tx_child = 0; /* Direct tx to child interface */
 +SYSCTL_INT(_net_link_lagg, OID_AUTO, lagg_tx_child, CTLFLAG_RW,
 +    &lagg_tx_child, 0,
 +    "Allow direct writes to child ports (e.g. via BPF)");
  
  static int
  lagg_modevent(module_t mod, int type, void *data)
 @@ -764,6 +768,9 @@
        return (EINVAL);
  }
  
 +/*
 + * For direct output to child ports.
 + */
  static int
  lagg_port_output(struct ifnet *ifp, struct mbuf *m,
        struct sockaddr *dst, struct route *ro)
 @@ -775,6 +782,8 @@
        switch (dst->sa_family) {
                case pseudo_AF_HDRCMPLT:
                case AF_UNSPEC:
 +                      if (lagg_tx_child)
 +                              goto sendit;
                        eh = (struct ether_header *)dst->sa_data;
                        type = eh->ether_type;
                        break;
 @@ -786,12 +795,15 @@
         */
        switch (ntohs(type)) {
                case ETHERTYPE_PAE:     /* EAPOL PAE/802.1x */
 -                      return ((*lp->lp_output)(ifp, m, dst, ro));
 +                      goto sendit;
        }
  
        /* drop any other frames */
        m_freem(m);
        return (EBUSY);
 +
 +sendit:
 +      return ((*lp->lp_output)(ifp, m, dst, ro));
  }
  
  static void
 
 --jRHKVT23PllUwdXP--
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[email protected]"

Reply via email to