Sergiusz Bazanski | e653e6a | 2019-07-20 16:36:00 +0200 | [diff] [blame] | 1 | syntax = "proto3"; |
| 2 | package ix; |
| 3 | |
| 4 | message GetIXMembersRequest { |
| 5 | // IX ID from PeeringDB |
| 6 | int64 id = 1; |
| 7 | } |
| 8 | |
Sergiusz Bazanski | 0607aba | 2019-08-02 13:38:22 +0200 | [diff] [blame] | 9 | message PeeringDBMember { |
| 10 | int64 asn = 1; |
| 11 | // AS/network name. |
| 12 | string name = 2; |
| 13 | |
| 14 | message Router { |
| 15 | // Per PeeringDB, at least one of the following two address families |
| 16 | // will be set. |
| 17 | string ipv4 = 1; |
| 18 | string ipv6 = 2; |
| 19 | } |
| 20 | repeated Router routers = 3; |
| 21 | } |
| 22 | |
Sergiusz Bazanski | e653e6a | 2019-07-20 16:36:00 +0200 | [diff] [blame] | 23 | message GetIXMembersResponse { |
Sergiusz Bazanski | 1fad2e5 | 2019-08-01 20:16:27 +0200 | [diff] [blame] | 24 | repeated PeeringDBMember members = 1; |
Sergiusz Bazanski | e653e6a | 2019-07-20 16:36:00 +0200 | [diff] [blame] | 25 | } |
| 26 | |
| 27 | service PeeringDBProxy { |
| 28 | // GetIXMembers returns information about membership of a given PeeringDB IX. |
| 29 | rpc GetIXMembers(GetIXMembersRequest) returns (GetIXMembersResponse); |
| 30 | } |
Sergiusz Bazanski | 6eaaaf9 | 2019-08-02 01:25:31 +0200 | [diff] [blame] | 31 | |
| 32 | message IRRQueryRequest { |
| 33 | // AS to query for. This needs be the AS number of the AS, possibly |
| 34 | // prefixed with 'as'/'AS'. |
| 35 | string as = 1; |
| 36 | } |
| 37 | |
| 38 | message IRRAttribute { |
| 39 | message ImportExport { |
| 40 | message Expression { |
| 41 | string peering = 1; |
| 42 | string router_us = 2; |
| 43 | string router_them = 3; |
| 44 | repeated string actions = 4; |
| 45 | } |
| 46 | string protocol_from = 1; |
| 47 | string protocol_into = 2; |
| 48 | repeated Expression expressions = 3; |
| 49 | string filter = 4; |
| 50 | } |
| 51 | |
| 52 | oneof value { |
| 53 | string remarks = 1; |
| 54 | ImportExport import = 2; |
| 55 | ImportExport export = 3; |
| 56 | } |
| 57 | } |
Sergiusz Bazanski | 1fad2e5 | 2019-08-01 20:16:27 +0200 | [diff] [blame] | 58 | |
Sergiusz Bazanski | 6eaaaf9 | 2019-08-02 01:25:31 +0200 | [diff] [blame] | 59 | message IRRQueryResponse { |
| 60 | enum Source { |
| 61 | SOURCE_INVALID = 0; |
| 62 | SOURCE_RIPE = 1; |
| 63 | SOURCE_ARIN = 2; |
| 64 | } |
| 65 | Source source = 1; |
| 66 | repeated IRRAttribute attributes = 2; |
| 67 | } |
| 68 | |
| 69 | service IRR { |
| 70 | // Query returns parsed RPSL data from supported IRRs for a given aut-num. |
| 71 | rpc Query(IRRQueryRequest) returns (IRRQueryResponse); |
| 72 | } |
Sergiusz Bazanski | 0e223ec | 2019-07-23 00:53:50 +0200 | [diff] [blame] | 73 | |
Sergiusz Bazanski | 1fad2e5 | 2019-08-01 20:16:27 +0200 | [diff] [blame] | 74 | message ProcessorStatusRequest { |
| 75 | } |
| 76 | |
| 77 | message ProcessorStatusResponse { |
| 78 | message Processor { |
| 79 | enum Status { |
| 80 | STATUS_INVALID = 0; |
| 81 | STATUS_OK = 1; |
| 82 | STATUS_ERROR = 2; |
| 83 | } |
| 84 | string name = 1; |
| 85 | Status status = 2; |
| 86 | int64 last_run = 3; |
| 87 | int64 next_run = 4; |
| 88 | } |
| 89 | repeated Processor processors = 1; |
| 90 | } |
| 91 | |
| 92 | message PeerSummaryRequest { |
| 93 | } |
| 94 | |
| 95 | message PeerSummaryResponse { |
| 96 | PeeringDBMember peeringdb_info = 1; |
| 97 | enum Status { |
| 98 | STATUS_INVALID = 0; |
| 99 | STATUS_OK = 1; |
| 100 | STATUS_FAILED = 2; |
| 101 | STATUS_UNKNOWN = 3; |
| 102 | } |
| 103 | Status check_status = 2; |
| 104 | } |
| 105 | |
| 106 | message PeerDetailsRequest { |
| 107 | int64 asn = 1; |
| 108 | } |
| 109 | |
| 110 | message PeerDetailsResponse { |
| 111 | message Check { |
| 112 | enum Status { |
| 113 | STATUS_INVALID = 0; |
| 114 | STATUS_OK = 1; |
| 115 | STATUS_FAILED = 2; |
| 116 | }; |
| 117 | string name = 1; |
| 118 | Status status = 2; |
| 119 | int64 time = 3; |
| 120 | string msg = 4; |
| 121 | }; |
| 122 | repeated Check checks = 1; |
| 123 | |
| 124 | message AllowedPrefix { |
| 125 | string prefix = 1; |
| 126 | int64 max_length = 2; |
| 127 | string ta = 3; |
| 128 | }; |
| 129 | repeated AllowedPrefix allowed_prefixes = 2; |
| 130 | PeeringDBMember peeringdb_info = 3; |
| 131 | } |
| 132 | |
Serge Bazanski | ec71cb5 | 2019-08-22 18:13:13 +0200 | [diff] [blame] | 133 | message RouterHeartbeatRequest { |
| 134 | string name = 1; |
| 135 | string current_version = 2; |
| 136 | } |
| 137 | |
| 138 | message RouterHeartbeatResponse { |
| 139 | message ASConfig { |
| 140 | int64 asn = 1; |
| 141 | message Router { |
| 142 | string ipv6 = 1; |
| 143 | string ipv4 = 2; |
| 144 | string password = 3; |
| 145 | }; |
| 146 | repeated Router routers = 2; |
| 147 | message AllowedPrefix { |
| 148 | string prefix = 1; |
| 149 | int64 max_length = 2; |
| 150 | }; |
| 151 | repeated AllowedPrefix prefixes = 3; |
| 152 | }; |
| 153 | repeated ASConfig as_configs = 1; |
| 154 | string version = 2; |
| 155 | uint64 call_again = 3; |
| 156 | } |
| 157 | |
| 158 | message PeerSecretsRequest { |
| 159 | int64 asn = 1; |
| 160 | } |
| 161 | |
| 162 | message PeerSecretsResponse { |
| 163 | bytes pgp_data = 1; |
| 164 | } |
| 165 | |
Sergiusz Bazanski | 1fad2e5 | 2019-08-01 20:16:27 +0200 | [diff] [blame] | 166 | service Verifier { |
| 167 | rpc ProcessorStatus(ProcessorStatusRequest) returns (ProcessorStatusResponse); |
| 168 | rpc PeerSummary(PeerSummaryRequest) returns (stream PeerSummaryResponse); |
| 169 | rpc PeerDetails(PeerDetailsRequest) returns (PeerDetailsResponse); |
Serge Bazanski | ec71cb5 | 2019-08-22 18:13:13 +0200 | [diff] [blame] | 170 | rpc RouterHeartbeat(RouterHeartbeatRequest) returns (RouterHeartbeatResponse); |
| 171 | rpc PeerSecrets(PeerSecretsRequest) returns (PeerSecretsResponse); |
Sergiusz Bazanski | 1fad2e5 | 2019-08-01 20:16:27 +0200 | [diff] [blame] | 172 | } |
| 173 | |
Sergiusz Bazanski | 0e223ec | 2019-07-23 00:53:50 +0200 | [diff] [blame] | 174 | message KeyInfoRequest { |
| 175 | // Public key fingerprint. 20 bytes. |
| 176 | bytes fingerprint = 1; |
| 177 | enum Caching { |
| 178 | CACHING_INVALID = 0; |
| 179 | // Contact keyservers only if not locally (positively or negatively) cached. |
| 180 | CACHING_AUTO = 1; |
| 181 | // Force contacting keyservers. |
| 182 | CACHING_FORCE_REMOTE = 2; |
| 183 | // Force not contacting keyservers. |
| 184 | CACHING_FORCE_LOCAL = 3; |
| 185 | }; |
| 186 | Caching caching = 2; |
| 187 | } |
| 188 | |
| 189 | message KeyInfoResponse { |
| 190 | // Currently no data is returned. An error will be returned if the key doesn't exist. |
| 191 | } |
| 192 | |
| 193 | message EncryptRequest { |
| 194 | // A chunk of plaintext data. Small enough to fit in gRPC message (<<2 MiB). |
| 195 | bytes data = 1; |
| 196 | enum ChunkInfo { |
| 197 | CHUNK_INFO_INVALID = 0; |
| 198 | // More data to come after this chunked. |
| 199 | CHUNK_INFO_MORE = 1; |
| 200 | // Last chunk. |
| 201 | CHUNK_LAST = 2; |
| 202 | }; |
| 203 | ChunkInfo info = 2; |
| 204 | // Fingerprint of key to encrypt with. Only the first chunk is consulted, |
| 205 | // the key in the rest of the chunks are ignored. 20 bytes. |
| 206 | bytes fingerprint = 3; |
| 207 | } |
| 208 | |
| 209 | message EncryptResponse { |
| 210 | // A chunk of encrypted data. Small enough to fit in gRPC message (<<2 MiB). |
| 211 | bytes data = 1; |
| 212 | enum ChunkInfo { |
| 213 | CHUNK_INFO_INVALID = 0; |
| 214 | // More data to come after this chunked. |
| 215 | CHUNK_INFO_MORE = 1; |
| 216 | // Last chunk. |
| 217 | CHUNK_LAST = 2; |
| 218 | }; |
| 219 | ChunkInfo info = 2; |
| 220 | } |
| 221 | |
| 222 | service PGPEncryptor { |
| 223 | // KeyInfo returns information about a given key from the public keyserver infrastructure. |
| 224 | // If key doesn't exist, error (NotFound). |
| 225 | rpc KeyInfo(KeyInfoRequest) returns (KeyInfoResponse); |
| 226 | // Encrypt encrypts a given data blob with a given key from public keyserver infrastructure. |
| 227 | // If key doesn't exist, error (NotFound). |
| 228 | rpc Encrypt(stream EncryptRequest) returns (stream EncryptResponse); |
Serge Bazanski | 49bf87f | 2019-08-11 23:51:19 +0200 | [diff] [blame] | 229 | } |