Hi,
we need to POP out two MPLS labels in an egress node and then send out
the packet as plain IP packet, but apparently this is not working in
Open vSwitch v2.390 operating in kernel mode
We have replicated the problem in a simple mininet setup (script
attached) with four nodes connected as follows:
h1---peo1----peo2---h2
h1 source node, peo1 ingress node, peo2 egress node, h2 dest node
- h1 pings h2 (automatic static arp table are used, so there is no ARP)
- peo1 pushes two mpls labels in the packet
- peo2 is supposed to pop the two labels and forward the packet as IP
we have a rule to match the outer label, POP it and resubmit as MPLS packet:
actions=pop_mpls:0x8847,resubmit(,1)
then we have a rule to match the inner label, POP it and output on a
port as an IP packet:
actions=pop_mpls:0x0800,output:11
both rules match (and the first pop works), but then the packet
does not exit from the port 11
we have also tried without success to recirculate the packet implicitly
after the first pop, replacing the first action with:
actions=pop_mpls:0x8847
Can anyone help us to identify the problem ? Are we doing something
wrong or is it a bug?
The mininet script to setup the topology and create the rules in order
to reproduce the problem is attached.
Some details are reported hereafter for the scenario with explicit resubmit.
thank you in advance for your help...
ciao
Stefano
- peo1 flow table
OFPST_FLOW reply (OF1.3) (xid=0x2):
duration=275.553s, table=0, n_packets=58, n_bytes=5684,ip,in_port=2
actions=push_mpls:0x8847,set_field:262144->mpls_label,push_mpls:0x8847,set_field:524292->mpls_label,goto_table:1
duration=275.493s,table=1,n_packets=58,n_bytes=5684,mpls,in_port=2,mpls_label=524292
actions=output:1
- peo2 flow table
OFPST_FLOW reply (OF1.3) (xid=0x2):
duration=317.678s,table=0,n_packets=58,n_bytes=6148,mpls,in_port=1
actions=goto_table:1
duration=317.618s,table=1,n_packets=58,n_bytes=6148,mpls,in_port=1,mpls_label=524292
actions=pop_mpls:0x8847,resubmit(,1)
duration=317.559s,table=1,n_packets=58,n_bytes=6148,mpls,in_port=1,mpls_label=262144,mpls_bos=1
actions=pop_mpls:0x0800,output:2
NB If the interfaces created by Mininet in the root namespace happen to
be down, stop the Network Manager and then restart the experiment
--
*******************************************************************
Stefano Salsano
Professore Associato
Dipartimento Ingegneria Elettronica
Universita' di Roma Tor Vergata
Via del Politecnico, 1 - 00133 Roma - ITALY
http://netgroup.uniroma2.it/Stefano_Salsano/
E-mail : [email protected]
Cell. : +39 320 4307310
Office : (Tel.) +39 06 72597770 (Fax.) +39 06 72597435
*******************************************************************
#!/usr/bin/python
import subprocess
from mininet.net import Mininet
from mininet.node import Host, OVSKernelSwitch, Node
from mininet.cli import CLI
from mininet.log import lg, info
def setup():
lg.setLogLevel('info')
net = Mininet(switch=OVSKernelSwitch, build=False, autoStaticArp=True )
host1 = net.addHost("h1")
host2 = net.addHost("h2")
peo1 = net.addSwitch("peo1")
peo2 = net.addSwitch("peo2")
net.addLink(peo1, peo2) # 1 | 1
net.addLink(host1, peo1)# N/A | 2
net.addLink(host2, peo2)# N/A | 2
net.start()
#PEO1 Configuration
root = Node( 'root', inNamespace=False )
root.cmd('ovs-vsctl --no-wait set bridge %s protocols=OpenFlow13' %(peo1.name))
root.cmd('ovs-ofctl -O OpenFlow13 add-flow %s "table=0,hard_timeout=0,priority=32768,in_port=2,eth_type=0x800,actions=push_mpls:0x8847,set_field:262144->mpls_label,push_mpls:0x8847,set_field:524292->mpls_label,goto_table:1"' %(peo1.name))
root.cmd('ovs-ofctl -O OpenFlow13 add-flow %s "table=1,hard_timeout=0,priority=32768,in_port=2,eth_type=0x8847,mpls_label=524292,action=output:1"' %(peo1.name))
#PEO2 Configuration
root.cmd('ovs-vsctl --no-wait set bridge %s protocols=OpenFlow13' %(peo2.name))
root.cmd('ovs-ofctl -O OpenFlow13 add-flow %s "table=0,hard_timeout=0,priority=32768,in_port=1,eth_type=0x8847,actions=goto_table=1"' %(peo2.name))
root.cmd('ovs-ofctl -O OpenFlow13 add-flow %s "table=1,hard_timeout=0,priority=32768,in_port=1,eth_type=0x8847,mpls_label=524292,action=pop_mpls:0x8847,resubmit(,1)"' %(peo2.name))
root.cmd('ovs-ofctl -O OpenFlow13 add-flow %s "table=1,hard_timeout=0,priority=32768,in_port=1,eth_type=0x8847,mpls_label=262144,mpls_bos=1,action=pop_mpls:0x800,output:2"' %(peo2.name))
CLI(net)
net.stop()
subprocess.call(["sudo", "mn", "-c"], stdout=None, stderr=None)
if __name__ == '__main__':
setup()
_______________________________________________
discuss mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/discuss