tunneling: Add datapath GRE support.
Add a new vport type that implements GRE support inside of the
datapath instead of relying on Linux devices. This provides
greater scalability, performance, and control.
The new GRE implementation supports nearly all features of the
Linux implementation. It does not currently support multicast,
NBMA tunnels, or non-Ethernet devices.
This implementation of GRE has several important benefits over the
existing Linux implementation. The first is simply that is not a
Linux device. Linux devices are fairly heavy weight both in terms
of memory consumption and interactions with the rest of the system
(notifications, processes polling, etc.). There are many pieces of
code that make assumptions about the maximum reasonable number of
ports. Simply maintaining the state of several thousand devices is
enough to full occupy the CPU.
A tighter coupling between the GRE implementation and datapath
also allows more flexibility. The key can be set and retrieved
from the flow table, which allows even greater scalability.
There will probably be additional use cases in the future.