Stuart Henderson [[email protected]] wrote:
> On 2013/02/22 12:30, Stuart Henderson wrote:
> > I thought we already had something for this after the misc@ thread
> > a few months ago, but clearly not.
> > 
> > Adapted from FreeBSD if_lagg.c r171661 (which includes capability
> > setting which we already do).
> > http://svnweb.freebsd.org/base/head/sys/net/if_lagg.c?r1=171603&r2=171661
> 
> JJ tested this diff but I didn't hear much else. Any comments?

if (tr->tr_ac.ac_if.if_mtu != ifp->if_mtu) seems wrong. what about people
who want to use trunk between two totally different interfaces for failover?

i think the trunk mtu should simply be the lowest common of the group.

also with this implementation you need to destroy and re-create the trunk
group if you enlarge the mtus of members after the fact. that is
annoying but i'm not sure it's a problem worth fixing at first
revision.

> Currently it is not possible to use jumbo frames with trunk(4) interfaces.
> 
> 
> 
> Index: if_trunk.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_trunk.c,v
> retrieving revision 1.81
> diff -u -p -r1.81 if_trunk.c
> --- if_trunk.c        2 Apr 2013 08:54:37 -0000       1.81
> +++ if_trunk.c        10 May 2013 13:09:49 -0000
> @@ -313,6 +313,20 @@ trunk_port_create(struct trunk_softc *tr
>       if (ifp->if_type != IFT_ETHER)
>               return (EPROTONOSUPPORT);
>  
> +     /* Take MTU from the first member port */
> +     if (SLIST_EMPTY(&tr->tr_ports)) {
> +             if (tr->tr_ifflags & IFF_DEBUG)
> +                     printf("%s: first port, setting trunk mtu %u\n",
> +                         tr->tr_ifname, ifp->if_mtu);
> +             tr->tr_ac.ac_if.if_mtu = ifp->if_mtu;
> +             tr->tr_ac.ac_if.if_hardmtu = ifp->if_mtu;
> +     }
> +     else if (tr->tr_ac.ac_if.if_mtu != ifp->if_mtu) {
> +             printf("%s: adding %s failed, MTU %u != %u\n", tr->tr_ifname,
> +                 ifp->if_xname, ifp->if_mtu, tr->tr_ac.ac_if.if_mtu);
> +             return (EINVAL);
> +     }
> +
>       if ((error = ifpromisc(ifp, 1)) != 0)
>               return (error);
>  
> @@ -508,6 +522,10 @@ trunk_port_ioctl(struct ifnet *ifp, u_lo
>               }
>  
>               trunk_port2req(tp, rp);
> +             break;
> +     case SIOCSIFMTU:
> +             /* Do not allow the MTU to be changed once joined */
> +             error = EINVAL;
>               break;
>       default:
>               error = ENOTTY;

-- 
"What has two wheels and moves really fast?
Me! Holding two wheels"
-Mr. T, World's Craziest Fools

Reply via email to