syntax = "proto3";

import "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 endpoint
	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;
}

// 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"];
	}

	// 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;
}
