HomeFreeBSD

Overhaul if_gre(4).

Description

Overhaul if_gre(4).

Split it into two modules: if_gre(4) for GRE encapsulation and
if_me(4) for minimal encapsulation within IP.

gre(4) changes:

  • convert to if_transmit;
  • rework locking: protect access to softc with rmlock, protect from concurrent ioctls with sx lock;
  • correct interface accounting for outgoing datagramms (count only payload size);
  • implement generic support for using IPv6 as delivery header;
  • make implementation conform to the RFC 2784 and partially to RFC 2890;
  • add support for GRE checksums - calculate for outgoing datagramms and check for inconming datagramms;
  • add support for sending sequence number in GRE header;
  • remove support of cached routes. This fixes problem, when gre(4) doesn't work at system startup. But this also removes support for having tunnels with the same addresses for inner and outer header.
  • deprecate support for various GREXXX ioctls, that doesn't used in FreeBSD. Use our standard ioctls for tunnels.

me(4):

  • implementation conform to RFC 2004;
  • use if_transmit;
  • use the same locking model as gre(4);

PR: 164475
Differential Revision: D1023
No objections from: net@
Relnotes: yes
Sponsored by: Yandex LLC

Details