So I wrote two custom netdev providers, one of them receives GRE encapsulated 
packets and passes them to OvS. These encapsulated packets have an outer 
ethernet header and ip header, a gre header and an inner ip and tcp header. I 
want OvS to create flow rules that match different fields in the inner and 
outer headers and perform different actions based on this and pass the packet 
to my second custom netdev provider. For example, suppose my custom netdev 
providers are identified by in_port=2 and in_port=3. I might want to add the 
following flow:

ovs-ofctl add-flow br0  "table=0, in_port=2, ip, nw_dst=10.0.0.1, 
tun_src=192.168.10.5, actions=set_tunnel:3, mod_nw_src:10.0.0.5, output:3”

So basically in this flow I want every packet coming from port 2 and with inner 
Ip address 10.0.0.1 and outer ip address 192.168.10.5 to be sent to port 3, 
have the gre key set to 3 and the inner ip address to be set to 10.0.0.5.

I haven’t been able to get these actions executed on my packets, even a fairly 
simple rule such as:

ovs-ofctl add-flow br0  "table=0, in_port=2, actions=set_tunnel:3 ,output:3”

where I want every packet coming from my custom netdev provider to get its gre 
key changed and the output is sent to the other port running my other custom 
netdev provider. I have noticed that if I don’t have actions messing with 
tunneling information and just have an output action, the packet gets properly 
redirect to port 3, so I imagine I am missing some essential tunneling 
configuration or something of the sort on my custom netdev provider. So what 
are the necessary things I need to add to a custom netdev provider that 
receives encapsulated packets if I want it to be able to match encapsulated GRE 
packets? I have looked at some of the netdev-vport and netdev-dpdk for vhost 
code, to see how this is done, but I can’t identify the missing information 
that leads my packets to get a drop action when I have anything related to 
tunneling information in add-flow.

For reference, this is how I set up my OvS bridge:

ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev

ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre 
options:remote_ip=flow options:local_ip=flow options:key=flow

ovs-vsctl add-port br0 p2 -- set Interface p2 type=customnetdeva of_port=2

ovs-vsctl add-port br0 p3 -- set Interface p3 type=customnetdevb of_port=3


I have also tried creating my GRE tunnel with 

ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre 
options:remote_ip=192.168.10.6 options:key=3

but this also didn’t change things and the chosen action for the packets was to 
drop them instead, of executing my custom actions.


Cheers,
Matheus


_______________________________________________
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to