From 6b9dbe48fec7a4d60f62e437f4fefe7e7e7240ca Mon Sep 17 00:00:00 2001
From: Oliver Herms <oliver.herms@exaring.de>
Date: Fri, 17 Jul 2020 10:42:27 +0200
Subject: [PATCH] RIS: Add VRF string to DumpRIB and make it usable from riscli

---
 cmd/ris/api/ris.pb.go       | 86 ++++++++++++++++++++-----------------
 cmd/ris/api/ris.proto       |  1 +
 cmd/ris/risserver/server.go |  9 +++-
 cmd/riscli/dump_loc_rib.go  |  5 ++-
 cmd/riscli/lpm.go           |  5 ++-
 cmd/riscli/main.go          |  5 +++
 6 files changed, 66 insertions(+), 45 deletions(-)

diff --git a/cmd/ris/api/ris.pb.go b/cmd/ris/api/ris.pb.go
index 8ce66b56..f6af0692 100644
--- a/cmd/ris/api/ris.pb.go
+++ b/cmd/ris/api/ris.pb.go
@@ -501,6 +501,7 @@ func (m *RIBUpdate) GetRoute() *api1.Route {
 type DumpRIBRequest struct {
 	Router               string                 `protobuf:"bytes,1,opt,name=router,proto3" json:"router,omitempty"`
 	VrfId                uint64                 `protobuf:"varint,2,opt,name=vrf_id,json=vrfId,proto3" json:"vrf_id,omitempty"`
+	Vrf                  string                 `protobuf:"bytes,4,opt,name=vrf,proto3" json:"vrf,omitempty"`
 	Afisafi              DumpRIBRequest_AFISAFI `protobuf:"varint,3,opt,name=afisafi,proto3,enum=bio.ris.DumpRIBRequest_AFISAFI" json:"afisafi,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
 	XXX_unrecognized     []byte                 `json:"-"`
@@ -546,6 +547,13 @@ func (m *DumpRIBRequest) GetVrfId() uint64 {
 	return 0
 }
 
+func (m *DumpRIBRequest) GetVrf() string {
+	if m != nil {
+		return m.Vrf
+	}
+	return ""
+}
+
 func (m *DumpRIBRequest) GetAfisafi() DumpRIBRequest_AFISAFI {
 	if m != nil {
 		return m.Afisafi
@@ -740,49 +748,49 @@ func init() {
 }
 
 var fileDescriptor_ffe1202aa518913f = []byte{
-	// 670 bytes of a gzipped FileDescriptorProto
+	// 669 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x5d, 0x4f, 0xdb, 0x3c,
 	0x14, 0x26, 0x04, 0x1a, 0x7a, 0xfa, 0x42, 0x8b, 0x79, 0x79, 0x09, 0x79, 0x2f, 0xd6, 0x45, 0x13,
 	0x2a, 0x42, 0x4b, 0x51, 0x99, 0x98, 0xa6, 0x7d, 0x09, 0x84, 0xa8, 0x22, 0xc1, 0x56, 0x19, 0xb1,
 	0x8b, 0xdd, 0x54, 0x69, 0xe3, 0x30, 0x4b, 0xe4, 0x63, 0xb6, 0x1b, 0xd1, 0xcb, 0xfd, 0x82, 0xfd,
-	0x8c, 0xfd, 0x8c, 0xfd, 0xb5, 0x29, 0x76, 0x9a, 0xa6, 0x83, 0xb1, 0xb1, 0x4d, 0xdc, 0xb4, 0xf6,
-	0x39, 0x7e, 0x7c, 0x9e, 0xe7, 0xd1, 0xf1, 0x09, 0xec, 0x5d, 0x50, 0xf1, 0x61, 0x34, 0x70, 0x86,
-	0x71, 0xd8, 0x1e, 0xd0, 0xf8, 0x31, 0x8b, 0x47, 0x82, 0x46, 0x17, 0x6a, 0xed, 0xb7, 0x87, 0xa1,
-	0xdf, 0x66, 0x94, 0xb7, 0xbd, 0x84, 0x66, 0xff, 0x4e, 0xc2, 0x62, 0x11, 0x23, 0x63, 0x40, 0x63,
-	0x87, 0x51, 0x6e, 0xb5, 0x6f, 0x47, 0x47, 0x44, 0x48, 0x64, 0x44, 0x84, 0x42, 0x5a, 0x3f, 0x29,
-	0x97, 0x6d, 0x89, 0x2a, 0x96, 0xad, 0x14, 0xc8, 0x4e, 0x00, 0x4e, 0x7a, 0xa7, 0x98, 0x7c, 0x1c,
-	0x11, 0x2e, 0xd0, 0x7f, 0x50, 0x91, 0x49, 0x66, 0x6a, 0x4d, 0xad, 0x55, 0xc5, 0xf9, 0x0e, 0xad,
-	0x43, 0x25, 0x65, 0x41, 0x9f, 0xfa, 0xe6, 0x7c, 0x53, 0x6b, 0x2d, 0xe0, 0xc5, 0x94, 0x05, 0xae,
-	0x8f, 0x1a, 0xa0, 0xa7, 0x2c, 0x30, 0x17, 0xe4, 0xd9, 0x6c, 0x89, 0x1e, 0x82, 0x9e, 0x04, 0x57,
-	0xa6, 0xde, 0xd4, 0x5a, 0xb5, 0x4e, 0xdd, 0xc9, 0xb4, 0x64, 0x04, 0x7b, 0x8c, 0x04, 0xf4, 0x0a,
-	0x67, 0x39, 0xfb, 0x29, 0xd4, 0x64, 0x45, 0x9e, 0xc4, 0x11, 0x27, 0xa8, 0x95, 0x97, 0xe4, 0xa6,
-	0xd6, 0xd4, 0x5b, 0xb5, 0x4e, 0x43, 0x82, 0x14, 0x45, 0x9c, 0xfd, 0xe6, 0x24, 0x78, 0x46, 0xb5,
-	0x4b, 0xc4, 0x3d, 0x53, 0x95, 0x15, 0xef, 0x4c, 0x35, 0x85, 0x46, 0x97, 0x88, 0x93, 0x38, 0xba,
-	0x20, 0xec, 0x3e, 0x09, 0xbf, 0x84, 0xd5, 0x52, 0xdd, 0x3b, 0xd3, 0xfe, 0xaa, 0xc1, 0xea, 0xdb,
-	0x01, 0x27, 0x2c, 0x25, 0xd8, 0x3d, 0xfc, 0x6b, 0xc4, 0x5f, 0x80, 0xe1, 0x05, 0x94, 0x7b, 0x01,
-	0x95, 0xe4, 0x57, 0x3a, 0xb6, 0x93, 0x37, 0xb9, 0x73, 0xad, 0x9a, 0x73, 0x70, 0xec, 0x9e, 0x1d,
-	0x1c, 0xbb, 0x78, 0x02, 0xb1, 0x77, 0xc0, 0xc8, 0x63, 0xa8, 0x0e, 0x35, 0xb7, 0x97, 0x3e, 0x39,
-	0x8f, 0xe8, 0xd0, 0xe3, 0xa2, 0x31, 0x97, 0x07, 0xf6, 0x27, 0x01, 0xcd, 0xfe, 0xa4, 0x41, 0x15,
-	0xbb, 0x87, 0xe7, 0x89, 0xef, 0x09, 0x82, 0x1e, 0xc1, 0xb2, 0xe7, 0xa7, 0x84, 0x09, 0xca, 0x49,
-	0x48, 0x22, 0x21, 0x05, 0x2c, 0xe1, 0xd9, 0x20, 0xda, 0x82, 0x3a, 0xe5, 0x7d, 0x1a, 0x51, 0x41,
-	0xbd, 0xcb, 0xbe, 0x3f, 0x0a, 0x13, 0x49, 0x73, 0x09, 0x2f, 0x53, 0xee, 0xaa, 0xe8, 0xd1, 0x28,
-	0x4c, 0xd0, 0x16, 0x2c, 0x4a, 0xe5, 0x52, 0xee, 0x4d, 0x36, 0xaa, 0xb4, 0xfd, 0x45, 0x83, 0x95,
-	0x0c, 0xf0, 0xfb, 0x16, 0x3e, 0xfb, 0xde, 0xb0, 0x07, 0x85, 0x61, 0xb3, 0x17, 0xff, 0xa1, 0x5b,
-	0xfb, 0xf0, 0x4f, 0x71, 0x5f, 0x72, 0x39, 0x9e, 0x2a, 0xd4, 0x6e, 0x57, 0xb8, 0x26, 0xdb, 0x4c,
-	0x86, 0x18, 0xcf, 0xa9, 0xd8, 0xef, 0xa0, 0xa2, 0x22, 0x68, 0x13, 0x96, 0xf8, 0x98, 0xf7, 0x23,
-	0x2f, 0x24, 0xb9, 0x5e, 0x83, 0x8f, 0xf9, 0x1b, 0x2f, 0x24, 0x68, 0x03, 0x0c, 0x25, 0x98, 0x9b,
-	0xf3, 0x4d, 0xbd, 0xb5, 0x80, 0x2b, 0x52, 0x31, 0x47, 0x26, 0x18, 0x9e, 0xef, 0x33, 0xc2, 0xb9,
-	0x94, 0x5c, 0xc5, 0x93, 0xad, 0xfd, 0x1a, 0x50, 0xb9, 0x58, 0xde, 0xd4, 0xdb, 0x60, 0x28, 0x0f,
-	0x27, 0x5d, 0x5d, 0x2f, 0x2c, 0x52, 0x47, 0xf1, 0x24, 0xdf, 0xf9, 0xac, 0xc3, 0x26, 0x56, 0xb3,
-	0xd0, 0x8d, 0x82, 0x98, 0x85, 0x9e, 0xa0, 0x71, 0x74, 0x46, 0x58, 0x4a, 0x87, 0x04, 0x75, 0x40,
-	0x3f, 0xe9, 0x9d, 0xa2, 0xb5, 0x02, 0x3e, 0x1d, 0x87, 0xd6, 0xbf, 0xb3, 0x41, 0x55, 0xda, 0x9e,
-	0xcb, 0x30, 0x5d, 0x22, 0x4a, 0x98, 0xe9, 0x5c, 0x2a, 0x61, 0x4a, 0xa3, 0xc3, 0x9e, 0x43, 0x5d,
-	0x35, 0xbd, 0x14, 0x27, 0x64, 0xcd, 0x9c, 0x9a, 0x31, 0xd2, 0xfa, 0xff, 0xc6, 0x5c, 0x71, 0xd1,
-	0x11, 0x54, 0x8b, 0x37, 0x8e, 0x36, 0xcb, 0x67, 0x67, 0xe6, 0x8d, 0x65, 0xdd, 0x94, 0x2a, 0x6e,
-	0x79, 0x05, 0x30, 0x7d, 0x7b, 0x25, 0x3a, 0xd7, 0x1e, 0xa4, 0x85, 0xa6, 0xc6, 0x4e, 0x1e, 0xd6,
-	0xae, 0x86, 0x9e, 0x83, 0x91, 0xb7, 0x0e, 0xda, 0xf8, 0x41, 0x73, 0x5a, 0xeb, 0xd7, 0x13, 0xc9,
-	0xe5, 0x78, 0x57, 0x3b, 0xdc, 0x79, 0xbf, 0xfd, 0xcb, 0x9f, 0xc6, 0x41, 0x45, 0x7e, 0xa8, 0xf6,
-	0xbe, 0x05, 0x00, 0x00, 0xff, 0xff, 0xc5, 0xf1, 0x19, 0x78, 0x4e, 0x07, 0x00, 0x00,
+	0x9e, 0x5d, 0xed, 0xaf, 0x4d, 0xb1, 0xd3, 0x34, 0x1d, 0x8c, 0x0d, 0x0d, 0x71, 0xd3, 0xda, 0xe7,
+	0xf8, 0xf1, 0xf3, 0x9c, 0x47, 0xc7, 0x27, 0xb0, 0x77, 0x41, 0xc5, 0xa7, 0xd1, 0xc0, 0x19, 0xc6,
+	0x61, 0x7b, 0x40, 0xe3, 0xa7, 0x2c, 0x1e, 0x09, 0x1a, 0x5d, 0xa8, 0xb5, 0xdf, 0x1e, 0x86, 0x7e,
+	0x9b, 0x51, 0xde, 0xf6, 0x12, 0x9a, 0xfd, 0x3b, 0x09, 0x8b, 0x45, 0x8c, 0x8c, 0x01, 0x8d, 0x1d,
+	0x46, 0xb9, 0xd5, 0xbe, 0x1d, 0x1d, 0x11, 0x21, 0x91, 0x11, 0x11, 0x0a, 0x69, 0xfd, 0x86, 0x2e,
+	0xdb, 0x12, 0x45, 0x96, 0xad, 0x14, 0xc8, 0x4e, 0x00, 0x4e, 0x7a, 0xa7, 0x98, 0x7c, 0x1e, 0x11,
+	0x2e, 0xd0, 0x7f, 0x50, 0x91, 0x49, 0x66, 0x6a, 0x4d, 0xad, 0x55, 0xc5, 0xf9, 0x0e, 0xad, 0x43,
+	0x25, 0x65, 0x41, 0x9f, 0xfa, 0xe6, 0x7c, 0x53, 0x6b, 0x2d, 0xe0, 0xc5, 0x94, 0x05, 0xae, 0x8f,
+	0x1a, 0xa0, 0xa7, 0x2c, 0x30, 0x17, 0xe4, 0xd9, 0x6c, 0x89, 0x1e, 0x83, 0x9e, 0x04, 0x57, 0xa6,
+	0xde, 0xd4, 0x5a, 0xb5, 0x4e, 0xdd, 0xc9, 0x6a, 0xc9, 0x04, 0xf6, 0x18, 0x09, 0xe8, 0x15, 0xce,
+	0x72, 0xf6, 0x73, 0xa8, 0x49, 0x46, 0x9e, 0xc4, 0x11, 0x27, 0xa8, 0x95, 0x53, 0x72, 0x53, 0x6b,
+	0xea, 0xad, 0x5a, 0xa7, 0x21, 0x41, 0x4a, 0x22, 0xce, 0x7e, 0x73, 0x11, 0x3c, 0x93, 0xda, 0x25,
+	0xe2, 0x81, 0xa5, 0x4a, 0xc6, 0x3b, 0x4b, 0x4d, 0xa1, 0xd1, 0x25, 0xe2, 0x24, 0x8e, 0x2e, 0x08,
+	0x7b, 0x48, 0xc1, 0xaf, 0x61, 0xb5, 0xc4, 0x7b, 0x67, 0xd9, 0xdf, 0x35, 0x58, 0x7d, 0x3f, 0xe0,
+	0x84, 0xa5, 0x04, 0xbb, 0x87, 0xf7, 0x26, 0xfc, 0x15, 0x18, 0x5e, 0x40, 0xb9, 0x17, 0x50, 0x29,
+	0x7e, 0xa5, 0x63, 0x3b, 0x79, 0x93, 0x3b, 0xd7, 0xd8, 0x9c, 0x83, 0x63, 0xf7, 0xec, 0xe0, 0xd8,
+	0xc5, 0x13, 0x88, 0xbd, 0x03, 0x46, 0x1e, 0x43, 0x75, 0xa8, 0xb9, 0xbd, 0xf4, 0xd9, 0x79, 0x44,
+	0x87, 0x1e, 0x17, 0x8d, 0xb9, 0x3c, 0xb0, 0x3f, 0x09, 0x68, 0xf6, 0x17, 0x0d, 0xaa, 0xd8, 0x3d,
+	0x3c, 0x4f, 0x7c, 0x4f, 0x10, 0xf4, 0x04, 0x96, 0x3d, 0x3f, 0x25, 0x4c, 0x50, 0x4e, 0x42, 0x12,
+	0x09, 0x59, 0xc0, 0x12, 0x9e, 0x0d, 0xa2, 0x2d, 0xa8, 0x53, 0xde, 0xa7, 0x11, 0x15, 0xd4, 0xbb,
+	0xec, 0xfb, 0xa3, 0x30, 0x91, 0x32, 0x97, 0xf0, 0x32, 0xe5, 0xae, 0x8a, 0x1e, 0x8d, 0xc2, 0x04,
+	0x6d, 0xc1, 0xa2, 0xac, 0x5c, 0x96, 0x7b, 0x93, 0x8d, 0x2a, 0x6d, 0x7f, 0xd3, 0x60, 0x25, 0x03,
+	0xdc, 0xa7, 0x85, 0x2f, 0x7e, 0xb6, 0xf0, 0x51, 0x61, 0xe1, 0x2c, 0xd5, 0x5f, 0xfa, 0xb7, 0x0f,
+	0xff, 0x14, 0xf7, 0x25, 0x97, 0xe3, 0x69, 0xcd, 0xda, 0xed, 0x35, 0xaf, 0xc9, 0xc6, 0x93, 0x21,
+	0xc6, 0x73, 0x29, 0xf6, 0x07, 0xa8, 0xa8, 0x08, 0xda, 0x84, 0x25, 0x3e, 0xe6, 0xfd, 0xc8, 0x0b,
+	0x49, 0xee, 0x80, 0xc1, 0xc7, 0xfc, 0x9d, 0x17, 0x12, 0xb4, 0x01, 0x86, 0xb2, 0x80, 0x9b, 0xf3,
+	0x4d, 0xbd, 0xb5, 0x80, 0x2b, 0xd2, 0x03, 0x8e, 0x4c, 0x30, 0x3c, 0xdf, 0x67, 0x84, 0x73, 0x59,
+	0x72, 0x15, 0x4f, 0xb6, 0xf6, 0x5b, 0x40, 0x65, 0xb2, 0xbc, 0xcd, 0xb7, 0xc1, 0x50, 0xae, 0x4e,
+	0xfa, 0xbc, 0x5e, 0x58, 0xa4, 0x8e, 0xe2, 0x49, 0xbe, 0xf3, 0x55, 0x87, 0x4d, 0xac, 0xa6, 0xa3,
+	0x1b, 0x05, 0x31, 0x0b, 0x3d, 0x41, 0xe3, 0xe8, 0x8c, 0xb0, 0x94, 0x0e, 0x09, 0xea, 0x80, 0x7e,
+	0xd2, 0x3b, 0x45, 0x6b, 0x05, 0x7c, 0x3a, 0x20, 0xad, 0x7f, 0x67, 0x83, 0x8a, 0xda, 0x9e, 0xcb,
+	0x30, 0x5d, 0x22, 0x4a, 0x98, 0xe9, 0xa4, 0x2a, 0x61, 0x4a, 0xc3, 0xc4, 0x9e, 0x43, 0x5d, 0x35,
+	0xcf, 0x94, 0x26, 0x64, 0xcd, 0x9c, 0x9a, 0x31, 0xd2, 0xfa, 0xff, 0xc6, 0x5c, 0x71, 0xd1, 0x11,
+	0x54, 0x8b, 0x57, 0x8f, 0x36, 0xcb, 0x67, 0x67, 0x26, 0x90, 0x65, 0xdd, 0x94, 0x2a, 0x6e, 0x79,
+	0x03, 0x30, 0x7d, 0x8d, 0x25, 0x39, 0xd7, 0x9e, 0xa8, 0x85, 0xa6, 0xc6, 0x4e, 0x9e, 0xda, 0xae,
+	0x86, 0x5e, 0x82, 0x91, 0xb7, 0x0e, 0xda, 0xf8, 0x45, 0x73, 0x5a, 0xeb, 0xd7, 0x13, 0xc9, 0xe5,
+	0x78, 0x57, 0x3b, 0xdc, 0xf9, 0xb8, 0xfd, 0xc7, 0x1f, 0xcb, 0x41, 0x45, 0x7e, 0xba, 0xf6, 0x7e,
+	0x04, 0x00, 0x00, 0xff, 0xff, 0x22, 0xcc, 0x06, 0xa4, 0x60, 0x07, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/cmd/ris/api/ris.proto b/cmd/ris/api/ris.proto
index 678a9fb4..07736c6c 100644
--- a/cmd/ris/api/ris.proto
+++ b/cmd/ris/api/ris.proto
@@ -69,6 +69,7 @@ message RIBUpdate {
 message DumpRIBRequest {
     string router = 1;
     uint64 vrf_id = 2;
+    string vrf = 4;
     enum AFISAFI {
         IPv4Unicast = 0;
         IPv6Unicast = 1;
diff --git a/cmd/ris/risserver/server.go b/cmd/ris/risserver/server.go
index f9cf5e3e..ba923016 100644
--- a/cmd/ris/risserver/server.go
+++ b/cmd/ris/risserver/server.go
@@ -217,6 +217,11 @@ func (s *Server) ObserveRIB(req *pb.ObserveRIBRequest, stream pb.RoutingInformat
 
 // DumpRIB implements the DumpRIB RPC
 func (s *Server) DumpRIB(req *pb.DumpRIBRequest, stream pb.RoutingInformationService_DumpRIBServer) error {
+	vrfID, err := getVRFID(req)
+	if err != nil {
+		return err
+	}
+
 	ipVersion := netapi.IP_IPv4
 	switch req.Afisafi {
 	case pb.DumpRIBRequest_IPv4Unicast:
@@ -227,9 +232,9 @@ func (s *Server) DumpRIB(req *pb.DumpRIBRequest, stream pb.RoutingInformationSer
 		return fmt.Errorf("Unknown AFI/SAFI")
 	}
 
-	rib, err := s.getRIB(req.Router, req.VrfId, ipVersion)
+	rib, err := s.getRIB(req.Router, vrfID, ipVersion)
 	if err != nil {
-		return wrapGetRIBErr(err, req.Router, req.VrfId, ipVersion)
+		return wrapGetRIBErr(err, req.Router, vrfID, ipVersion)
 	}
 
 	toSend := &pb.DumpRIBReply{
diff --git a/cmd/riscli/dump_loc_rib.go b/cmd/riscli/dump_loc_rib.go
index 50e34670..2baa8245 100644
--- a/cmd/riscli/dump_loc_rib.go
+++ b/cmd/riscli/dump_loc_rib.go
@@ -47,7 +47,7 @@ func NewDumpLocRIBCommand() cli.Command {
 		client := pb.NewRoutingInformationServiceClient(conn)
 		for _, afisafi := range afisafis {
 			fmt.Printf(" --- Dump %s ---\n", pb.DumpRIBRequest_AFISAFI_name[int32(afisafi)])
-			err = dumpRIB(client, c.GlobalString("router"), c.GlobalUint64("vrf_id"), afisafi)
+			err = dumpRIB(client, c.GlobalString("router"), c.GlobalUint64("vrf_id"), c.GlobalString("vrf"), afisafi)
 			if err != nil {
 				log.Errorf("DumpRIB failed: %v", err)
 				os.Exit(1)
@@ -60,10 +60,11 @@ func NewDumpLocRIBCommand() cli.Command {
 	return cmd
 }
 
-func dumpRIB(c pb.RoutingInformationServiceClient, routerName string, vrfID uint64, afisafi pb.DumpRIBRequest_AFISAFI) error {
+func dumpRIB(c pb.RoutingInformationServiceClient, routerName string, vrfID uint64, vrf string, afisafi pb.DumpRIBRequest_AFISAFI) error {
 	client, err := c.DumpRIB(context.Background(), &pb.DumpRIBRequest{
 		Router:  routerName,
 		VrfId:   vrfID,
+		Vrf:     vrf,
 		Afisafi: afisafi,
 	})
 	if err != nil {
diff --git a/cmd/riscli/lpm.go b/cmd/riscli/lpm.go
index 1c564bcf..e87e6edc 100644
--- a/cmd/riscli/lpm.go
+++ b/cmd/riscli/lpm.go
@@ -42,7 +42,7 @@ func NewLPMCommand() cli.Command {
 		pfx := bnet.NewPfx(ipAddr, pfxLen)
 
 		client := pb.NewRoutingInformationServiceClient(conn)
-		err = lpm(client, c.GlobalString("router"), c.GlobalUint64("vrf_id"), pfx)
+		err = lpm(client, c.GlobalString("router"), c.GlobalUint64("vrf_id"), c.GlobalString("vrf"), pfx)
 		if err != nil {
 			log.Fatalf("LPM failed: %v", err)
 		}
@@ -53,10 +53,11 @@ func NewLPMCommand() cli.Command {
 	return cmd
 }
 
-func lpm(c pb.RoutingInformationServiceClient, routerName string, vrfID uint64, pfx bnet.Prefix) error {
+func lpm(c pb.RoutingInformationServiceClient, routerName string, vrfID uint64, vrf string, pfx bnet.Prefix) error {
 	resp, err := c.LPM(context.Background(), &pb.LPMRequest{
 		Router: routerName,
 		VrfId:  vrfID,
+		Vrf:    vrf,
 		Pfx:    pfx.ToProto(),
 	})
 	if err != nil {
diff --git a/cmd/riscli/main.go b/cmd/riscli/main.go
index 3350b307..43ce139f 100644
--- a/cmd/riscli/main.go
+++ b/cmd/riscli/main.go
@@ -27,6 +27,11 @@ func main() {
 			Usage: "VRF ID",
 			Value: 0,
 		},
+		cli.StringFlag{
+			Name:  "vrf",
+			Usage: "VRF",
+			Value: "",
+		},
 	}
 
 	app.Commands = []cli.Command{
-- 
GitLab