1.6.0 (March 20, 2018)
======================

Changes
-------

* access log: added DOWNSTREAM_REMOTE_ADDRESS, DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT, and
  DOWNSTREAM_LOCAL_ADDRESS :ref:`access log formatters <v1.6.0:config_access_log_format>`.
  DOWNSTREAM_ADDRESS access log formatter has been deprecated.
* access log: added less than or equal (LE) :ref:`comparison filter
  <v1.6.0:envoy_api_msg_config.filter.accesslog.v2.ComparisonFilter>`.
* access log: added configuration to :ref:`runtime filter
  <v1.6.0:envoy_api_msg_config.filter.accesslog.v2.RuntimeFilter>` to set default sampling rate, divisor,
  and whether to use independent randomness or not.
* admin: added :ref:`/runtime <v1.6.0:operations_admin_interface_runtime>` admin endpoint to read the
  current runtime values.
* build: added support for :repo:`building Envoy with exported symbols
  <v1.6.0:bazel#enabling-optional-features>`. This change allows scripts loaded with the Lua filter to
  load shared object libraries such as those installed via `LuaRocks <https://luarocks.org/>`_.
* config: added support for sending error details as
  `grpc.rpc.Status <https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto>`_
  in :ref:`DiscoveryRequest <v1.6.0:envoy_api_msg_DiscoveryRequest>`.
* config: added support for :ref:`inline delivery <v1.6.0:envoy_api_msg_core.DataSource>` of TLS
  certificates and private keys.
* config: added restrictions for the backing :ref:`config sources <v1.6.0:envoy_api_msg_core.ConfigSource>`
  of xDS resources. For filesystem based xDS the file must exist at configuration time. For cluster
  based xDS the backing cluster must be statically defined and be of non-EDS type.
* grpc: the Google gRPC C++ library client is now supported as specified in the :ref:`gRPC services
  overview <v1.6.0:arch_overview_grpc_services>` and :ref:`GrpcService <v1.6.0:envoy_api_msg_core.GrpcService>`.
* grpc-json: added support for :ref:`inline descriptors
  <v1.6.0:envoy_api_field_config.filter.http.transcoder.v2.GrpcJsonTranscoder.proto_descriptor_bin>`.
* health check: added :ref:`gRPC health check <v1.6.0:envoy_api_field_core.HealthCheck.grpc_health_check>`
  based on `grpc.health.v1.Health <https://github.com/grpc/grpc/blob/master/src/proto/grpc/health/v1/health.proto>`_
  service.
* health check: added ability to set :ref:`host header value
  <v1.6.0:envoy_api_field_core.HealthCheck.HttpHealthCheck.host>` for http health check.
* health check: extended the health check filter to support computation of the health check response
  based on the :ref:`percentage of healthy servers in upstream clusters
  <v1.6.0:envoy_api_field_config.filter.http.health_check.v2.HealthCheck.cluster_min_healthy_percentages>`.
* health check: added setting for :ref:`no-traffic
  interval <v1.6.0:envoy_api_field_core.HealthCheck.no_traffic_interval>`.
* http: added idle timeout for :ref:`upstream http connections
  <v1.6.0:envoy_api_field_core.HttpProtocolOptions.idle_timeout>`.
* http: added support for :ref:`proxying 100-Continue responses
  <v1.6.0:envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.proxy_100_continue>`.
* http: added the ability to pass a URL encoded PEM encoded peer certificate in the
  :ref:`config_http_conn_man_headers_x-forwarded-client-cert` header.
* http: added support for trusting additional hops in the
  :ref:`config_http_conn_man_headers_x-forwarded-for` request header.
* http: added support for :ref:`incoming HTTP/1.0
  <v1.6.0:envoy_api_field_core.Http1ProtocolOptions.accept_http_10>`.
* hot restart: added SIGTERM propagation to children to :ref:`hot-restarter.py
  <v1.6.0:operations_hot_restarter>`, which enables using it as a parent of containers.
* ip tagging: added :ref:`HTTP IP Tagging filter <v1.6.0:config_http_filters_ip_tagging>`.
* listeners: added support for :ref:`listening for both IPv4 and IPv6
  <v1.6.0:envoy_api_field_core.SocketAddress.ipv4_compat>` when binding to ::.
* listeners: added support for listening on :ref:`UNIX domain sockets
  <v1.6.0:envoy_api_field_core.Address.pipe>`.
* listeners: added support for :ref:`abstract unix domain sockets <v1.6.0:envoy_api_msg_core.Pipe>` on
  Linux. The abstract namespace can be used by prepending '@' to a socket path.
* load balancer: added cluster configuration for :ref:`healthy panic threshold
  <v1.6.0:envoy_api_field_Cluster.CommonLbConfig.healthy_panic_threshold>` percentage.
* load balancer: added :ref:`Maglev <v1.6.0:arch_overview_load_balancing_types_maglev>` consistent hash
  load balancer.
* load balancer: added support for
  :ref:`LocalityLbEndpoints <v1.6.0:envoy_api_msg_endpoint.LocalityLbEndpoints>` priorities.
* lua: added headers :ref:`replace() <v1.6.0:config_http_filters_lua_header_wrapper>` API.
* lua: extended to support :ref:`metadata object <v1.6.0:config_http_filters_lua_metadata_wrapper>` API.
* redis: added local `PING` support to the :ref:`Redis filter <v1.6.0:arch_overview_redis>`.
* redis: added ``GEORADIUS_RO`` and ``GEORADIUSBYMEMBER_RO`` to the :ref:`Redis command splitter
  <v1.6.0:arch_overview_redis>` allowlist.
* router: added DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT, DOWNSTREAM_LOCAL_ADDRESS,
  DOWNSTREAM_LOCAL_ADDRESS_WITHOUT_PORT, PROTOCOL, and UPSTREAM_METADATA :ref:`header
  formatters <v1.6.0:config_http_conn_man_headers_custom_request_headers>`. The CLIENT_IP header formatter
  has been deprecated.
* router: added gateway-error :ref:`retry-on <v1.6.0:config_http_filters_router_x-envoy-retry-on>` policy.
* router: added support for route matching based on :ref:`URL query string parameters
  <v1.6.0:envoy_api_msg_route.QueryParameterMatcher>`.
* router: added support for more granular weighted cluster routing by allowing the :ref:`total_weight
  <v1.6.0:envoy_api_field_route.WeightedCluster.total_weight>` to be specified in configuration.
* router: added support for :ref:`custom request/response headers
  <v1.6.0:config_http_conn_man_headers_custom_request_headers>` with mixed static and dynamic values.
* router: added support for :ref:`direct responses <v1.6.0:envoy_api_field_route.Route.direct_response>`.
  I.e., sending a preconfigured HTTP response without proxying anywhere.
* router: added support for :ref:`HTTPS redirects
  <v1.6.0:envoy_api_field_route.RedirectAction.https_redirect>` on specific routes.
* router: added support for :ref:`prefix_rewrite
  <v1.6.0:envoy_api_field_route.RedirectAction.prefix_rewrite>` for redirects.
* router: added support for :ref:`stripping the query string
  <v1.6.0:envoy_api_field_route.RedirectAction.strip_query>` for redirects.
* router: added support for downstream request/upstream response
  :ref:`header manipulation <v1.6.0:config_http_conn_man_headers_custom_request_headers>` in :ref:`weighted
  cluster <v1.6.0:envoy_api_msg_route.WeightedCluster>`.
* router: added support for :ref:`range based header matching
  <v1.6.0:envoy_api_field_route.HeaderMatcher.range_match>` for request routing.
* squash: added support for the :ref:`Squash microservices debugger <v1.6.0:config_http_filters_squash>`.
  Allows debugging an incoming request to a microservice in the mesh.
* stats: added metrics service API implementation.
* stats: added native :ref:`DogStatsd <v1.6.0:envoy_api_msg_config.metrics.v2.DogStatsdSink>` support.
* stats: added support for :ref:`fixed stats tag values
  <v1.6.0:envoy_api_field_config.metrics.v2.TagSpecifier.fixed_value>` which will be added to all metrics.
* tcp proxy: added support for specifying a :ref:`metadata matcher
  <v1.6.0:envoy_api_field_config.filter.network.tcp_proxy.v2.TcpProxy.metadata_match>` for upstream
  clusters in the tcp filter.
* tcp proxy: improved TCP proxy to correctly proxy TCP half-close.
* tcp proxy: added :ref:`idle timeout
  <v1.6.0:envoy_api_field_config.filter.network.tcp_proxy.v2.TcpProxy.idle_timeout>`.
* tcp proxy: access logs now bring an IP address without a port when using DOWNSTREAM_ADDRESS.
  Use :ref:`DOWNSTREAM_REMOTE_ADDRESS <v1.6.0:config_access_log_format>` instead.
* tracing: added support for dynamically loading an :ref:`OpenTracing tracer
  <v1.6.0:envoy_api_msg_config.trace.v2.DynamicOtConfig>`.
* tracing: when using the Zipkin tracer, it is now possible for clients to specify the sampling
  decision (using the :ref:`x-b3-sampled <v1.6.0:config_http_conn_man_headers_x-b3-sampled>` header) and
  have the decision propagated through to subsequently invoked services.
* tracing: when using the Zipkin tracer, it is no longer necessary to propagate the
  :ref:`x-ot-span-context <v1.6.0:config_http_conn_man_headers_x-ot-span-context>` header.
  See more on trace context propagation :ref:`here <v1.6.0:arch_overview_tracing>`.
* transport sockets: added transport socket interface to allow custom implementations of transport
  sockets. A transport socket provides read and write logic with buffer encryption and decryption
  (if applicable). The existing TLS implementation has been refactored with the interface.
* upstream: added support for specifying an :ref:`alternate stats name
  <v1.6.0:envoy_api_field_Cluster.alt_stat_name>` while emitting stats for clusters.
* Many small bug fixes and performance improvements not listed.

Deprecated
----------

* DOWNSTREAM_ADDRESS log formatter is deprecated. Use DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT
  instead.
* CLIENT_IP header formatter is deprecated. Use DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT instead.
* 'use_original_dst' field in the v2 LDS API is deprecated. Use listener filters and filter chain
  matching instead.
* ``value`` and ``regex`` fields in the ``HeaderMatcher`` message is deprecated. Use the ``exact_match``
  or ``regex_match`` oneof instead.