GreTunnelOverMacvlanRecipe

class lnst.Recipes.ENRT.GreTunnelOverMacvlanRecipe.GreTunnelOverMacvlanRecipe(**kwargs)

Bases: MTUHWConfigMixin, PauseFramesHWConfigMixin, OffloadSubConfigMixin, BaseTunnelRecipe

This class implements a recipe that configures a GRE tunnel between two hosts that are connected through a macvlan device.

               .--------.
        .------| switch |-----.
        |      '--------'     |
        |                     |
.-------|------.      .-------|------.
|    .--'-.    |      |    .--'-.    |
|    |eth0|    |      |    |eth0|    |
|    '----'    |      |    '----'    |
|       |      |      |       |      |
|   macvlan0   |      |   macvlan0   |
|      | |     |      |      | |     |
|      | |     |      |      | |     |
|  ----' '---  |      |  ----' '---  |
|  gre tunnel  |      |  gre tunnel  |
|  ----------  |      |  ----------  |
|              |      |              |
|    host1     |      |    host2     |
'--------------'      '--------------'

The actual test machinery is implemented in the BaseEnrtRecipe class.

The test wide configuration is implemented in the BaseTunnelRecipe class.

configure_underlying_network(config: EnrtConfiguration) tuple[RemoteDevice, RemoteDevice]

The underlying network for the tunnel consists of two MACVLAN devices configured on top of the Ethernet devices on the matched hosts.

create_tunnel(config: EnrtConfiguration, tunnel_endpoints: tuple[RemoteDevice, RemoteDevice]) tuple[RemoteDevice, RemoteDevice]

The GRE tunnel devices are configured with local and remote ip addresses matching the MACVLAN device IP addresses.

The GRE tunnel devices are configured with IPv4 and IPv6 addresses of individual networks. Routes are configured accordingly.

generate_ping_endpoints(config)

The ping endpoints for this recipe are simply the tunnel endpoints

Returned as:

[PingEndpoints(self.matched.host1.gre_tunnel, self.matched.host2.gre_tunnel)]
get_packet_assert_config(ping_config)

The packet assert test configuration contains filter for gre protocol and grep patterns to match the ICMP or ICMP6 echo requests.