syntax = "proto3"; package go.micro.router; // Router service is used by the proxy to lookup routes service Router { rpc Lookup(LookupRequest) returns (LookupResponse) {}; rpc Watch(WatchRequest) returns (stream Event) {}; rpc Advertise(Request) returns (stream Advert) {}; rpc Process(Advert) returns (ProcessResponse) {}; rpc Status(Request) returns (StatusResponse) {}; } service Table { rpc Create(Route) returns (CreateResponse) {}; rpc Delete(Route) returns (DeleteResponse) {}; rpc Update(Route) returns (UpdateResponse) {}; rpc List(Request) returns (ListResponse) {}; rpc Query(QueryRequest) returns (QueryResponse) {}; } // Empty request message Request {} // ListResponse is returned by List message ListResponse { repeated Route routes = 1; } // LookupRequest is made to Lookup message LookupRequest { Query query = 1; } // LookupResponse is returned by Lookup message LookupResponse { repeated Route routes = 1; } message QueryRequest{ Query query = 1; } message QueryResponse { repeated Route routes = 1; } // WatchRequest is made to Watch Router message WatchRequest {} // AdvertType defines the type of advert enum AdvertType { AdvertAnnounce = 0; AdvertUpdate = 1; } // Advert is router advertsement streamed by Watch message Advert { // id of the advertising router string id = 1; // type of advertisement AdvertType type = 2; // unix timestamp of the advertisement int64 timestamp = 3; // TTL of the Advert int64 ttl = 4; // events is a list of advertised events repeated Event events = 5; } // ProcessResponse is returned by Process message ProcessResponse {} // CreateResponse is returned by Create message CreateResponse {} // DeleteResponse is returned by Delete message DeleteResponse {} // UpdateResponse is returned by Update message UpdateResponse {} // EventType defines the type of event enum EventType { Create = 0; Delete = 1; Update = 2; } // Event is routing table event message Event { // type of event EventType type = 1; // unix timestamp of event int64 timestamp = 2; // service route Route route = 3; } // Query is passed in a LookupRequest message Query { // service to lookup string service = 1; // gateway to lookup string gateway = 2; // network to lookup string network = 3; } // Route is a service route message Route { // service for the route string service = 1; // the address that advertise this route string address = 2; // gateway as the next hop string gateway = 3; // the network for this destination string network = 4; // the network link string link = 5; // the metric / score of this route int64 metric = 6; } message Status { string code = 1; string error = 2; } message StatusResponse { Status status = 1; }