summaryrefslogtreecommitdiffhomepage
path: root/tools/grpc/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/grpc/cpp')
-rw-r--r--tools/grpc/cpp/gobgp_api_client.cc65
1 files changed, 32 insertions, 33 deletions
diff --git a/tools/grpc/cpp/gobgp_api_client.cc b/tools/grpc/cpp/gobgp_api_client.cc
index 5ff21872..2d0b0960 100644
--- a/tools/grpc/cpp/gobgp_api_client.cc
+++ b/tools/grpc/cpp/gobgp_api_client.cc
@@ -27,19 +27,28 @@ class GrpcClient {
GrpcClient(std::shared_ptr<Channel> channel) : stub_(GobgpApi::NewStub(channel)) {}
void GetAllActiveAnnounces(unsigned int route_family) {
ClientContext context;
- gobgpapi::Arguments arguments;
+ gobgpapi::Table table;
- arguments.set_rf(route_family);
+ table.set_family(route_family);
// We could specify certain neighbor here
- arguments.set_name("");
- arguments.set_resource(gobgpapi::Resource::GLOBAL);
+ table.set_name("");
+ table.set_type(gobgpapi::Resource::GLOBAL);
- auto destinations_list = stub_->GetRib(&context, arguments);
+ gobgpapi::Table response_table;
- gobgpapi::Destination current_destination;
+ auto status = stub_->GetRib(&context, table, &response_table);
+
+ if (!status.ok()) {
+ // error_message
+ std::cout << "Problem with RPC: " << status.error_code() << " message " << status.error_message() << std::endl;
+ return;
+ } else {
+ // std::cout << "RPC working well" << std::endl;
+ }
std::cout << "List of announced prefixes for route family: " << route_family << std::endl << std::endl;
- while (destinations_list->Read(&current_destination)) {
+
+ for (auto current_destination : response_table.destinations()) {
std::cout << "Prefix: " << current_destination.prefix() << std::endl;
//std::cout << "Paths size: " << current_destination.paths_size() << std::endl;
@@ -69,17 +78,9 @@ class GrpcClient {
std::cout << "NLRI: " << decode_path(&gobgp_lib_path) << std::endl;
}
-
- Status status = destinations_list->Finish();
- if (!status.ok()) {
- // error_message
- std::cout << "Problem with RPC: " << status.error_code() << " message " << status.error_message() << std::endl;
- } else {
- // std::cout << "RPC working well" << std::endl;
- }
}
-
- void AnnounceFlowSpecPrefix() {
+
+ void AnnounceFlowSpecPrefix(bool withdraw) {
const gobgpapi::ModPathArguments current_mod_path_arguments;
unsigned int AFI_IP = 1;
@@ -87,8 +88,7 @@ class GrpcClient {
unsigned int ipv4_flow_spec_route_family = AFI_IP<<16 | SAFI_FLOW_SPEC_UNICAST;
gobgpapi::Path* current_path = new gobgpapi::Path;
- // If you want withdraw, please use it
- // current_path->set_is_withdraw(true);
+ current_path->set_is_withdraw(withdraw);
/*
buf:
@@ -146,7 +146,7 @@ class GrpcClient {
}
}
- void AnnounceUnicastPrefix() {
+ void AnnounceUnicastPrefix(bool withdraw) {
const gobgpapi::ModPathArguments current_mod_path_arguments;
unsigned int AFI_IP = 1;
@@ -154,8 +154,7 @@ class GrpcClient {
unsigned int ipv4_unicast_route_family = AFI_IP<<16 | SAFI_UNICAST;
gobgpapi::Path* current_path = new gobgpapi::Path;
- // If you want withdraw, please use it
- // current_path->set_is_withdraw(true);
+ current_path->set_is_withdraw(withdraw);
/*
buf:
@@ -213,9 +212,9 @@ class GrpcClient {
}
}
- std::string GetAllNeighbor(std::string neighbor_ip) {
+ std::string GetNeighbor(std::string neighbor_ip) {
gobgpapi::Arguments request;
- request.set_rf(4);
+ request.set_family(4);
request.set_name(neighbor_ip);
ClientContext context;
@@ -225,12 +224,12 @@ class GrpcClient {
if (status.ok()) {
gobgpapi::PeerConf peer_conf = peer.conf();
- gobgpapi::PeerInfo peer_info = peer.info();
+ gobgpapi::PeerState peer_info = peer.info();
std::stringstream buffer;
buffer
- << "Peer AS: " << peer_conf.remote_as() << "\n"
+ << "Peer AS: " << peer_conf.peer_as() << "\n"
<< "Peer router id: " << peer_conf.id() << "\n"
<< "Peer flops: " << peer_info.flops() << "\n"
<< "BGP state: " << peer_info.bgp_state();
@@ -246,14 +245,14 @@ class GrpcClient {
};
int main(int argc, char** argv) {
- GrpcClient gobgp_client(grpc::CreateChannel("localhost:8080", grpc::InsecureCredentials()));
+ GrpcClient gobgp_client(grpc::CreateChannel("localhost:8080", grpc::InsecureChannelCredentials()));
- //std::string reply = gobgp_client.GetAllNeighbor("213.133.111.200");
- //std::cout << "We received: " << reply << std::endl;
+ std::string reply = gobgp_client.GetNeighbor("213.133.111.200");
+ std::cout << "Neighbor information: " << reply << std::endl;
- gobgp_client.AnnounceUnicastPrefix();
+ gobgp_client.AnnounceUnicastPrefix(false);
- gobgp_client.AnnounceFlowSpecPrefix();
+ gobgp_client.AnnounceFlowSpecPrefix(false);
unsigned int AFI_IP = 1;
unsigned int SAFI_UNICAST = 1;
@@ -261,10 +260,10 @@ int main(int argc, char** argv) {
unsigned int ipv4_unicast_route_family = AFI_IP<<16 | SAFI_UNICAST;
unsigned int ipv4_flow_spec_route_family = AFI_IP<<16 | SAFI_FLOW_SPEC_UNICAST;
-
+
gobgp_client.GetAllActiveAnnounces(ipv4_unicast_route_family);
std::cout << std::endl << std::endl;
gobgp_client.GetAllActiveAnnounces(ipv4_flow_spec_route_family);
-
+
return 0;
}