-
Notifications
You must be signed in to change notification settings - Fork 140
OpenFlowMPLSSwitch
- Status :
- Version :
- Author :
Verilog Code (08/02/10)
Just Bit File. (08/02/2010)
For more information about the kernel module that can be used along with this NetFPGA bitfile, visit OpenFlow Wiki
Learn about OpenFlow here.
we extended OpenFlow to support MPLS. In the NetFPGA version of this work, we added flow table matching and rewrite action for up to two MPLS headers, so instead of standard 10 tupels, now we have 12 tupels.
We also added two actions for rewriting exp bits for each of these MPLS headers.
Because Push and Pop are not native OpenFlow actions, we added support for push and pop via Virtual Ports: instead of forwarding packets to a physical port, we can send them to a virtual port that can perform push or pop operation. We can cascade up to two virtual ports of the same type together. The last virtual port should be cascade to a physical port for sending the packet out.
Push virtual port can take care of the following:
- Making an MPLS header and pushing it to the stack.
- Copying TTL from previous MPLS header or IP header.
- Copying EXP bits from previous MPLS header or from IP ToS bits.
- Decrementing TTL value of the last MPLS header.
- Popping off the Top of The Stack MPLS header.
- Copying TTL from the currently popping MPLS header to previous MPLS header or to IP header.
- Copying EXP bits from the currently popping MPLS header to previous MPLS header or to IP ToS bits.
- Decrementing TTL value of the last MPLS header.
- Not doing any Pop action!!! this is useful when we just want to decrement MPLS TTL value. Packet can be forwarded to a Pop virtual port and the virtual port can do nothing, but decrementing the TTL.
Other than the limitation that comes from design (e.g. two layers of cascading of virtual ports, ...) there are these limitations in the OpenFlow-MPLS NetFPGA design that some of which will be resolved in the next release:
- Virtual Port Counters. [Adding]
- Supporting Virtual Ports both at software and hardware at the same time: Unlike flow table entries, that have a chain of tables (hardware and software), virtual ports don't have a chain table and are only supported at hardware (or only in software when running kernel space software switch).
To run regression tests, we need a two port nic (say eth1 and eth2) where eth1 is connected to nf2c0 and eth2 is connected to nf2c1. Packet are being sent out from one port and received on the other port. Change the regression tests scripts to reflect your port's namings, then run them.