syntax = "proto3";

package envoy.extensions.transport_sockets.tcp_stats.v3;

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

import "google/protobuf/duration.proto";

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

option java_package = "io.envoyproxy.envoy.extensions.transport_sockets.tcp_stats.v3";
option java_outer_classname = "TcpStatsProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/transport_sockets/tcp_stats/v3;tcp_statsv3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: TCP Stats Transport Socket wrapper]
// [#extension: envoy.transport_sockets.tcp_stats]

// Configuration for the TCP Stats transport socket wrapper, which wraps another transport socket for
// all communication, but emits stats about the underlying TCP connection.
//
// The stats are documented :ref:`here <config_listener_stats_tcp>` for listeners and
// :ref:`here <config_cluster_manager_cluster_stats_tcp>` for clusters.
//
// This transport socket is currently only supported on Linux.
message Config {
  // The underlying transport socket being wrapped.
  config.core.v3.TransportSocket transport_socket = 1 [(validate.rules).message = {required: true}];

  // Period to update stats while the connection is open. If unset, updates only happen when the
  // connection is closed. Stats are always updated one final time when the connection is closed.
  google.protobuf.Duration update_period = 2 [(validate.rules).duration = {gte {nanos: 1000000}}];
}
