Documentation
¶
Index ¶
- Constants
- Variables
- func RegisterControlServer(s grpc.ServiceRegistrar, srv ControlServer)
- type ArmRequest
- type ArmResponse
- type CapabilitiesRequest
- type CapabilitiesResponse
- func (*CapabilitiesResponse) Descriptor() ([]byte, []int)deprecated
- func (x *CapabilitiesResponse) GetDatapaths() []string
- func (x *CapabilitiesResponse) GetGenerators() []string
- func (x *CapabilitiesResponse) GetHardwareTimestamps() bool
- func (x *CapabilitiesResponse) GetPayloads() []string
- func (x *CapabilitiesResponse) GetSchedulers() []string
- func (*CapabilitiesResponse) ProtoMessage()
- func (x *CapabilitiesResponse) ProtoReflect() protoreflect.Message
- func (x *CapabilitiesResponse) Reset()
- func (x *CapabilitiesResponse) String() string
- type ConfigureRequest
- type ConfigureResponse
- func (*ConfigureResponse) Descriptor() ([]byte, []int)deprecated
- func (x *ConfigureResponse) GetDataPort() uint32
- func (x *ConfigureResponse) GetFlowId() string
- func (*ConfigureResponse) ProtoMessage()
- func (x *ConfigureResponse) ProtoReflect() protoreflect.Message
- func (x *ConfigureResponse) Reset()
- func (x *ConfigureResponse) String() string
- type ControlClient
- type ControlServer
- type Control_StreamTelemetryClient
- type Control_StreamTelemetryServer
- type DestroyRequest
- type DestroyResponse
- type FlowRole
- type FlowSpec
- func (*FlowSpec) Descriptor() ([]byte, []int)deprecated
- func (x *FlowSpec) GetCount() uint64
- func (x *FlowSpec) GetDatapath() string
- func (x *FlowSpec) GetDuration() *durationpb.Duration
- func (x *FlowSpec) GetEmulation() string
- func (x *FlowSpec) GetGenerator() string
- func (x *FlowSpec) GetIface() string
- func (x *FlowSpec) GetPacketSize() uint32
- func (x *FlowSpec) GetParams() map[string]string
- func (x *FlowSpec) GetPayload() string
- func (x *FlowSpec) GetQueue() uint32
- func (x *FlowSpec) GetRate() string
- func (x *FlowSpec) GetRole() FlowRole
- func (x *FlowSpec) GetSeed() int64
- func (x *FlowSpec) GetTarget() string
- func (x *FlowSpec) GetTransport() string
- func (x *FlowSpec) GetVolume() uint64
- func (*FlowSpec) ProtoMessage()
- func (x *FlowSpec) ProtoReflect() protoreflect.Message
- func (x *FlowSpec) Reset()
- func (x *FlowSpec) String() string
- type HealthRequest
- type HealthResponse
- func (*HealthResponse) Descriptor() ([]byte, []int)deprecated
- func (x *HealthResponse) GetApiVersion() uint32
- func (x *HealthResponse) GetReady() bool
- func (x *HealthResponse) GetVersion() string
- func (*HealthResponse) ProtoMessage()
- func (x *HealthResponse) ProtoReflect() protoreflect.Message
- func (x *HealthResponse) Reset()
- func (x *HealthResponse) String() string
- type RegisterRequest
- func (*RegisterRequest) Descriptor() ([]byte, []int)deprecated
- func (x *RegisterRequest) GetAgentId() string
- func (x *RegisterRequest) GetApiVersion() uint32
- func (x *RegisterRequest) GetHostname() string
- func (x *RegisterRequest) GetTags() []string
- func (*RegisterRequest) ProtoMessage()
- func (x *RegisterRequest) ProtoReflect() protoreflect.Message
- func (x *RegisterRequest) Reset()
- func (x *RegisterRequest) String() string
- type RegisterResponse
- type StartRequest
- func (*StartRequest) Descriptor() ([]byte, []int)deprecated
- func (x *StartRequest) GetFlowId() string
- func (x *StartRequest) GetReportIntervalNanos() int64
- func (x *StartRequest) GetStartAtUnixNanos() int64
- func (*StartRequest) ProtoMessage()
- func (x *StartRequest) ProtoReflect() protoreflect.Message
- func (x *StartRequest) Reset()
- func (x *StartRequest) String() string
- type StartResponse
- type StopRequest
- type StopResponse
- type TcpInfo
- func (*TcpInfo) Descriptor() ([]byte, []int)deprecated
- func (x *TcpInfo) GetLost() uint32
- func (x *TcpInfo) GetRttUs() uint32
- func (x *TcpInfo) GetRttvarUs() uint32
- func (x *TcpInfo) GetSndCwnd() uint32
- func (x *TcpInfo) GetSndSsthresh() uint32
- func (x *TcpInfo) GetTotalRetrans() uint32
- func (*TcpInfo) ProtoMessage()
- func (x *TcpInfo) ProtoReflect() protoreflect.Message
- func (x *TcpInfo) Reset()
- func (x *TcpInfo) String() string
- type TelemetryRequest
- type TelemetrySample
- func (*TelemetrySample) Descriptor() ([]byte, []int)deprecated
- func (x *TelemetrySample) GetBitsPerSec() float64
- func (x *TelemetrySample) GetBytes() uint64
- func (x *TelemetrySample) GetFinal() bool
- func (x *TelemetrySample) GetFlowId() string
- func (x *TelemetrySample) GetIntervalBytes() uint64
- func (x *TelemetrySample) GetIntervalIndex() int64
- func (x *TelemetrySample) GetIntervalNanos() int64
- func (x *TelemetrySample) GetIntervalPackets() uint64
- func (x *TelemetrySample) GetNanos() int64
- func (x *TelemetrySample) GetPackets() uint64
- func (x *TelemetrySample) GetTcp() *TcpInfo
- func (*TelemetrySample) ProtoMessage()
- func (x *TelemetrySample) ProtoReflect() protoreflect.Message
- func (x *TelemetrySample) Reset()
- func (x *TelemetrySample) String() string
- type TimeSyncRequest
- type TimeSyncResponse
- func (*TimeSyncResponse) Descriptor() ([]byte, []int)deprecated
- func (x *TimeSyncResponse) GetT1() int64
- func (x *TimeSyncResponse) GetT2() int64
- func (x *TimeSyncResponse) GetT3() int64
- func (*TimeSyncResponse) ProtoMessage()
- func (x *TimeSyncResponse) ProtoReflect() protoreflect.Message
- func (x *TimeSyncResponse) Reset()
- func (x *TimeSyncResponse) String() string
- type UnimplementedControlServer
- func (UnimplementedControlServer) Arm(context.Context, *ArmRequest) (*ArmResponse, error)
- func (UnimplementedControlServer) Capabilities(context.Context, *CapabilitiesRequest) (*CapabilitiesResponse, error)
- func (UnimplementedControlServer) Configure(context.Context, *ConfigureRequest) (*ConfigureResponse, error)
- func (UnimplementedControlServer) Destroy(context.Context, *DestroyRequest) (*DestroyResponse, error)
- func (UnimplementedControlServer) Health(context.Context, *HealthRequest) (*HealthResponse, error)
- func (UnimplementedControlServer) Register(context.Context, *RegisterRequest) (*RegisterResponse, error)
- func (UnimplementedControlServer) Start(context.Context, *StartRequest) (*StartResponse, error)
- func (UnimplementedControlServer) Stop(context.Context, *StopRequest) (*StopResponse, error)
- func (UnimplementedControlServer) StreamTelemetry(*TelemetryRequest, grpc.ServerStreamingServer[TelemetrySample]) error
- func (UnimplementedControlServer) TimeSync(context.Context, *TimeSyncRequest) (*TimeSyncResponse, error)
- type UnsafeControlServer
Constants ¶
const ( Control_Health_FullMethodName = "/loom.v1.Control/Health" Control_Register_FullMethodName = "/loom.v1.Control/Register" Control_Capabilities_FullMethodName = "/loom.v1.Control/Capabilities" Control_Configure_FullMethodName = "/loom.v1.Control/Configure" Control_Arm_FullMethodName = "/loom.v1.Control/Arm" Control_Start_FullMethodName = "/loom.v1.Control/Start" Control_Stop_FullMethodName = "/loom.v1.Control/Stop" Control_Destroy_FullMethodName = "/loom.v1.Control/Destroy" Control_TimeSync_FullMethodName = "/loom.v1.Control/TimeSync" Control_StreamTelemetry_FullMethodName = "/loom.v1.Control/StreamTelemetry" )
Variables ¶
var ( FlowRole_name = map[int32]string{ 0: "FLOW_ROLE_UNSPECIFIED", 1: "FLOW_ROLE_SENDER", 2: "FLOW_ROLE_RECEIVER", 3: "FLOW_ROLE_REFLECTOR", 4: "FLOW_ROLE_RESPONDER", 5: "FLOW_ROLE_REQUESTER", } FlowRole_value = map[string]int32{ "FLOW_ROLE_UNSPECIFIED": 0, "FLOW_ROLE_SENDER": 1, "FLOW_ROLE_RECEIVER": 2, "FLOW_ROLE_REFLECTOR": 3, "FLOW_ROLE_RESPONDER": 4, "FLOW_ROLE_REQUESTER": 5, } )
Enum value maps for FlowRole.
var Control_ServiceDesc = grpc.ServiceDesc{ ServiceName: "loom.v1.Control", HandlerType: (*ControlServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "Health", Handler: _Control_Health_Handler, }, { MethodName: "Register", Handler: _Control_Register_Handler, }, { MethodName: "Capabilities", Handler: _Control_Capabilities_Handler, }, { MethodName: "Configure", Handler: _Control_Configure_Handler, }, { MethodName: "Arm", Handler: _Control_Arm_Handler, }, { MethodName: "Start", Handler: _Control_Start_Handler, }, { MethodName: "Stop", Handler: _Control_Stop_Handler, }, { MethodName: "Destroy", Handler: _Control_Destroy_Handler, }, { MethodName: "TimeSync", Handler: _Control_TimeSync_Handler, }, }, Streams: []grpc.StreamDesc{ { StreamName: "StreamTelemetry", Handler: _Control_StreamTelemetry_Handler, ServerStreams: true, }, }, Metadata: "proto/loom/v1/control.proto", }
Control_ServiceDesc is the grpc.ServiceDesc for Control service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)
var File_proto_loom_v1_control_proto protoreflect.FileDescriptor
Functions ¶
func RegisterControlServer ¶
func RegisterControlServer(s grpc.ServiceRegistrar, srv ControlServer)
Types ¶
type ArmRequest ¶
type ArmRequest struct {
FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"`
// contains filtered or unexported fields
}
func (*ArmRequest) Descriptor
deprecated
func (*ArmRequest) Descriptor() ([]byte, []int)
Deprecated: Use ArmRequest.ProtoReflect.Descriptor instead.
func (*ArmRequest) GetFlowId ¶
func (x *ArmRequest) GetFlowId() string
func (*ArmRequest) ProtoMessage ¶
func (*ArmRequest) ProtoMessage()
func (*ArmRequest) ProtoReflect ¶
func (x *ArmRequest) ProtoReflect() protoreflect.Message
func (*ArmRequest) Reset ¶
func (x *ArmRequest) Reset()
func (*ArmRequest) String ¶
func (x *ArmRequest) String() string
type ArmResponse ¶
type ArmResponse struct {
// contains filtered or unexported fields
}
func (*ArmResponse) Descriptor
deprecated
func (*ArmResponse) Descriptor() ([]byte, []int)
Deprecated: Use ArmResponse.ProtoReflect.Descriptor instead.
func (*ArmResponse) ProtoMessage ¶
func (*ArmResponse) ProtoMessage()
func (*ArmResponse) ProtoReflect ¶
func (x *ArmResponse) ProtoReflect() protoreflect.Message
func (*ArmResponse) Reset ¶
func (x *ArmResponse) Reset()
func (*ArmResponse) String ¶
func (x *ArmResponse) String() string
type CapabilitiesRequest ¶
type CapabilitiesRequest struct {
// contains filtered or unexported fields
}
func (*CapabilitiesRequest) Descriptor
deprecated
func (*CapabilitiesRequest) Descriptor() ([]byte, []int)
Deprecated: Use CapabilitiesRequest.ProtoReflect.Descriptor instead.
func (*CapabilitiesRequest) ProtoMessage ¶
func (*CapabilitiesRequest) ProtoMessage()
func (*CapabilitiesRequest) ProtoReflect ¶
func (x *CapabilitiesRequest) ProtoReflect() protoreflect.Message
func (*CapabilitiesRequest) Reset ¶
func (x *CapabilitiesRequest) Reset()
func (*CapabilitiesRequest) String ¶
func (x *CapabilitiesRequest) String() string
type CapabilitiesResponse ¶
type CapabilitiesResponse struct {
Datapaths []string `protobuf:"bytes,1,rep,name=datapaths,proto3" json:"datapaths,omitempty"`
Generators []string `protobuf:"bytes,2,rep,name=generators,proto3" json:"generators,omitempty"`
Schedulers []string `protobuf:"bytes,3,rep,name=schedulers,proto3" json:"schedulers,omitempty"`
Payloads []string `protobuf:"bytes,4,rep,name=payloads,proto3" json:"payloads,omitempty"`
HardwareTimestamps bool `protobuf:"varint,5,opt,name=hardware_timestamps,json=hardwareTimestamps,proto3" json:"hardware_timestamps,omitempty"`
// contains filtered or unexported fields
}
func (*CapabilitiesResponse) Descriptor
deprecated
func (*CapabilitiesResponse) Descriptor() ([]byte, []int)
Deprecated: Use CapabilitiesResponse.ProtoReflect.Descriptor instead.
func (*CapabilitiesResponse) GetDatapaths ¶
func (x *CapabilitiesResponse) GetDatapaths() []string
func (*CapabilitiesResponse) GetGenerators ¶
func (x *CapabilitiesResponse) GetGenerators() []string
func (*CapabilitiesResponse) GetHardwareTimestamps ¶
func (x *CapabilitiesResponse) GetHardwareTimestamps() bool
func (*CapabilitiesResponse) GetPayloads ¶
func (x *CapabilitiesResponse) GetPayloads() []string
func (*CapabilitiesResponse) GetSchedulers ¶
func (x *CapabilitiesResponse) GetSchedulers() []string
func (*CapabilitiesResponse) ProtoMessage ¶
func (*CapabilitiesResponse) ProtoMessage()
func (*CapabilitiesResponse) ProtoReflect ¶
func (x *CapabilitiesResponse) ProtoReflect() protoreflect.Message
func (*CapabilitiesResponse) Reset ¶
func (x *CapabilitiesResponse) Reset()
func (*CapabilitiesResponse) String ¶
func (x *CapabilitiesResponse) String() string
type ConfigureRequest ¶
type ConfigureRequest struct {
Flow *FlowSpec `protobuf:"bytes,1,opt,name=flow,proto3" json:"flow,omitempty"`
// contains filtered or unexported fields
}
func (*ConfigureRequest) Descriptor
deprecated
func (*ConfigureRequest) Descriptor() ([]byte, []int)
Deprecated: Use ConfigureRequest.ProtoReflect.Descriptor instead.
func (*ConfigureRequest) GetFlow ¶
func (x *ConfigureRequest) GetFlow() *FlowSpec
func (*ConfigureRequest) ProtoMessage ¶
func (*ConfigureRequest) ProtoMessage()
func (*ConfigureRequest) ProtoReflect ¶
func (x *ConfigureRequest) ProtoReflect() protoreflect.Message
func (*ConfigureRequest) Reset ¶
func (x *ConfigureRequest) Reset()
func (*ConfigureRequest) String ¶
func (x *ConfigureRequest) String() string
type ConfigureResponse ¶
type ConfigureResponse struct {
FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"`
DataPort uint32 `protobuf:"varint,2,opt,name=data_port,json=dataPort,proto3" json:"data_port,omitempty"` // ephemeral port the agent will listen/send on
// contains filtered or unexported fields
}
func (*ConfigureResponse) Descriptor
deprecated
func (*ConfigureResponse) Descriptor() ([]byte, []int)
Deprecated: Use ConfigureResponse.ProtoReflect.Descriptor instead.
func (*ConfigureResponse) GetDataPort ¶
func (x *ConfigureResponse) GetDataPort() uint32
func (*ConfigureResponse) GetFlowId ¶
func (x *ConfigureResponse) GetFlowId() string
func (*ConfigureResponse) ProtoMessage ¶
func (*ConfigureResponse) ProtoMessage()
func (*ConfigureResponse) ProtoReflect ¶
func (x *ConfigureResponse) ProtoReflect() protoreflect.Message
func (*ConfigureResponse) Reset ¶
func (x *ConfigureResponse) Reset()
func (*ConfigureResponse) String ¶
func (x *ConfigureResponse) String() string
type ControlClient ¶
type ControlClient interface {
// Health reports liveness and version.
Health(ctx context.Context, in *HealthRequest, opts ...grpc.CallOption) (*HealthResponse, error)
// Register enrolls an agent with a controller and returns a session id.
Register(ctx context.Context, in *RegisterRequest, opts ...grpc.CallOption) (*RegisterResponse, error)
// Capabilities reports the agent's available datapaths/generators/etc.
Capabilities(ctx context.Context, in *CapabilitiesRequest, opts ...grpc.CallOption) (*CapabilitiesResponse, error)
// Configure prepares a flow and assigns its ephemeral data port.
Configure(ctx context.Context, in *ConfigureRequest, opts ...grpc.CallOption) (*ConfigureResponse, error)
// Arm readies a configured flow to start (without sending yet).
Arm(ctx context.Context, in *ArmRequest, opts ...grpc.CallOption) (*ArmResponse, error)
// Start begins a flow.
Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*StartResponse, error)
// Stop ends a flow.
Stop(ctx context.Context, in *StopRequest, opts ...grpc.CallOption) (*StopResponse, error)
// Destroy tears a flow down and releases its resources.
Destroy(ctx context.Context, in *DestroyRequest, opts ...grpc.CallOption) (*DestroyResponse, error)
// TimeSync performs one four-timestamp clock-sync exchange.
TimeSync(ctx context.Context, in *TimeSyncRequest, opts ...grpc.CallOption) (*TimeSyncResponse, error)
// StreamTelemetry streams interval samples for a flow (or all flows).
StreamTelemetry(ctx context.Context, in *TelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[TelemetrySample], error)
}
ControlClient is the client API for Control service.
For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
Control is the controller <-> agent control plane (DESIGN.md §8). It carries coordination only; telemetry streams back on StreamTelemetry, and traffic flows over the data plane, never these RPCs.
func NewControlClient ¶
func NewControlClient(cc grpc.ClientConnInterface) ControlClient
type ControlServer ¶
type ControlServer interface {
// Health reports liveness and version.
Health(context.Context, *HealthRequest) (*HealthResponse, error)
// Register enrolls an agent with a controller and returns a session id.
Register(context.Context, *RegisterRequest) (*RegisterResponse, error)
// Capabilities reports the agent's available datapaths/generators/etc.
Capabilities(context.Context, *CapabilitiesRequest) (*CapabilitiesResponse, error)
// Configure prepares a flow and assigns its ephemeral data port.
Configure(context.Context, *ConfigureRequest) (*ConfigureResponse, error)
// Arm readies a configured flow to start (without sending yet).
Arm(context.Context, *ArmRequest) (*ArmResponse, error)
// Start begins a flow.
Start(context.Context, *StartRequest) (*StartResponse, error)
// Stop ends a flow.
Stop(context.Context, *StopRequest) (*StopResponse, error)
// Destroy tears a flow down and releases its resources.
Destroy(context.Context, *DestroyRequest) (*DestroyResponse, error)
// TimeSync performs one four-timestamp clock-sync exchange.
TimeSync(context.Context, *TimeSyncRequest) (*TimeSyncResponse, error)
// StreamTelemetry streams interval samples for a flow (or all flows).
StreamTelemetry(*TelemetryRequest, grpc.ServerStreamingServer[TelemetrySample]) error
// contains filtered or unexported methods
}
ControlServer is the server API for Control service. All implementations must embed UnimplementedControlServer for forward compatibility.
Control is the controller <-> agent control plane (DESIGN.md §8). It carries coordination only; telemetry streams back on StreamTelemetry, and traffic flows over the data plane, never these RPCs.
type Control_StreamTelemetryClient ¶
type Control_StreamTelemetryClient = grpc.ServerStreamingClient[TelemetrySample]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type Control_StreamTelemetryServer ¶
type Control_StreamTelemetryServer = grpc.ServerStreamingServer[TelemetrySample]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type DestroyRequest ¶
type DestroyRequest struct {
FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"`
// contains filtered or unexported fields
}
func (*DestroyRequest) Descriptor
deprecated
func (*DestroyRequest) Descriptor() ([]byte, []int)
Deprecated: Use DestroyRequest.ProtoReflect.Descriptor instead.
func (*DestroyRequest) GetFlowId ¶
func (x *DestroyRequest) GetFlowId() string
func (*DestroyRequest) ProtoMessage ¶
func (*DestroyRequest) ProtoMessage()
func (*DestroyRequest) ProtoReflect ¶
func (x *DestroyRequest) ProtoReflect() protoreflect.Message
func (*DestroyRequest) Reset ¶
func (x *DestroyRequest) Reset()
func (*DestroyRequest) String ¶
func (x *DestroyRequest) String() string
type DestroyResponse ¶
type DestroyResponse struct {
// contains filtered or unexported fields
}
func (*DestroyResponse) Descriptor
deprecated
func (*DestroyResponse) Descriptor() ([]byte, []int)
Deprecated: Use DestroyResponse.ProtoReflect.Descriptor instead.
func (*DestroyResponse) ProtoMessage ¶
func (*DestroyResponse) ProtoMessage()
func (*DestroyResponse) ProtoReflect ¶
func (x *DestroyResponse) ProtoReflect() protoreflect.Message
func (*DestroyResponse) Reset ¶
func (x *DestroyResponse) Reset()
func (*DestroyResponse) String ¶
func (x *DestroyResponse) String() string
type FlowRole ¶
type FlowRole int32
FlowRole is what a configured flow does. UNSPECIFIED is treated as SENDER, so an unset role defaults to sending.
const ( FlowRole_FLOW_ROLE_UNSPECIFIED FlowRole = 0 FlowRole_FLOW_ROLE_SENDER FlowRole = 1 FlowRole_FLOW_ROLE_RECEIVER FlowRole = 2 // binds an ephemeral port and drains+accounts inbound FlowRole_FLOW_ROLE_REFLECTOR FlowRole = 3 // echoes received packets (not yet implemented) // Request/response pair for emulations that need real bidirectional traffic // (e.g. https-browse): the responder binds an ephemeral port and serves the // bytes a requester asks for; the requester drives the behavior script. FlowRole_FLOW_ROLE_RESPONDER FlowRole = 4 // binds an ephemeral port, serves requested bytes FlowRole_FLOW_ROLE_REQUESTER FlowRole = 5 // drives a script, requesting objects from a responder )
func (FlowRole) Descriptor ¶
func (FlowRole) Descriptor() protoreflect.EnumDescriptor
func (FlowRole) EnumDescriptor
deprecated
func (FlowRole) Number ¶
func (x FlowRole) Number() protoreflect.EnumNumber
func (FlowRole) Type ¶
func (FlowRole) Type() protoreflect.EnumType
type FlowSpec ¶
type FlowSpec struct {
Generator string `protobuf:"bytes,1,opt,name=generator,proto3" json:"generator,omitempty"`
Payload string `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
Datapath string `protobuf:"bytes,3,opt,name=datapath,proto3" json:"datapath,omitempty"`
Target string `protobuf:"bytes,4,opt,name=target,proto3" json:"target,omitempty"` // host:port for udp/tcp
PacketSize uint32 `protobuf:"varint,5,opt,name=packet_size,json=packetSize,proto3" json:"packet_size,omitempty"`
Rate string `protobuf:"bytes,6,opt,name=rate,proto3" json:"rate,omitempty"` // e.g. "100Mbps"; empty = unlimited
Iface string `protobuf:"bytes,7,opt,name=iface,proto3" json:"iface,omitempty"` // NIC name for the afxdp datapath
Queue uint32 `protobuf:"varint,8,opt,name=queue,proto3" json:"queue,omitempty"` // NIC queue for the afxdp datapath
// emulation names an application-behavior emulation (e.g. "voip-call",
// "https-browse"); empty = a raw flow. params are its tuning knobs.
Emulation string `protobuf:"bytes,9,opt,name=emulation,proto3" json:"emulation,omitempty"`
// Stop condition (whichever is reached first; all empty = until-stopped).
Duration *durationpb.Duration `protobuf:"bytes,10,opt,name=duration,proto3" json:"duration,omitempty"`
Count uint64 `protobuf:"varint,11,opt,name=count,proto3" json:"count,omitempty"` // packets
Volume uint64 `protobuf:"varint,12,opt,name=volume,proto3" json:"volume,omitempty"` // bytes
Params map[string]string `` // emulation parameters
/* 140-byte string literal not displayed */
Seed int64 `protobuf:"varint,14,opt,name=seed,proto3" json:"seed,omitempty"` // RNG seed for reproducible emulated shapes
// transport carries request/response emulations (FLOW_ROLE_REQUESTER /
// FLOW_ROLE_RESPONDER): "tcp" or "udp". Ignored by other roles, which use the
// datapath field instead.
Transport string `protobuf:"bytes,15,opt,name=transport,proto3" json:"transport,omitempty"`
// role selects sender vs receiver (and, later, reflector). A receiver binds an
// ephemeral UDP port returned as ConfigureResponse.data_port and
// drains+accounts inbound packets instead of generating.
Role FlowRole `protobuf:"varint,21,opt,name=role,proto3,enum=loom.v1.FlowRole" json:"role,omitempty"`
// contains filtered or unexported fields
}
FlowSpec describes one flow to run, mirroring `loom run` flags.
func (*FlowSpec) Descriptor
deprecated
func (*FlowSpec) GetDatapath ¶
func (*FlowSpec) GetDuration ¶
func (x *FlowSpec) GetDuration() *durationpb.Duration
func (*FlowSpec) GetEmulation ¶
func (*FlowSpec) GetGenerator ¶
func (*FlowSpec) GetPacketSize ¶
func (*FlowSpec) GetPayload ¶
func (*FlowSpec) GetTransport ¶ added in v0.2.0
func (*FlowSpec) ProtoMessage ¶
func (*FlowSpec) ProtoMessage()
func (*FlowSpec) ProtoReflect ¶
func (x *FlowSpec) ProtoReflect() protoreflect.Message
type HealthRequest ¶
type HealthRequest struct {
// contains filtered or unexported fields
}
func (*HealthRequest) Descriptor
deprecated
func (*HealthRequest) Descriptor() ([]byte, []int)
Deprecated: Use HealthRequest.ProtoReflect.Descriptor instead.
func (*HealthRequest) ProtoMessage ¶
func (*HealthRequest) ProtoMessage()
func (*HealthRequest) ProtoReflect ¶
func (x *HealthRequest) ProtoReflect() protoreflect.Message
func (*HealthRequest) Reset ¶
func (x *HealthRequest) Reset()
func (*HealthRequest) String ¶
func (x *HealthRequest) String() string
type HealthResponse ¶
type HealthResponse struct {
Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // human-readable build version
Ready bool `protobuf:"varint,2,opt,name=ready,proto3" json:"ready,omitempty"`
ApiVersion uint32 `protobuf:"varint,3,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` // control-plane wire version the agent speaks
// contains filtered or unexported fields
}
func (*HealthResponse) Descriptor
deprecated
func (*HealthResponse) Descriptor() ([]byte, []int)
Deprecated: Use HealthResponse.ProtoReflect.Descriptor instead.
func (*HealthResponse) GetApiVersion ¶
func (x *HealthResponse) GetApiVersion() uint32
func (*HealthResponse) GetReady ¶
func (x *HealthResponse) GetReady() bool
func (*HealthResponse) GetVersion ¶
func (x *HealthResponse) GetVersion() string
func (*HealthResponse) ProtoMessage ¶
func (*HealthResponse) ProtoMessage()
func (*HealthResponse) ProtoReflect ¶
func (x *HealthResponse) ProtoReflect() protoreflect.Message
func (*HealthResponse) Reset ¶
func (x *HealthResponse) Reset()
func (*HealthResponse) String ¶
func (x *HealthResponse) String() string
type RegisterRequest ¶
type RegisterRequest struct {
AgentId string `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"`
Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"`
Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"`
ApiVersion uint32 `protobuf:"varint,4,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` // wire version the controller speaks
// contains filtered or unexported fields
}
func (*RegisterRequest) Descriptor
deprecated
func (*RegisterRequest) Descriptor() ([]byte, []int)
Deprecated: Use RegisterRequest.ProtoReflect.Descriptor instead.
func (*RegisterRequest) GetAgentId ¶
func (x *RegisterRequest) GetAgentId() string
func (*RegisterRequest) GetApiVersion ¶
func (x *RegisterRequest) GetApiVersion() uint32
func (*RegisterRequest) GetHostname ¶
func (x *RegisterRequest) GetHostname() string
func (*RegisterRequest) GetTags ¶
func (x *RegisterRequest) GetTags() []string
func (*RegisterRequest) ProtoMessage ¶
func (*RegisterRequest) ProtoMessage()
func (*RegisterRequest) ProtoReflect ¶
func (x *RegisterRequest) ProtoReflect() protoreflect.Message
func (*RegisterRequest) Reset ¶
func (x *RegisterRequest) Reset()
func (*RegisterRequest) String ¶
func (x *RegisterRequest) String() string
type RegisterResponse ¶
type RegisterResponse struct {
Session string `protobuf:"bytes,1,opt,name=session,proto3" json:"session,omitempty"`
// contains filtered or unexported fields
}
func (*RegisterResponse) Descriptor
deprecated
func (*RegisterResponse) Descriptor() ([]byte, []int)
Deprecated: Use RegisterResponse.ProtoReflect.Descriptor instead.
func (*RegisterResponse) GetSession ¶
func (x *RegisterResponse) GetSession() string
func (*RegisterResponse) ProtoMessage ¶
func (*RegisterResponse) ProtoMessage()
func (*RegisterResponse) ProtoReflect ¶
func (x *RegisterResponse) ProtoReflect() protoreflect.Message
func (*RegisterResponse) Reset ¶
func (x *RegisterResponse) Reset()
func (*RegisterResponse) String ¶
func (x *RegisterResponse) String() string
type StartRequest ¶
type StartRequest struct {
FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"`
// start_at_unix_nanos schedules the flow to begin at an absolute time on the
// agent's own clock (the controller translates a shared target time into each
// agent's clock using the TimeSync offset, so flows on different hosts begin in
// lockstep regardless of link latency). 0 (or a past time) starts immediately.
StartAtUnixNanos int64 `protobuf:"varint,2,opt,name=start_at_unix_nanos,json=startAtUnixNanos,proto3" json:"start_at_unix_nanos,omitempty"`
// report_interval_nanos is the reporting interval I. The agent emits one
// telemetry sample per interval boundary at start_at + k*I (anchored to the
// gate, or to first run when start_at is 0), each carrying that interval's
// delta. 0 = legacy free-running cadence (back-compat with older controllers).
ReportIntervalNanos int64 `protobuf:"varint,3,opt,name=report_interval_nanos,json=reportIntervalNanos,proto3" json:"report_interval_nanos,omitempty"`
// contains filtered or unexported fields
}
func (*StartRequest) Descriptor
deprecated
func (*StartRequest) Descriptor() ([]byte, []int)
Deprecated: Use StartRequest.ProtoReflect.Descriptor instead.
func (*StartRequest) GetFlowId ¶
func (x *StartRequest) GetFlowId() string
func (*StartRequest) GetReportIntervalNanos ¶ added in v0.4.0
func (x *StartRequest) GetReportIntervalNanos() int64
func (*StartRequest) GetStartAtUnixNanos ¶ added in v0.3.0
func (x *StartRequest) GetStartAtUnixNanos() int64
func (*StartRequest) ProtoMessage ¶
func (*StartRequest) ProtoMessage()
func (*StartRequest) ProtoReflect ¶
func (x *StartRequest) ProtoReflect() protoreflect.Message
func (*StartRequest) Reset ¶
func (x *StartRequest) Reset()
func (*StartRequest) String ¶
func (x *StartRequest) String() string
type StartResponse ¶
type StartResponse struct {
// contains filtered or unexported fields
}
func (*StartResponse) Descriptor
deprecated
func (*StartResponse) Descriptor() ([]byte, []int)
Deprecated: Use StartResponse.ProtoReflect.Descriptor instead.
func (*StartResponse) ProtoMessage ¶
func (*StartResponse) ProtoMessage()
func (*StartResponse) ProtoReflect ¶
func (x *StartResponse) ProtoReflect() protoreflect.Message
func (*StartResponse) Reset ¶
func (x *StartResponse) Reset()
func (*StartResponse) String ¶
func (x *StartResponse) String() string
type StopRequest ¶
type StopRequest struct {
FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"`
// contains filtered or unexported fields
}
func (*StopRequest) Descriptor
deprecated
func (*StopRequest) Descriptor() ([]byte, []int)
Deprecated: Use StopRequest.ProtoReflect.Descriptor instead.
func (*StopRequest) GetFlowId ¶
func (x *StopRequest) GetFlowId() string
func (*StopRequest) ProtoMessage ¶
func (*StopRequest) ProtoMessage()
func (*StopRequest) ProtoReflect ¶
func (x *StopRequest) ProtoReflect() protoreflect.Message
func (*StopRequest) Reset ¶
func (x *StopRequest) Reset()
func (*StopRequest) String ¶
func (x *StopRequest) String() string
type StopResponse ¶
type StopResponse struct {
// contains filtered or unexported fields
}
func (*StopResponse) Descriptor
deprecated
func (*StopResponse) Descriptor() ([]byte, []int)
Deprecated: Use StopResponse.ProtoReflect.Descriptor instead.
func (*StopResponse) ProtoMessage ¶
func (*StopResponse) ProtoMessage()
func (*StopResponse) ProtoReflect ¶
func (x *StopResponse) ProtoReflect() protoreflect.Message
func (*StopResponse) Reset ¶
func (x *StopResponse) Reset()
func (*StopResponse) String ¶
func (x *StopResponse) String() string
type TcpInfo ¶ added in v0.8.0
type TcpInfo struct {
TotalRetrans uint32 `protobuf:"varint,1,opt,name=total_retrans,json=totalRetrans,proto3" json:"total_retrans,omitempty"` // cumulative retransmitted segments
Lost uint32 `protobuf:"varint,2,opt,name=lost,proto3" json:"lost,omitempty"` // segments currently considered lost
RttUs uint32 `protobuf:"varint,3,opt,name=rtt_us,json=rttUs,proto3" json:"rtt_us,omitempty"` // smoothed round-trip time (microseconds)
RttvarUs uint32 `protobuf:"varint,4,opt,name=rttvar_us,json=rttvarUs,proto3" json:"rttvar_us,omitempty"` // round-trip time variance (microseconds)
SndCwnd uint32 `protobuf:"varint,5,opt,name=snd_cwnd,json=sndCwnd,proto3" json:"snd_cwnd,omitempty"` // congestion window (segments)
SndSsthresh uint32 `protobuf:"varint,6,opt,name=snd_ssthresh,json=sndSsthresh,proto3" json:"snd_ssthresh,omitempty"` // slow-start threshold (segments)
// contains filtered or unexported fields
}
TcpInfo carries a snapshot of the sender socket's kernel TCP_INFO, for link profiling (is TCP entering a bad state?). Populated only for the TCP datapath on the sending side; zero/absent otherwise.
func (*TcpInfo) Descriptor
deprecated
added in
v0.8.0
func (*TcpInfo) GetRttvarUs ¶ added in v0.8.0
func (*TcpInfo) GetSndCwnd ¶ added in v0.8.0
func (*TcpInfo) GetSndSsthresh ¶ added in v0.8.0
func (*TcpInfo) GetTotalRetrans ¶ added in v0.8.0
func (*TcpInfo) ProtoMessage ¶ added in v0.8.0
func (*TcpInfo) ProtoMessage()
func (*TcpInfo) ProtoReflect ¶ added in v0.8.0
func (x *TcpInfo) ProtoReflect() protoreflect.Message
type TelemetryRequest ¶
type TelemetryRequest struct {
FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"` // empty = all flows
// contains filtered or unexported fields
}
func (*TelemetryRequest) Descriptor
deprecated
func (*TelemetryRequest) Descriptor() ([]byte, []int)
Deprecated: Use TelemetryRequest.ProtoReflect.Descriptor instead.
func (*TelemetryRequest) GetFlowId ¶
func (x *TelemetryRequest) GetFlowId() string
func (*TelemetryRequest) ProtoMessage ¶
func (*TelemetryRequest) ProtoMessage()
func (*TelemetryRequest) ProtoReflect ¶
func (x *TelemetryRequest) ProtoReflect() protoreflect.Message
func (*TelemetryRequest) Reset ¶
func (x *TelemetryRequest) Reset()
func (*TelemetryRequest) String ¶
func (x *TelemetryRequest) String() string
type TelemetrySample ¶
type TelemetrySample struct {
FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"`
Nanos int64 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` // agent timestamp of this reading (the boundary)
Bytes uint64 `protobuf:"varint,3,opt,name=bytes,proto3" json:"bytes,omitempty"` // cumulative bytes
Packets uint64 `protobuf:"varint,4,opt,name=packets,proto3" json:"packets,omitempty"` // cumulative packets
BitsPerSec float64 `protobuf:"fixed64,5,opt,name=bits_per_sec,json=bitsPerSec,proto3" json:"bits_per_sec,omitempty"` // legacy; the controller computes rate from the delta
// Interval accounting, anchored to the scheduled-start gate. The agent reads
// its counters at each boundary start_at + k*I and reports the interval's delta,
// so the controller is a pure summer (no central rate clock).
IntervalIndex int64 `protobuf:"varint,6,opt,name=interval_index,json=intervalIndex,proto3" json:"interval_index,omitempty"` // k: 0 for [T,T+I], 1 for [T+I,T+2I], …; -1 on the final sample
IntervalBytes uint64 `protobuf:"varint,7,opt,name=interval_bytes,json=intervalBytes,proto3" json:"interval_bytes,omitempty"` // delta bytes during interval k
IntervalPackets uint64 `protobuf:"varint,8,opt,name=interval_packets,json=intervalPackets,proto3" json:"interval_packets,omitempty"` // delta packets during interval k
IntervalNanos int64 `protobuf:"varint,9,opt,name=interval_nanos,json=intervalNanos,proto3" json:"interval_nanos,omitempty"` // measured elapsed ns of interval k (rate = interval_bytes*8/interval_nanos)
Final bool `protobuf:"varint,10,opt,name=final,proto3" json:"final,omitempty"` // true on the completion sample (trailing partial interval)
Tcp *TcpInfo `protobuf:"bytes,11,opt,name=tcp,proto3" json:"tcp,omitempty"` // sender-side TCP_INFO diagnostics (nil for non-TCP datapaths)
// contains filtered or unexported fields
}
func (*TelemetrySample) Descriptor
deprecated
func (*TelemetrySample) Descriptor() ([]byte, []int)
Deprecated: Use TelemetrySample.ProtoReflect.Descriptor instead.
func (*TelemetrySample) GetBitsPerSec ¶
func (x *TelemetrySample) GetBitsPerSec() float64
func (*TelemetrySample) GetBytes ¶
func (x *TelemetrySample) GetBytes() uint64
func (*TelemetrySample) GetFinal ¶ added in v0.4.0
func (x *TelemetrySample) GetFinal() bool
func (*TelemetrySample) GetFlowId ¶
func (x *TelemetrySample) GetFlowId() string
func (*TelemetrySample) GetIntervalBytes ¶ added in v0.4.0
func (x *TelemetrySample) GetIntervalBytes() uint64
func (*TelemetrySample) GetIntervalIndex ¶ added in v0.4.0
func (x *TelemetrySample) GetIntervalIndex() int64
func (*TelemetrySample) GetIntervalNanos ¶ added in v0.4.0
func (x *TelemetrySample) GetIntervalNanos() int64
func (*TelemetrySample) GetIntervalPackets ¶ added in v0.4.0
func (x *TelemetrySample) GetIntervalPackets() uint64
func (*TelemetrySample) GetNanos ¶
func (x *TelemetrySample) GetNanos() int64
func (*TelemetrySample) GetPackets ¶
func (x *TelemetrySample) GetPackets() uint64
func (*TelemetrySample) GetTcp ¶ added in v0.8.0
func (x *TelemetrySample) GetTcp() *TcpInfo
func (*TelemetrySample) ProtoMessage ¶
func (*TelemetrySample) ProtoMessage()
func (*TelemetrySample) ProtoReflect ¶
func (x *TelemetrySample) ProtoReflect() protoreflect.Message
func (*TelemetrySample) Reset ¶
func (x *TelemetrySample) Reset()
func (*TelemetrySample) String ¶
func (x *TelemetrySample) String() string
type TimeSyncRequest ¶
type TimeSyncRequest struct {
T1 int64 `protobuf:"varint,1,opt,name=t1,proto3" json:"t1,omitempty"`
// contains filtered or unexported fields
}
TimeSync four-timestamp exchange: client stamps t1, server stamps t2 (recv) and t3 (send), client stamps t4 on receipt.
func (*TimeSyncRequest) Descriptor
deprecated
func (*TimeSyncRequest) Descriptor() ([]byte, []int)
Deprecated: Use TimeSyncRequest.ProtoReflect.Descriptor instead.
func (*TimeSyncRequest) GetT1 ¶
func (x *TimeSyncRequest) GetT1() int64
func (*TimeSyncRequest) ProtoMessage ¶
func (*TimeSyncRequest) ProtoMessage()
func (*TimeSyncRequest) ProtoReflect ¶
func (x *TimeSyncRequest) ProtoReflect() protoreflect.Message
func (*TimeSyncRequest) Reset ¶
func (x *TimeSyncRequest) Reset()
func (*TimeSyncRequest) String ¶
func (x *TimeSyncRequest) String() string
type TimeSyncResponse ¶
type TimeSyncResponse struct {
T1 int64 `protobuf:"varint,1,opt,name=t1,proto3" json:"t1,omitempty"`
T2 int64 `protobuf:"varint,2,opt,name=t2,proto3" json:"t2,omitempty"`
T3 int64 `protobuf:"varint,3,opt,name=t3,proto3" json:"t3,omitempty"`
// contains filtered or unexported fields
}
func (*TimeSyncResponse) Descriptor
deprecated
func (*TimeSyncResponse) Descriptor() ([]byte, []int)
Deprecated: Use TimeSyncResponse.ProtoReflect.Descriptor instead.
func (*TimeSyncResponse) GetT1 ¶
func (x *TimeSyncResponse) GetT1() int64
func (*TimeSyncResponse) GetT2 ¶
func (x *TimeSyncResponse) GetT2() int64
func (*TimeSyncResponse) GetT3 ¶
func (x *TimeSyncResponse) GetT3() int64
func (*TimeSyncResponse) ProtoMessage ¶
func (*TimeSyncResponse) ProtoMessage()
func (*TimeSyncResponse) ProtoReflect ¶
func (x *TimeSyncResponse) ProtoReflect() protoreflect.Message
func (*TimeSyncResponse) Reset ¶
func (x *TimeSyncResponse) Reset()
func (*TimeSyncResponse) String ¶
func (x *TimeSyncResponse) String() string
type UnimplementedControlServer ¶
type UnimplementedControlServer struct{}
UnimplementedControlServer must be embedded to have forward compatible implementations.
NOTE: this should be embedded by value instead of pointer to avoid a nil pointer dereference when methods are called.
func (UnimplementedControlServer) Arm ¶
func (UnimplementedControlServer) Arm(context.Context, *ArmRequest) (*ArmResponse, error)
func (UnimplementedControlServer) Capabilities ¶
func (UnimplementedControlServer) Capabilities(context.Context, *CapabilitiesRequest) (*CapabilitiesResponse, error)
func (UnimplementedControlServer) Configure ¶
func (UnimplementedControlServer) Configure(context.Context, *ConfigureRequest) (*ConfigureResponse, error)
func (UnimplementedControlServer) Destroy ¶
func (UnimplementedControlServer) Destroy(context.Context, *DestroyRequest) (*DestroyResponse, error)
func (UnimplementedControlServer) Health ¶
func (UnimplementedControlServer) Health(context.Context, *HealthRequest) (*HealthResponse, error)
func (UnimplementedControlServer) Register ¶
func (UnimplementedControlServer) Register(context.Context, *RegisterRequest) (*RegisterResponse, error)
func (UnimplementedControlServer) Start ¶
func (UnimplementedControlServer) Start(context.Context, *StartRequest) (*StartResponse, error)
func (UnimplementedControlServer) Stop ¶
func (UnimplementedControlServer) Stop(context.Context, *StopRequest) (*StopResponse, error)
func (UnimplementedControlServer) StreamTelemetry ¶
func (UnimplementedControlServer) StreamTelemetry(*TelemetryRequest, grpc.ServerStreamingServer[TelemetrySample]) error
func (UnimplementedControlServer) TimeSync ¶
func (UnimplementedControlServer) TimeSync(context.Context, *TimeSyncRequest) (*TimeSyncResponse, error)
type UnsafeControlServer ¶
type UnsafeControlServer interface {
// contains filtered or unexported methods
}
UnsafeControlServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to ControlServer will result in compilation errors.