blob: 68806be9f9acfbf1688d8a1afbc56b75b36c0d06 [file] [log] [blame]
// Copyright 2022 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
syntax = "proto3";
package pw.transfer;
option java_package = "pw.transfer";
option java_outer_classname = "ConfigProtos";
// Configuration for the integration test client.
message ClientConfig {
// Transfer resource ID to use.
uint32 resource_id = 1;
// Path to the file containing the data to write to the server.
string file = 2;
// The maximum number of times a packet will attempt to be sent before the
// transfer aborts due to a lack of response.
uint32 max_retries = 3;
// The maximum time to wait for a response to the first packet sent to the
// pw_transfer server before attempting to retry. Extending this can help
// work around cases where transfer initialization takes a long time.
//
// Note: This parameter is only supported on Java transfer clients.
// TODO(tpudlik): google.protobuf.Duration?
uint32 initial_chunk_timeout_ms = 4;
// The maximum time to wait for a response to a sent packet before attempting
// to re-send the packet.
//
// TODO(tpudlik): google.protobuf.Duration?
uint32 chunk_timeout_ms = 5;
}
// Configuration for the integration test server.
message ServerConfig {
// Transfer ID to use.
uint32 resource_id = 1;
// Path to the file to which the server should write out data it receives from
// the client.
string file = 2;
// Size of the chunk buffer used by the transfer thread, in bytes.
uint32 chunk_size_bytes = 3;
// Window size, in bytes.
uint32 pending_bytes = 4;
// TODO(tpudlik): google.protobuf.Duration?
uint32 chunk_timeout_seconds = 5;
uint32 transfer_service_retries = 6;
uint32 extend_window_divisor = 7;
}
// Configuration for the HdlcPacketizer proxy filter.
message HdlcPacketizerConfig {}
// Configuration for the DataDropper proxy filter.
message DataDropperConfig {
// Rate at which to drop data
float rate = 1;
// Seed to use for the rand number generator used for determining
// when data is dropped.
int64 seed = 2;
}
// Configuration for the RateLimiter proxy filter.
message RateLimiterConfig {
// Rate limit, in bytes/sec.
float rate = 1;
}
// Configuration for the DataTransposer proxy filter.
message DataTransposerConfig {
// Rate at which to transpose data. Probability of transposition
// between 0.0 and 1.0.
float rate = 1;
// Maximum time a chunk of data will be held for Transposition. After this
// time has elapsed, the packet is sent in order.
float timeout = 2;
// Seed to use for the rand number generator used for determining
// when data is transposed.
int64 seed = 3;
}
// Configuration for a single stage in the proxy filter stack.
message FilterConfig {
oneof filter {
HdlcPacketizerConfig hdlc_packetizer = 1;
DataDropperConfig data_dropper = 2;
RateLimiterConfig rate_limiter = 3;
DataTransposerConfig data_transposer = 4;
}
}
message ProxyConfig {
// Filters are listed in order of execution. I.e. the first filter listed
// will get the received data first then pass it on the the second listed
// filter. That process repeats until the last filter send the data to the
// other side of the proxy.
repeated FilterConfig client_filter_stack = 1;
repeated FilterConfig server_filter_stack = 2;
}