The following mails will contain patchs that implement the VPLS datapath in OpenBSD. Applying all patchs should allow people to configure a network using VPLS manually.
The first patch prepares the system sources to receive the wire implementation: it turns some mpe specific code into some generic functions that we will be using in wire and mpe. The second patch implements the wire datapath itself, with that we should be able to create a pseudo device that will handle the VPLS labels and control words. Yet, it is still missing the ethernet-vlan mode. The third and last patch implements wire specific handling in ifconfig, like: showing wire configuration and doing the wire configuration. How to use: * Create a MPLS network. Example: http://2011.eurobsdcon.org/papers/jeker/MPLS.pdf * Create a pseudowire in both ends of your network (PEs) # ifconfig wire<number> encap ethernet wirelabel <local label> \ <remote label> neighbor <other PE address> <controlword> up # ifconfig wire0 encap ethernet wirelabel 500 500 neighbor 1.2.3.4 up or # ifconfig wire0 encap ethernet wirelabel 500 500 neighbor 1.2.3.4 \ controlword up * Create a bridge between the interface facing your customer (CE) and your wireX, also in both PEs you are configuring the VPN. Now every time a packet comes through the client interface it will be encapsulated by the wire interface with a new ethernet frame and will be sent to the neighbor PE configured. When it reaches the destination PE the packet will be removed from the frame and sent out as it entered the first PE. NOTE: there is a LDPd protocol implementation for VPLS/VPWS ongoing by Renato that might be coming anytime soon. Also, thanks to Renato for the help and input :) . Comments and advices are highly welcomed. TODO list: * interface configuration code - SIOCSETWIRECFG / SIOCGETWIRECFG (DONE) * add / remove wire label (DONE) * add / remove wire control label (DONE) * ethernet-vlan support (WIP) * ifconfig(8) integration ** show wire configuration (DONE) ** configure wire (DONE) * man page: ** wire(4) (TODO) ** ifconfig(8) (TODO)