mirror of
https://github.com/openvswitch/ovs
synced 2025-10-25 15:07:05 +00:00
openvswitch: Userspace tunneling.
Following patch adds support for userspace tunneling. Tunneling needs three more component first is routing table which is configured by caching kernel routes and second is ARP cache which build automatically by snooping arp. And third is tunnel protocol table which list all listening protocols which is populated by vswitchd as tunnel ports are added. GRE and VXLAN protocol support is added in this patch. Tunneling works as follows: On packet receive vswitchd check if this packet is targeted to tunnel port. If it is then vswitchd inserts tunnel pop action which pops header and sends packet to tunnel port. On packet xmit rather than generating Set tunnel action it generate tunnel push action which has tunnel header data. datapath can use tunnel-push action data to generate header for each packet and forward this packet to output port. Since tunnel-push action contains most of packet header vswitchd needs to lookup routing table and arp table to build this action. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Jarno Rajahalme <jrajahalme@nicira.com> Acked-by: Thomas Graf <tgraf@noironetworks.com> Acked-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -255,6 +255,23 @@ struct netdev_class {
|
||||
const struct netdev_tunnel_config *
|
||||
(*get_tunnel_config)(const struct netdev *netdev);
|
||||
|
||||
/* Build Partial Tunnel header. Ethernet and ip header is already built,
|
||||
* build_header() is suppose build protocol specific part of header. */
|
||||
int (*build_header)(const struct netdev *, struct ovs_action_push_tnl *data);
|
||||
|
||||
/* build_header() can not build entire header for all packets for given
|
||||
* flow. Push header is called for packet to build header specific to
|
||||
* a packet on actual transmit. It uses partial header build by
|
||||
* build_header() which is passed as data. */
|
||||
int (*push_header)(const struct netdev *netdev,
|
||||
struct dpif_packet **buffers, int cnt,
|
||||
const struct ovs_action_push_tnl *data);
|
||||
|
||||
/* Pop tunnel header from packet, build tunnel metadata and resize packet
|
||||
* for further processing. */
|
||||
int (*pop_header)(struct netdev *netdev,
|
||||
struct dpif_packet **buffers, int cnt);
|
||||
|
||||
/* Returns the id of the numa node the 'netdev' is on. If there is no
|
||||
* such info, returns NETDEV_NUMA_UNSPEC. */
|
||||
int (*get_numa_id)(const struct netdev *netdev);
|
||||
|
||||
Reference in New Issue
Block a user