blob: 229db561a8b9141121eea16d29fcc395c8ae80ce [file] [log] [blame]
syntax = "proto3";
package ix;
message GetIXMembersRequest {
// IX ID from PeeringDB
int64 id = 1;
}
message PeeringDBMember {
int64 asn = 1;
// AS/network name.
string name = 2;
message Router {
// Per PeeringDB, at least one of the following two address families
// will be set.
string ipv4 = 1;
string ipv6 = 2;
}
repeated Router routers = 3;
}
message GetIXMembersResponse {
repeated PeeringDBMember members = 1;
}
service PeeringDBProxy {
// GetIXMembers returns information about membership of a given PeeringDB IX.
rpc GetIXMembers(GetIXMembersRequest) returns (GetIXMembersResponse);
}
message IRRQueryRequest {
// AS to query for. This needs be the AS number of the AS, possibly
// prefixed with 'as'/'AS'.
string as = 1;
}
message IRRAttribute {
message ImportExport {
message Expression {
string peering = 1;
string router_us = 2;
string router_them = 3;
repeated string actions = 4;
}
string protocol_from = 1;
string protocol_into = 2;
repeated Expression expressions = 3;
string filter = 4;
}
oneof value {
string remarks = 1;
ImportExport import = 2;
ImportExport export = 3;
}
}
message IRRQueryResponse {
enum Source {
SOURCE_INVALID = 0;
SOURCE_RIPE = 1;
SOURCE_ARIN = 2;
}
Source source = 1;
repeated IRRAttribute attributes = 2;
}
service IRR {
// Query returns parsed RPSL data from supported IRRs for a given aut-num.
rpc Query(IRRQueryRequest) returns (IRRQueryResponse);
}
message ProcessorStatusRequest {
}
message ProcessorStatusResponse {
message Processor {
enum Status {
STATUS_INVALID = 0;
STATUS_OK = 1;
STATUS_ERROR = 2;
}
string name = 1;
Status status = 2;
int64 last_run = 3;
int64 next_run = 4;
}
repeated Processor processors = 1;
}
message PeerSummaryRequest {
}
message PeerSummaryResponse {
PeeringDBMember peeringdb_info = 1;
enum Status {
STATUS_INVALID = 0;
STATUS_OK = 1;
STATUS_FAILED = 2;
STATUS_UNKNOWN = 3;
}
Status check_status = 2;
}
message PeerDetailsRequest {
int64 asn = 1;
}
message PeerDetailsResponse {
message Check {
enum Status {
STATUS_INVALID = 0;
STATUS_OK = 1;
STATUS_FAILED = 2;
};
string name = 1;
Status status = 2;
int64 time = 3;
string msg = 4;
};
repeated Check checks = 1;
message AllowedPrefix {
string prefix = 1;
int64 max_length = 2;
string ta = 3;
};
repeated AllowedPrefix allowed_prefixes = 2;
PeeringDBMember peeringdb_info = 3;
}
message RouterHeartbeatRequest {
string name = 1;
string current_version = 2;
}
message RouterHeartbeatResponse {
message ASConfig {
int64 asn = 1;
message Router {
string ipv6 = 1;
string ipv4 = 2;
string password = 3;
};
repeated Router routers = 2;
message AllowedPrefix {
string prefix = 1;
int64 max_length = 2;
};
repeated AllowedPrefix prefixes = 3;
};
repeated ASConfig as_configs = 1;
string version = 2;
uint64 call_again = 3;
}
message PeerSecretsRequest {
int64 asn = 1;
}
message PeerSecretsResponse {
bytes pgp_data = 1;
}
service Verifier {
rpc ProcessorStatus(ProcessorStatusRequest) returns (ProcessorStatusResponse);
rpc PeerSummary(PeerSummaryRequest) returns (stream PeerSummaryResponse);
rpc PeerDetails(PeerDetailsRequest) returns (PeerDetailsResponse);
rpc RouterHeartbeat(RouterHeartbeatRequest) returns (RouterHeartbeatResponse);
rpc PeerSecrets(PeerSecretsRequest) returns (PeerSecretsResponse);
}
message KeyInfoRequest {
// Public key fingerprint. 20 bytes.
bytes fingerprint = 1;
enum Caching {
CACHING_INVALID = 0;
// Contact keyservers only if not locally (positively or negatively) cached.
CACHING_AUTO = 1;
// Force contacting keyservers.
CACHING_FORCE_REMOTE = 2;
// Force not contacting keyservers.
CACHING_FORCE_LOCAL = 3;
};
Caching caching = 2;
}
message KeyInfoResponse {
// Currently no data is returned. An error will be returned if the key doesn't exist.
}
message EncryptRequest {
// A chunk of plaintext data. Small enough to fit in gRPC message (<<2 MiB).
bytes data = 1;
enum ChunkInfo {
CHUNK_INFO_INVALID = 0;
// More data to come after this chunked.
CHUNK_INFO_MORE = 1;
// Last chunk.
CHUNK_LAST = 2;
};
ChunkInfo info = 2;
// Fingerprint of key to encrypt with. Only the first chunk is consulted,
// the key in the rest of the chunks are ignored. 20 bytes.
bytes fingerprint = 3;
}
message EncryptResponse {
// A chunk of encrypted data. Small enough to fit in gRPC message (<<2 MiB).
bytes data = 1;
enum ChunkInfo {
CHUNK_INFO_INVALID = 0;
// More data to come after this chunked.
CHUNK_INFO_MORE = 1;
// Last chunk.
CHUNK_LAST = 2;
};
ChunkInfo info = 2;
}
service PGPEncryptor {
// KeyInfo returns information about a given key from the public keyserver infrastructure.
// If key doesn't exist, error (NotFound).
rpc KeyInfo(KeyInfoRequest) returns (KeyInfoResponse);
// Encrypt encrypts a given data blob with a given key from public keyserver infrastructure.
// If key doesn't exist, error (NotFound).
rpc Encrypt(stream EncryptRequest) returns (stream EncryptResponse);
}