syntax = "proto3";

package envoy.extensions.quic.server_preferred_address.v3;

import "envoy/config/core/v3/base.proto";

import "udpa/annotations/status.proto";
import "validate/validate.proto";

option java_package = "io.envoyproxy.envoy.extensions.quic.server_preferred_address.v3";
option java_outer_classname = "DatasourceProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/quic/server_preferred_address/v3;server_preferred_addressv3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: QUIC DataSource server preferred address config]
// [#extension: envoy.quic.server_preferred_address.datasource]

// Configuration for DataSourceServerPreferredAddressConfig.
message DataSourceServerPreferredAddressConfig {
  // Addresses for server preferred address for a single address family (IPv4 or IPv6).
  message AddressFamilyConfig {
    // The server preferred address sent to clients. The data must contain an IP address string.
    config.core.v3.DataSource address = 1 [(validate.rules).message = {required: true}];

    // The server preferred address port sent to clients. The data must contain a integer port value.
    //
    // If this is not specified, the listener's port is used.
    //
    // Note: Envoy currently must receive all packets for a QUIC connection on the same port, so unless
    // :ref:`dnat_address <envoy_v3_api_field_extensions.quic.server_preferred_address.v3.DataSourceServerPreferredAddressConfig.AddressFamilyConfig.dnat_address>`
    // is configured, this must be left unset.
    config.core.v3.DataSource port = 2;

    // If there is a DNAT between the client and Envoy, the address that Envoy will observe
    // server preferred address packets being sent to. If this is not specified, it is assumed
    // there is no DNAT and the server preferred address packets will be sent to the address advertised
    // to clients for server preferred address.
    config.core.v3.DataSource dnat_address = 3;
  }

  // The IPv4 address to advertise to clients for Server Preferred Address.
  AddressFamilyConfig ipv4_config = 1;

  // The IPv6 address to advertise to clients for Server Preferred Address.
  AddressFamilyConfig ipv6_config = 2;
}
