syntax = "proto3";

// This package provides a configuration format for configuring IP-based
// networking on Linux. This is going to be used in cases where automatic
// configuration by Monogon's network stack is infeasible or network
// configuration information needs to be provided to non-Monogon systems.
// It's kept human-readable as it may be written by humans directly when
// configuring Monogon systems.
package osbase.net.proto;
option go_package = "source.monogon.dev/osbase/net/proto";

// Device references one or more network adapters, i.e. network devices which
// connect this kernel to an outside system.
// All conditions which are set in the message are ANDed together.
message Device {
  // Matches the permanent hardware address of the interface. The raw address
  // is hex-encoded and colons are inserted between every byte boundary.
  // This is the MAC address on Ethernet interfaces.
  string hardware_address = 1;
  // Matches the Linux driver of the network interface
  string driver = 2;
  // In case of multiple matches, use the n-th interface instead of the first.
  int32 index = 3;
}
// Bond defines an aggregate of physical layer 2 links which behave as one
// virtual layer 2 link. This includes active-passive as well as active-
// active configurations with two or more links.
message Bond {
  // List of interface names which are a member of this bond. It's recommended
  // to only use Device-type interfaces here as others might behave
  // unexpectedly (Bond on VLAN interfaces) or fail to be configured entirely
  // (Bond on Bond). All interface names listed here must exist as part of the
  // same Net message as this Bond interface.
  repeated string member_interface = 1;
  // Minimum number of links to be up to consider the bond to be up.
  // Can be used in case expected bandwith is more than a single interface
  // can take in which case it might be preferable to not pass any traffic
  // over causing significant packet loss.
  int32 min_links = 2;
  message CarrierMonitor {
    // Interval at which the PCS is polled for physical link status if Linux's
    // carrier monitoring is not available.
    int32 polling_interval_ms = 1;
    // Disable the use of Linux's carrier monitoring which can use interrupts
    // and force polling in all cases.
    bool force_polling = 4;
    // Amount of time to delay marking the link as down in the bond after the
    // carrier has been lost. Should be a multiple of polling_interval_ms.
    int32 down_delay_ms = 2;
    // Amount of time to delay marking the link as up in the bond after the
    // carrier is available. Should be a multiple of polling_interval_ms.
    int32 up_delay_ms = 3;
  }
  oneof link_monitor {
    CarrierMonitor carrier_monitor = 3;
    // TODO(#186): Support ARP monitor for other modes
  }
  enum TransmitHashPolicy {
    // Layer 2 MAC address
    LAYER2 = 0;
    // IP address, protocol and port
    LAYER3_4 = 1;
    // MAC address and IP address
    LAYER2_3 = 2;
    // Encapsulated MAC address and IP address
    ENCAP_LAYER2_3 = 3;
    // Encapsulated IP address, protocol and port
    ENCAP_LAYER3_4 = 4;
    // VLAN ID and source MAC
    VLAN_SRCMAC = 5;
  }
  TransmitHashPolicy transmit_hash_policy = 4;
  // Use the Link Aggregation Control Protocol to automatically use the
  // available links as best as possible.
  message LACP {
    enum Rate {
      // LACP slow rate, one packet every 30s
      SLOW = 0;
      // LACP fast rate, one packet every 1s
      FAST = 1;
    }
    Rate rate = 1;
    enum SelectionLogic {
      STABLE = 0;
      BANDWIDTH = 1;
      COUNT = 2;
    }
    SelectionLogic selection_logic = 2;
    int32 actor_system_priority = 3;
    int32 user_port_key = 4;
    string actor_system_mac = 5;
  }
  message ActiveBackup {
    // TODO(#186): More settings
  }
  oneof mode {
    LACP lacp = 5;
    ActiveBackup active_backup = 6;
  }
}

message VLAN {
  // Name of the parent interface passing tagged packets. The interface
  // referenced here must exist in the same Net message as this VLAN
  // interface.
  string parent = 1;
  // VLAN ID (1-4094)
  int32 id = 2;
  enum Protocol {
    // C-VLAN, also known as "standard" VLAN inserts a header with the
    // VLAN ID (VID) right before the EtherType.
    CVLAN = 0;
    // S-VLAN, also known as QinQ or 802.1ad (obsolete) inserts a second VLAN ID
    // before the C-VLAN header. This allows stacking two VLANs. The ID
    // specified here is just for the outer VLAN, the inner one can be set by
    // creating another VLAN interface and setting this one to be its parent.
    SVLAN = 1;
  }
  Protocol protocol = 3;
}

// IPv4Autoconfig contains settings for the automatic configuration of IPv4
// addresses, routes and further network information via DHCPv4.
message IPv4Autoconfig {}

// IPv6Autoconfig contains settings for the automatic configuration of IPv6
// addreses, routes and further network information via ICMPv6 Router
// Advertisements and optionally DHCPv6 if indicated by the Router
// Advertisement.
message IPv6Autoconfig {
  enum Privacy {
    // Do not generate privacy addresses.
    DISABLE = 0;
    // Generate privacy addresses, but prefer non-privacy addresses.
    AVOID = 1;
    // Generate privacy addresses and use them over other non-privacy
    // addresses.
    PREFER = 2;
  }
  // privacy controls if and how privacy addresses (see RFC 4941) are used if
  // DHCPv6 is not used for addressing. If DHCPv6 is used for addressing
  // any privacy considerations lie with the DHCPv6 server.
  Privacy privacy = 1;
}

message Interface {
  // Name of the interface. Used as a reference in this config as well as for
  // the name of the kernel interface. Must not be empty, less than 16 UTF-8
  // bytes long and cannot contain spaces, forward slashes, colons or percent
  // signs. The UTF-8 encoding can also not include 0xa0 which is interpreted
  // as a space by Linux since its ctype database is based on Latin1.
  string name = 1;

  // Type of interface
  oneof type {
    Device device = 3;
    Bond bond = 4;
    VLAN vlan = 5;
  }
  // Enable automatic IPv4 network configuration via DHCPv4.
  IPv4Autoconfig ipv4_autoconfig = 10;

  // Enable automatic IPv6 network configuration via router advertisements and
  // DHCPv6.
  IPv6Autoconfig ipv6_autoconfig = 11;

  // IP addresses to be statically configured. These can either be single
  // IP addresses (both IPv4 and IPv6) as well as CIDR-style networks for
  // which a corresponding route is automatically added. If single IP addreses
  // are used, a corresponding route must be added, otherwise no traffic will
  // be routed out of the interface.
  repeated string address = 12;

  message Route {
    // Destination in CIDR form or as a single IP.
    string destination = 1;

    // If set, the destination network is not directly on-link, but reachable
    // via a gateway which is on-link. On point-to-point networks without
    // ARP/NDP this doesn't do anything should never be set.
    // Note that here, different from other network configs, the gateway IP (if
    // configured) is assumed to be on-link for the interface it's configured
    // under. Configuring a route with a gateway IP which is routed to another
    // interface is invalid.
    string gateway_ip = 2;

    // An optional hint to the kernel which source address to prefer when using
    // this route.
    string source_ip = 3;

    // Metric of this interface route. A lower metric route wins over one with a
    // higher metric. If unset, defaults to 0 which is the default metric in
    // Linux.
    int32 metric = 4;
  }
  // List of routes which direct traffic into this interface.
  repeated Route route = 14;

  // Maximum transmission unit of the interface. If unset it will be
  // automatically configured by DHCP or LLDP or left at the interface default
  // value. Minimum value is 1280 bytes as required by IPv6.
  int32 mtu = 13;
}

message Nameserver {
  // The IP address of the nameserver in string form.
  string ip = 1;
}

// Net contains a network configuration for a single network namespace.
//
// This is effectively the top-level configuration message for a machine.
message Net {
  repeated Interface interface = 1;
  repeated Nameserver nameserver = 3;
}
