> Until recently
> (https://github.com/openbsd/src/commit/dc68b945bbc883db108ac48a07bb89
> 778b75582a)
> bridge did split horizon detection by not allowing you to send
> between
> two mpw interfaces. In the case of a single VPLS this is the correct
> thing, but more generally it isn't quite right. Particularly when you
> want to bridge two seperate VPLS's. It's been removed now, and to
> achieve proper VPLS functionality with the change applied I found I
> had
> to add all mpw interfaces in the same VPLS to the same protected
> domain.
> 
> If you update to current your config will probably work, but be
> mindful
> that for a full mesh VPLS if you don't put them in a protected domain
> you'll probably get a full mesh of broadcasts.

Thanks.  Your advice on upgrading the OS along with a hack of my own
got me to a working state, but it isn't a sustainable or stable state.
I installed the March 31 snapshot and the split-horizon problem was
resolved.  However, there is still a problem with arp (and probably all
broadcast traffic, but I never get past arp).  If I create a static arp
for rtr01 on rtr02 and rtr02 on rtr01, then everything else works. I
can send traffic back and forth between routers over the pseudowires.
This is a hack that works for now, but it's not really a solution.

First of all the protected domain seems to do the opposite of what I
need, but it may only appear to be the case because of the strageness
with broadcast.  When trying to ping (or send any traffic) between
rtr01 and rtr02 and the two mpw2's are in the same protected domain,
the arp requests die in the bridge.  The arp never shows up at all on
the other mpw. If I remove the mpw's from the protected domain, then
the arp traffic gets through to the other mpw, but it doesn't get sent
out properly by MPLS.  It's sent out as MPLS broadcast traffic
originating on the physical ethernet interface but with the right label
for the pseudowire. Even though the arp request itself is broadcast
traffic, I would expect it to be encapsulated in a unicast MPLS packet
which is sent from the MAC of the bridge or the originating router and
and sent as unicast to the destination router with the pseudowire's
label.  As it is now, even if the destination router could figure out
what to do with these MPLS broadcast packets, it would respond to the
physical interface and not the bridge.

Without the protected domain, this is what I see on both mpw
interfaces:
  11   4.015737 02:3b:c0:60:4c:95 ? ff:ff:ff:ff:ff:ff ARP 42 Who has
192.168.99.2? Tell 192.168.99.3
   12   4.015751 02:3b:c0:60:4c:95 ? ff:ff:ff:ff:ff:ff ARP 42 Who has
192.168.99.2? Tell 192.168.99.3
   13   5.015772 02:3b:c0:60:4c:95 ? ff:ff:ff:ff:ff:ff ARP 42 Who has 

With the protected domain, I only see these packets on the incoming
mpw.

The destination router sees this:
189     15.137231       6c:b3:11:4b:07:d4       ff:ff:ff:ff:ff:ff       
MPLS    60      MPLS Label Switched Packet
202     16.161025       6c:b3:11:4b:07:d4       ff:ff:ff:ff:ff:ff       
MPLS    60      MPLS Label Switched Packet
213     17.157232       6c:b3:11:4b:07:d4       ff:ff:ff:ff:ff:ff       
MPLS    60      MPLS Label Switched Packet

02:3b:c0:60:4c:95 is the originating router.
6c:b3:11:4b:07:d4 is the physical interface facing the destination
router

By examining the MPLS packets I could see they were being sent to the
right label.  I haven't figured out how to decode the payload, but it's
42 bytes which is the exact same length as the inbound arp packets.

Maybe I'm making wrong assumptions here.  I would expect that either
the bridge does proxy arp or that the bridge would re-encapsulate
broadcast packets back into unicast MPLS/VPLS packets on the pseudwire
which then gets unencapsulated by the destination router and treated as
broadcast there. Meanwhile, of course, it would also broadcast that
same arp request out any other interface in the same bridge.

Reply via email to