syntax = "proto3";

import "github.com/gogo/protobuf/gogoproto/gogo.proto";

package libnetwork;

option (gogoproto.marshaler_all) = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.stringer_all) = true;
option (gogoproto.gostring_all) = true;
option (gogoproto.sizer_all) = true;
option (gogoproto.goproto_stringer_all) = false;

// EndpointRecord specifies all the endpoint specific information that
// needs to gossiped to nodes participating in the network.
message EndpointRecord {
	// Name of the container
	string name = 1;

	// Service name of the service to which this endpoint belongs.
	string service_name = 2;

	// Service ID of the service to which this endpoint belongs.
	string service_id = 3 [(gogoproto.customname) = "ServiceID"];

	// Virtual IP of the service to which this endpoint belongs.
	string virtual_ip = 4 [(gogoproto.customname) = "VirtualIP"];

	// IP assigned to this endpoint.
	string endpoint_ip = 5 [(gogoproto.customname) = "EndpointIP"];

	// IngressPorts exposed by the service to which this endpoint belongs.
	repeated PortConfig ingress_ports = 6;

	// A list of aliases which are alternate names for the service
	repeated string aliases = 7;

	// List of aliases task specific aliases
	repeated string task_aliases = 8;

	// Whether this endpoint's service has been disabled
	bool service_disabled = 9;
}

// PortConfig specifies an exposed port which can be
// addressed using the given name. This can be later queried
// using a service discovery api or a DNS SRV query. The node
// port specifies a port that can be used to address this
// service external to the cluster by sending a connection
// request to this port to any node on the cluster.
message PortConfig {
	enum Protocol {
		option (gogoproto.goproto_enum_prefix) = false;

		TCP = 0 [(gogoproto.enumvalue_customname) = "ProtocolTCP"];
		UDP = 1 [(gogoproto.enumvalue_customname) = "ProtocolUDP"];
		SCTP = 2 [(gogoproto.enumvalue_customname) = "ProtocolSCTP"];
	}

	// Name for the port. If provided the port information can
	// be queried using the name as in a DNS SRV query.
	string name = 1;

	// Protocol for the port which is exposed.
	Protocol protocol = 2;

	// The port which the application is exposing and is bound to.
	uint32 target_port = 3;

	// PublishedPort specifies the port on which the service is
	// exposed on all nodes on the cluster. If not specified an
	// arbitrary port in the node port range is allocated by the
	// system. If specified it should be within the node port
	// range and it should be available.
	uint32 published_port = 4;
}
