On 29/05/2016 21:53, Maurice Janssen wrote:
> Hi,
>
> I'm trying to replace a PC Engines Alix board with an APU 2c4 board, but
> I'm having some issues to get it up and running.
> I have a fiber connection and my ISP requires a PPPoE connection over
> VLAN 6.
>
> With the old setup, this works like a charm.
> With the new setup, I can't get the PPPoE connection to work.
> When I use tcpdump on the ethernet interface, I can see the PADI packets
> leave the system on VLAN6, but there is no answer at all. OpenBSD keeps
> sending a PADI every minute or so, to no avail.
>
> I have tried to get it running with 5.9-stable (amd64), with a recent
> snapshot (amd64), with 5.9-stable (i386, as that works fine on the
> Alix), but none of them work.
>
> When I have a working connection on the old router and then quickly move
> the cable (the one that is connected to the fiber/copper converter) to
> the new router, I can see some packets (belonging to the 'old' PPPoE
> connection) arriving on the new router (with tcpdump). So at the
> ethernet level the link is OK.
>
> Does anyone have a clue what could be causing this? Some VLAN-tagging
> issue with the I210 NIC on the APU? Does anyone have a similar setup
> working?
>
> Thanks a lot in advance,
> Maurice
>
Hi
I have a similar setup. For me the problem was that the provider did not
accept vlan packages with a prio value other than 0.
Unfortunately, if that's the problem for you too, it can't be fixed by
configuration. You will have to compile a new kernel.
The following patch will make the prio field always be 0, that solved it
for me.
Index: sys/net/if_vlan.c
===================================================================
RCS file: /cvs/src/sys/net/if_vlan.c,v
retrieving revision 1.151
diff -u -p -r1.151 if_vlan.c
--- sys/net/if_vlan.c 13 Jan 2016 03:18:26 -0000 1.151
+++ sys/net/if_vlan.c 30 May 2016 05:22:08 -0000
@@ -270,8 +270,7 @@ vlan_start(struct ifnet *ifp)
*/
} else if ((p->if_capabilities & IFCAP_VLAN_HWTAGGING) &&
(ifv->ifv_type == ETHERTYPE_VLAN)) {
- m->m_pkthdr.ether_vtag = ifv->ifv_tag +
- (prio << EVL_PRIO_BITS);
+ m->m_pkthdr.ether_vtag = ifv->ifv_tag;
m->m_flags |= M_VLANTAG;
} else {
struct ether_vlan_header evh;
@@ -279,8 +278,7 @@ vlan_start(struct ifnet *ifp)
m_copydata(m, 0, ETHER_HDR_LEN, (caddr_t)&evh);
evh.evl_proto = evh.evl_encap_proto;
evh.evl_encap_proto = htons(ifv->ifv_type);
- evh.evl_tag = htons(ifv->ifv_tag +
- (prio << EVL_PRIO_BITS));
+ evh.evl_tag = htons(ifv->ifv_tag);
m_adj(m, ETHER_HDR_LEN);
M_PREPEND(m, sizeof(evh), M_DONTWAIT);
if (m == NULL) {
Daniel