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 net.proto;
option go_package = "source.monogon.dev/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;
}
