On Tue, May 12, 2015 at 01:34:20PM +0200, Martin Pieuchot wrote:
> There's only one "#if NTRUNK" left in the tree, this diff gets rid of it
> by overwriting trunk ports' if_output().
> 
> ok?

Looks good to me. Lets try to layer stuff properly. OK claudio@
 
> Index: net/if_ethersubr.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_ethersubr.c,v
> retrieving revision 1.196
> diff -u -p -r1.196 if_ethersubr.c
> --- net/if_ethersubr.c        11 May 2015 08:41:43 -0000      1.196
> +++ net/if_ethersubr.c        12 May 2015 11:29:20 -0000
> @@ -87,8 +87,6 @@ didn't get a copy, you may request one f
>  #include <sys/syslog.h>
>  #include <sys/timeout.h>
>  
> -#include <crypto/siphash.h>  /* required by if_trunk.h */
> -
>  #include <net/if.h>
>  #include <net/netisr.h>
>  #include <net/route.h>
> @@ -127,11 +125,6 @@ didn't get a copy, you may request one f
>  #include <net/if_pppoe.h>
>  #endif
>  
> -#include "trunk.h"
> -#if NTRUNK > 0
> -#include <net/if_trunk.h>
> -#endif
> -
>  #ifdef INET6
>  #include <netinet6/in6_var.h>
>  #include <netinet6/nd6.h>
> @@ -273,13 +266,6 @@ ether_output(struct ifnet *ifp0, struct 
>                   ifp->if_rdomain, rtable_l2(m->m_pkthdr.ph_rtableid),
>                   dst->sa_family);
>       }
> -#endif
> -
> -#if NTRUNK > 0
> -     /* restrict transmission on trunk members to bpf only */
> -     if (ifp->if_type == IFT_IEEE8023ADLAG &&
> -         (m_tag_find(m, PACKET_TAG_DLT, NULL) == NULL))
> -             senderr(EBUSY);
>  #endif
>  
>       esrc = ac->ac_enaddr;
> Index: net/if_trunk.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_trunk.c,v
> retrieving revision 1.96
> diff -u -p -r1.96 if_trunk.c
> --- net/if_trunk.c    11 May 2015 08:41:43 -0000      1.96
> +++ net/if_trunk.c    12 May 2015 11:28:39 -0000
> @@ -66,6 +66,8 @@ void         trunk_port_watchdog(struct ifnet *
>  void  trunk_port_state(void *);
>  void  trunk_port_ifdetach(void *);
>  int   trunk_port_ioctl(struct ifnet *, u_long, caddr_t);
> +int   trunk_port_output(struct ifnet *, struct mbuf *, struct sockaddr *,
> +         struct rtentry *);
>  struct trunk_port *trunk_port_get(struct trunk_softc *, struct ifnet *);
>  int   trunk_port_checkstacking(struct trunk_softc *);
>  void  trunk_port2req(struct trunk_port *, struct trunk_reqport *);
> @@ -75,6 +77,7 @@ int  trunk_ether_delmulti(struct trunk_s
>  void  trunk_ether_purgemulti(struct trunk_softc *);
>  int   trunk_ether_cmdmulti(struct trunk_port *, u_long);
>  int   trunk_ioctl_allports(struct trunk_softc *, u_long, caddr_t);
> +int   trunk_input(struct mbuf *, void *);
>  void  trunk_start(struct ifnet *);
>  void  trunk_init(struct ifnet *);
>  void  trunk_stop(struct ifnet *);
> @@ -354,6 +357,9 @@ trunk_port_create(struct trunk_softc *tr
>       trunk_ifih->ifih_input = trunk_input;
>       SLIST_INSERT_HEAD(&ifp->if_inputs, trunk_ifih, ifih_next);
>  
> +     tp->tp_output = ifp->if_output;
> +     ifp->if_output = trunk_port_output;
> +
>       ifp->if_tp = (caddr_t)tp;
>       tp->tp_ioctl = ifp->if_ioctl;
>       ifp->if_ioctl = trunk_port_ioctl;
> @@ -450,6 +456,7 @@ trunk_port_destroy(struct trunk_port *tp
>  
>       ifp->if_watchdog = tp->tp_watchdog;
>       ifp->if_ioctl = tp->tp_ioctl;
> +     ifp->if_output = tp->tp_output;
>       ifp->if_tp = NULL;
>  
>       hook_disestablish(ifp->if_linkstatehooks, tp->lh_cookie);
> @@ -563,6 +570,20 @@ trunk_port_ioctl(struct ifnet *ifp, u_lo
>               error = (*tp->tp_ioctl)(ifp, cmd, data);
>  
>       return (error);
> +}
> +
> +int
> +trunk_port_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
> +    struct rtentry *rt)
> +{
> +     /* restrict transmission on trunk members to bpf only */
> +     if (ifp->if_type == IFT_IEEE8023ADLAG &&
> +         (m_tag_find(m, PACKET_TAG_DLT, NULL) == NULL)) {
> +             m_freem(m);
> +             return (EBUSY);
> +     }
> +
> +     return (ether_output(ifp, m, dst, rt));
>  }
>  
>  void
> Index: net/if_trunk.h
> ===================================================================
> RCS file: /cvs/src/sys/net/if_trunk.h,v
> retrieving revision 1.20
> diff -u -p -r1.20 if_trunk.h
> --- net/if_trunk.h    11 May 2015 08:41:43 -0000      1.20
> +++ net/if_trunk.h    12 May 2015 11:28:39 -0000
> @@ -141,6 +141,8 @@ struct trunk_port {
>       /* Redirected callbacks */
>       void    (*tp_watchdog)(struct ifnet *);
>       int     (*tp_ioctl)(struct ifnet *, u_long, caddr_t);
> +     int     (*tp_output)(struct ifnet *, struct mbuf *, struct sockaddr *,
> +                 struct rtentry *);
>  
>       SLIST_ENTRY(trunk_port)         tp_entries;
>  };
> 

-- 
:wq Claudio

Reply via email to