Also:
   http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/67823
It was send by my friend, and his server runs with this patch.
I guess that it should be idential to what you send here. If not
you may contact him and ask to try your one.

   By the way, I thought that should be better solution. For
example, why not to tag packets if they already checksumed
or not?

rik

Bruce M Simpson:

Here is a somewhat improved patch for tweaking the behaviour of the bridge
code with respect to disabling the hardware-assist-checksum features of
driver instances which are members of the bridge.

I don't make use of the bridge code so I'd appreciate it if others who do
could test this patch.

To disable *all* capabilities, setting net.link.ether.bridge.hwassmask to
0 should suffice.

Regards,
BMS


------------------------------------------------------------------------

This patch implements a sysctl MIB variable, net.link.ether.bridge.hwassmask,
which may be used to specify a bitmask which is applied to each member
interface of a bridge to selectively disable interface hardware assist
capabilities, and provides finer run-time control over such behaviour.

Index: bridge.c
===================================================================
RCS file: /home/ncvs/src/sys/net/bridge.c,v
retrieving revision 1.79
diff -u -p -r1.79 bridge.c
--- bridge.c    15 Jun 2004 23:57:41 -0000      1.79
+++ bridge.c    3 Jul 2004 17:33:47 -0000
@@ -204,6 +204,10 @@ SYSCTL_NODE(_net_link_ether, OID_AUTO, b
static char bridge_version[] = "031224";
SYSCTL_STRING(_net_link_ether_bridge, OID_AUTO, version, CTLFLAG_RD,
        bridge_version, 0, "software version");
+static u_long bridge_hwassmask = 0xFFFFFFFFUL;
+SYSCTL_ULONG(_net_link_ether_bridge, OID_AUTO, hwassmask, CTLFLAG_RW,
+       &bridge_hwassmask, 0,
+       "Mask to apply to if_hwassist field for bridge interfaces");

#define BRIDGE_DEBUG
#ifdef BRIDGE_DEBUG
@@ -391,6 +395,7 @@ bridge_off(void)

        if ( b->flags & IFF_BDG_PROMISC ) {
            ifpromisc(ifp, 0);
+           ifp->if_hwassist = b->hwassist;
            b->flags &= ~(IFF_BDG_PROMISC|IFF_MUTE) ;
            DPRINTF(("%s: %s promisc OFF if_flags 0x%x "
                "bdg_flags 0x%x\n", __func__, ifp->if_xname,
@@ -433,6 +438,8 @@ bridge_on(void)
            if_up(ifp);
        }
        if ( !(b->flags & IFF_BDG_PROMISC) ) {
+           b->hwassist = ifp->if_hwassist;
+           ifp->if_hwassist &= bridge_hwassmask;
            (void) ifpromisc(ifp, 1);
            b->flags |= IFF_BDG_PROMISC ;
            DPRINTF(("%s: %s promisc ON if_flags 0x%x bdg_flags 0x%x\n",
Index: bridge.h
===================================================================
RCS file: /home/ncvs/src/sys/net/bridge.h,v
retrieving revision 1.12
diff -u -p -r1.12 bridge.h
--- bridge.h    15 Nov 2002 00:00:14 -0000      1.12
+++ bridge.h    3 Jul 2004 17:26:44 -0000
@@ -48,6 +48,7 @@ struct bdg_softc {
#define IFF_MUTE        0x0002  /* mute this if for bridging.   */
#define IFF_USED        0x0004  /* use this if for bridging.    */
    struct cluster_softc *cluster;
+    u_long hwassist;           /* saved ifp->if_hwassist field */
} ;

extern struct bdg_softc *ifp2sc;


------------------------------------------------------------------------

_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"






_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to