I am currently running into walls when trying to pop an mpls label with ovs.
I currently have two interfaces on one ovs instance connected to ports eth0 and eth1. I define a flow on eth0 to pop an mpls label (if it is present) and then output the packet to eth1. This looks like this (view from ovs-appctl bridge/dump-flows switch):
duration=1234s, n_packets=223806, n_bytes=15442614, priority=27000,mpls,in_port=1,mpls_label=1000,actions=pop_mpls:0x03e8,set_queue:1,output:2
I then receive packets on eth0 that look like this (output from tcpdump -i eth0):
MPLS (label 1000, exp 0, [S], ttl 64) IP 10.0.0.2.53578 > 10.0.0.8.888: UDP, length 23
The packets that are being sent away are invalid however (tcpdump -i eth1):
00:00:00:00:08:15 (oui Ethernet) Null > 00:00:00:00:08:20 (oui Ethernet) Unknown DSAP 0x44 Information, send seq 0, rcv seq 25, Flags [Poll], length 51 \ 0x0000: 4500 0033 a231 4000 4011 847f 0a00 0002 E..3.1@.@....... \ 0x0010: 0a00 0008 d14a 0378 001f 175a 6864 7366 .....J.x...Zhdsf \ 0x0020: 6b6a 7364 6b6a 666b 6a73 6466 6873 6b64 kjsdkjfkjsdfhskd \ 0x0030: 6a68 66 jhf
When decoding the part starting with 4500 from the output, I can see that the packet is indeed a IP > UDP packet with the correct content.
Here is a hex decode of said (or maybe another packet - still same outcome): https://hpd.gasmi.net/?data=45000033394840004011ED680A0000020A000008D14A0378001F175A686473666B6A73646B6A666B6A73646668736B646A6866&force=ipv4
The resulting packet seems to be invalid however, because it is discarded by the receiving host (without any firewall rules) before reaching a python udp server listening on port 888.
What am I doing wrong? Do I need to modify my flow to somehow add back valid DSAP information?