syntax = "proto3"; package envoy.api.v2; import "google/protobuf/wrappers.proto"; import "validate/validate.proto"; import "gogoproto/gogo.proto"; // [#protodoc-title: Network addresses] // [#v2-api-diff: Addresses now have .proto structure.] message Pipe { // Unix Domain Socket path. string path = 1 [(validate.rules).string.min_bytes = 1]; } message SocketAddress { enum Protocol { TCP = 0; // [#not-implemented-hide:] UDP = 1; } Protocol protocol = 1 [(validate.rules).enum.defined_only = true]; // The address for this socket. :ref:`Listeners ` will bind // to the address or outbound connections will be made. An empty address is // not allowed, specify ``0.0.0.0`` or ``::`` to bind any. It's still possible to // distinguish on an address via the prefix/suffix matching in // FilterChainMatch after connection. For :ref:`clusters // `, an address may be either an IP or // hostname to be resolved via DNS. If it is a hostname, :ref:`resolver_name // ` should be set unless default // (i.e. DNS) resolution is expected. string address = 2 [(validate.rules).string.min_bytes = 1]; oneof port_specifier { option (validate.required) = true; uint32 port_value = 3; // This is only valid if :ref:`resolver_name // ` is specified below and the // named resolver is capable of named port resolution. string named_port = 4; } // The name of the resolver. This must have been registered with Envoy. If this is // empty, a context dependent default applies. If address is a hostname this // should be set for resolution other than DNS. If the address is a concrete // IP address, no resolution will occur. string resolver_name = 5; // When binding to an IPv6 address above, this enables `IPv4 compatibity // `_. Binding to ``::`` will // allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into // IPv6 space as ``::FFFF:``. bool ipv4_compat = 6; } message BindConfig { // The address to bind to when creating a socket. SocketAddress source_address = 1 [(validate.rules).message.required = true, (gogoproto.nullable) = false]; } // Addresses specify either a logical or physical address and port, which are // used to tell Envoy where to bind/listen, connect to upstream and find // management servers. message Address { oneof address { option (validate.required) = true; SocketAddress socket_address = 1; Pipe pipe = 2; } } // CidrRange specifies an IP Address and a prefix length to construct // the subnet mask for a `CIDR `_ range. message CidrRange { // IPv4 or IPv6 address, e.g. ``192.0.0.0`` or ``2001:db8::``. string address_prefix = 1 [(validate.rules).string.min_bytes = 1]; // Length of prefix, e.g. 0, 32. google.protobuf.UInt32Value prefix_len = 2 [(validate.rules).uint32.lte = 128]; }