VintageNet.Route.Calculator (vintage_net v0.11.3) View Source

This module computes the desired routing table contents

It's used by the RouteManager to update the Linux routing tables when interfaces come online or change state. See the RouteManager docs for a discussion of how routes are configured.

The functions in this module have no side effects so that it's easier to test that routing scenarios result in correct Linux routing table configurations.

Link to this section Summary

Functions

Compute a Linux routing table configuration

Initialize state carried between calculations

Return the table indices used for routing based on source IP.

Link to this section Types

Specs

interface_infos() :: %{
  required(VintageNet.ifname()) => VintageNet.Route.InterfaceInfo.t()
}

Specs

table_indices() :: %{
  required(VintageNet.ifname()) => VintageNet.Route.table_index()
}

Link to this section Functions

Link to this function

compute(table_indices, infos, route_metric_fun)

View Source

Specs

Compute a Linux routing table configuration

The entries are ordered so that List.myers_difference/2 can be used to minimize the routing table changes.

Specs

init() :: table_indices()

Initialize state carried between calculations

Link to this function

rule_table_index_range()

View Source

Specs

rule_table_index_range() :: Range.t()

Return the table indices used for routing based on source IP.