On Sun, Jan 10, 2016 at 05:58:13PM +0100, Denis Fondras wrote:
> On Sun, Jan 10, 2016 at 03:42:34PM +0000, Christian Weisgerber wrote:
> > You don't actually describe your interface configuration.  I _guess_
> > you are trying to terminate IP traffic directly on an svlan(4)
> > interface.  That sounds very unusual.
> > 
> 
> Sorry, the configuration is actually :
> /etc/hostname.em1 :
> up
> 
> /etc/hostname.svlan1003 :
> vlandev em1
> inet 100.67.233.1/30
> up
> !route add 185.22.128.252/30 100.67.233.2
> 
> Network diagram :
> OpenBSD(vlanid:1003) ---- Switch ---- (vlanid:1003)router --- 
> client(185.22.128.253)
> 
> > I can see why it might fail.  Since svlan(4) encapsulation is not
> > covered by the hardware VLAN support, it changes the offsets to the
> > IP/TCP headers, which is something the em(4) driver doesn't handle.
> > 
> 
> Thank you for the insight.

naddy is right, the extre header confuses things. i just rewrote
vlan(4) and thought this could happen.

this is a minimal diff that should work.

can you try this and see?

Index: if_vlan.c
===================================================================
RCS file: /cvs/src/sys/net/if_vlan.c,v
retrieving revision 1.150
diff -u -p -r1.150 if_vlan.c
--- if_vlan.c   8 Dec 2015 11:35:42 -0000       1.150
+++ if_vlan.c   11 Jan 2016 00:07:20 -0000
@@ -430,24 +430,24 @@ vlan_config(struct ifvlan *ifv, struct i
                vlan_set_promisc(&ifv->ifv_if);
        }
 
-       /*
-        * If the parent interface can do hardware-assisted
-        * VLAN encapsulation, then propagate its hardware-
-        * assisted checksumming flags.
-        *
-        * If the card cannot handle hardware tagging, it cannot
-        * possibly compute the correct checksums for tagged packets.
-        */
-       if (p->if_capabilities & IFCAP_VLAN_HWTAGGING)
+       if (ifv->ifv_type != ETHERTYPE_VLAN) {
+               /*
+                * Hardware VLAN tagging only works with the default VLAN
+                * ethernet type (0x8100).
+                */
+               ifv->ifv_if.if_capabilities = 0;
+       } else if (p->if_capabilities & IFCAP_VLAN_HWTAGGING) {
+               /*
+                * If the parent interface can do hardware-assisted
+                * VLAN encapsulation, then propagate its hardware-
+                * assisted checksumming flags.
+                *
+                * If the card cannot handle hardware tagging, it cannot
+                * possibly compute the correct checksums for tagged packets.
+                */
                ifv->ifv_if.if_capabilities = p->if_capabilities &
                    IFCAP_CSUM_MASK;
-
-       /*
-        * Hardware VLAN tagging only works with the default VLAN
-        * ethernet type (0x8100).
-        */
-       if (ifv->ifv_type != ETHERTYPE_VLAN)
-               ifv->ifv_if.if_capabilities &= ~IFCAP_VLAN_HWTAGGING;
+       }
 
        /*
         * Set up our ``Ethernet address'' to reflect the underlying

Reply via email to