gre: Add support for path MTU discovery.
This allows path MTU discovery to properly work when used with
bridging. While there was previously support for PMTUD it used
the kernel's IP stack. This works fine for routing but when
bridging it is possible that a complete network is operating over
the bridge that the kernel has no knowledge of and the ICMP
fragmentation needed packets are lost.
When a packet arrives that is above the MTU of the tunnel, an
ICMP message is synthesized and send back on the device that the
original packet came from. This does not rely on the kernel IP
stack and is therefore independent of the routing table. Both
IPv4 and IPv6 are supported, including over VLANs. Other types
of packets that are over the MTU are encapsulated and the outer
packets are fragmented.
This entire functionality is a layer violation since bridging
operates at layer 2 and fragmentation is a function of layer 3.
For this reason it is possible to disable PMTUD, which will
provide complete transparency but will cause the outer IP packets
to be fragmented.