diff --git a/go/afrouter/afrouter.pb.go b/go/afrouter/afrouter.pb.go
index c0c5306..c10c7dc 100644
--- a/go/afrouter/afrouter.pb.go
+++ b/go/afrouter/afrouter.pb.go
@@ -1,15 +1,16 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: voltha_protos/afrouter.proto
 
-package afrouter // import "github.com/opencord/voltha-protos/go/afrouter"
-
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
+package afrouter
 
 import (
-	context "golang.org/x/net/context"
+	context "context"
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
 	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+	math "math"
 )
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -21,7 +22,7 @@
 // is compatible with the proto package it is being compiled against.
 // A compilation error at this line likely means your copy of the
 // proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
 type Result struct {
 	Success              bool     `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
@@ -35,16 +36,17 @@
 func (m *Result) String() string { return proto.CompactTextString(m) }
 func (*Result) ProtoMessage()    {}
 func (*Result) Descriptor() ([]byte, []int) {
-	return fileDescriptor_afrouter_011619d8422f4a7f, []int{0}
+	return fileDescriptor_be7e2f565b9e1c96, []int{0}
 }
+
 func (m *Result) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Result.Unmarshal(m, b)
 }
 func (m *Result) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Result.Marshal(b, m, deterministic)
 }
-func (dst *Result) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Result.Merge(dst, src)
+func (m *Result) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Result.Merge(m, src)
 }
 func (m *Result) XXX_Size() int {
 	return xxx_messageInfo_Result.Size(m)
@@ -79,16 +81,17 @@
 func (m *Empty) String() string { return proto.CompactTextString(m) }
 func (*Empty) ProtoMessage()    {}
 func (*Empty) Descriptor() ([]byte, []int) {
-	return fileDescriptor_afrouter_011619d8422f4a7f, []int{1}
+	return fileDescriptor_be7e2f565b9e1c96, []int{1}
 }
+
 func (m *Empty) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Empty.Unmarshal(m, b)
 }
 func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Empty.Marshal(b, m, deterministic)
 }
-func (dst *Empty) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Empty.Merge(dst, src)
+func (m *Empty) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Empty.Merge(m, src)
 }
 func (m *Empty) XXX_Size() int {
 	return xxx_messageInfo_Empty.Size(m)
@@ -110,16 +113,17 @@
 func (m *Count) String() string { return proto.CompactTextString(m) }
 func (*Count) ProtoMessage()    {}
 func (*Count) Descriptor() ([]byte, []int) {
-	return fileDescriptor_afrouter_011619d8422f4a7f, []int{2}
+	return fileDescriptor_be7e2f565b9e1c96, []int{2}
 }
+
 func (m *Count) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Count.Unmarshal(m, b)
 }
 func (m *Count) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Count.Marshal(b, m, deterministic)
 }
-func (dst *Count) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Count.Merge(dst, src)
+func (m *Count) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Count.Merge(m, src)
 }
 func (m *Count) XXX_Size() int {
 	return xxx_messageInfo_Count.Size(m)
@@ -155,16 +159,17 @@
 func (m *Conn) String() string { return proto.CompactTextString(m) }
 func (*Conn) ProtoMessage()    {}
 func (*Conn) Descriptor() ([]byte, []int) {
-	return fileDescriptor_afrouter_011619d8422f4a7f, []int{3}
+	return fileDescriptor_be7e2f565b9e1c96, []int{3}
 }
+
 func (m *Conn) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Conn.Unmarshal(m, b)
 }
 func (m *Conn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Conn.Marshal(b, m, deterministic)
 }
-func (dst *Conn) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Conn.Merge(dst, src)
+func (m *Conn) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Conn.Merge(m, src)
 }
 func (m *Conn) XXX_Size() int {
 	return xxx_messageInfo_Conn.Size(m)
@@ -246,16 +251,17 @@
 func (m *Affinity) String() string { return proto.CompactTextString(m) }
 func (*Affinity) ProtoMessage()    {}
 func (*Affinity) Descriptor() ([]byte, []int) {
-	return fileDescriptor_afrouter_011619d8422f4a7f, []int{4}
+	return fileDescriptor_be7e2f565b9e1c96, []int{4}
 }
+
 func (m *Affinity) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Affinity.Unmarshal(m, b)
 }
 func (m *Affinity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Affinity.Marshal(b, m, deterministic)
 }
-func (dst *Affinity) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Affinity.Merge(dst, src)
+func (m *Affinity) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Affinity.Merge(m, src)
 }
 func (m *Affinity) XXX_Size() int {
 	return xxx_messageInfo_Affinity.Size(m)
@@ -309,6 +315,35 @@
 	proto.RegisterType((*Affinity)(nil), "afrouter.Affinity")
 }
 
+func init() { proto.RegisterFile("voltha_protos/afrouter.proto", fileDescriptor_be7e2f565b9e1c96) }
+
+var fileDescriptor_be7e2f565b9e1c96 = []byte{
+	// 365 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x41, 0x8b, 0xdb, 0x30,
+	0x10, 0x85, 0xeb, 0xc4, 0x76, 0x9c, 0x29, 0x09, 0x41, 0x94, 0x22, 0x4a, 0x5b, 0x82, 0x4f, 0xb9,
+	0x24, 0x86, 0x86, 0x42, 0xaf, 0xad, 0xe9, 0x1f, 0x70, 0x6e, 0x7b, 0x59, 0x1c, 0x59, 0x76, 0x4c,
+	0x12, 0x8d, 0x91, 0x64, 0x43, 0xd8, 0xfd, 0x6d, 0xfb, 0xdb, 0x16, 0x49, 0x76, 0x92, 0x85, 0xdd,
+	0xdb, 0x7c, 0xef, 0x59, 0xe6, 0x3d, 0x69, 0xe0, 0x7b, 0x87, 0x27, 0x7d, 0xc8, 0x1f, 0x1b, 0x89,
+	0x1a, 0x55, 0x92, 0x97, 0x12, 0x5b, 0xcd, 0xe5, 0xc6, 0x32, 0x89, 0x06, 0x8e, 0xff, 0x40, 0x98,
+	0x71, 0xd5, 0x9e, 0x34, 0xa1, 0x30, 0x51, 0x2d, 0x63, 0x5c, 0x29, 0xea, 0x2d, 0xbd, 0x55, 0x94,
+	0x0d, 0x48, 0xbe, 0x40, 0xc0, 0xa5, 0x44, 0x49, 0x47, 0x4b, 0x6f, 0x35, 0xcd, 0x1c, 0xc4, 0x13,
+	0x08, 0xfe, 0x9f, 0x1b, 0x7d, 0x89, 0x7f, 0x40, 0x90, 0x62, 0x2b, 0xb4, 0xf9, 0x8e, 0x99, 0xc1,
+	0x9e, 0x9f, 0x65, 0x0e, 0xe2, 0x17, 0x0f, 0xfc, 0x14, 0x85, 0x20, 0x5f, 0x21, 0x54, 0x5c, 0x76,
+	0x5c, 0x5a, 0x7f, 0x9a, 0xf5, 0x44, 0x16, 0x30, 0x6e, 0x8e, 0x55, 0xff, 0x73, 0x33, 0x1a, 0x45,
+	0x75, 0x8c, 0x8e, 0x9d, 0xa2, 0x3a, 0x66, 0xc2, 0xb1, 0x53, 0xab, 0x34, 0x97, 0xd4, 0xb7, 0xea,
+	0x80, 0xc6, 0xd9, 0xe7, 0xec, 0xc8, 0x45, 0x41, 0x03, 0xe7, 0xf4, 0x48, 0x7e, 0x02, 0x30, 0x14,
+	0x82, 0x33, 0x5d, 0xa3, 0xa0, 0xa1, 0x35, 0xef, 0x14, 0x42, 0xc0, 0xcf, 0x8b, 0x42, 0xd2, 0x89,
+	0x75, 0xec, 0x6c, 0xb4, 0x06, 0xa5, 0xa6, 0xd1, 0xd2, 0x5b, 0xf9, 0x99, 0x9d, 0xe3, 0x67, 0x88,
+	0xfe, 0x96, 0x65, 0x2d, 0x6a, 0x7d, 0x31, 0x1d, 0xdc, 0xc5, 0x0d, 0x1d, 0x1c, 0x99, 0xea, 0x76,
+	0x1a, 0xae, 0xc8, 0xc2, 0x7d, 0xea, 0xf1, 0x87, 0xa9, 0xfd, 0xb7, 0xa9, 0xe7, 0x30, 0xaa, 0x87,
+	0x2a, 0xa3, 0xba, 0xf8, 0xf5, 0x04, 0xb3, 0x14, 0x45, 0x59, 0x57, 0xad, 0xcc, 0x6d, 0xec, 0x2d,
+	0xcc, 0x76, 0x5c, 0xa7, 0xb7, 0x1e, 0xf3, 0xcd, 0xf5, 0x75, 0x8d, 0xfa, 0x6d, 0x71, 0x63, 0xf7,
+	0xb4, 0xf1, 0x27, 0xf2, 0x1b, 0x3e, 0xef, 0xb8, 0xbe, 0xd6, 0x20, 0xb7, 0x4f, 0x06, 0xed, 0xbd,
+	0x63, 0xff, 0x92, 0x87, 0x75, 0x55, 0xeb, 0x43, 0xbb, 0xdf, 0x30, 0x3c, 0x27, 0xd8, 0x70, 0xc1,
+	0x50, 0x16, 0x89, 0xdb, 0xad, 0x75, 0xbf, 0x5b, 0x15, 0x5e, 0xd7, 0x6b, 0x1f, 0x5a, 0x6d, 0xfb,
+	0x1a, 0x00, 0x00, 0xff, 0xff, 0x40, 0x18, 0x4d, 0xa7, 0x7f, 0x02, 0x00, 0x00,
+}
+
 // Reference imports to suppress errors if they are not otherwise used.
 var _ context.Context
 var _ grpc.ClientConn
@@ -357,6 +392,17 @@
 	SetAffinity(context.Context, *Affinity) (*Result, error)
 }
 
+// UnimplementedConfigurationServer can be embedded to have forward compatible implementations.
+type UnimplementedConfigurationServer struct {
+}
+
+func (*UnimplementedConfigurationServer) SetConnection(ctx context.Context, req *Conn) (*Result, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetConnection not implemented")
+}
+func (*UnimplementedConfigurationServer) SetAffinity(ctx context.Context, req *Affinity) (*Result, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetAffinity not implemented")
+}
+
 func RegisterConfigurationServer(s *grpc.Server, srv ConfigurationServer) {
 	s.RegisterService(&_Configuration_serviceDesc, srv)
 }
@@ -413,34 +459,3 @@
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "voltha_protos/afrouter.proto",
 }
-
-func init() {
-	proto.RegisterFile("voltha_protos/afrouter.proto", fileDescriptor_afrouter_011619d8422f4a7f)
-}
-
-var fileDescriptor_afrouter_011619d8422f4a7f = []byte{
-	// 365 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x41, 0x8b, 0xdb, 0x30,
-	0x10, 0x85, 0xeb, 0xc4, 0x76, 0x9c, 0x29, 0x09, 0x41, 0x94, 0x22, 0x4a, 0x5b, 0x82, 0x4f, 0xb9,
-	0x24, 0x86, 0x86, 0x42, 0xaf, 0xad, 0xe9, 0x1f, 0x70, 0x6e, 0x7b, 0x59, 0x1c, 0x59, 0x76, 0x4c,
-	0x12, 0x8d, 0x91, 0x64, 0x43, 0xd8, 0xfd, 0x6d, 0xfb, 0xdb, 0x16, 0x49, 0x76, 0x92, 0x85, 0xdd,
-	0xdb, 0x7c, 0xef, 0x59, 0xe6, 0x3d, 0x69, 0xe0, 0x7b, 0x87, 0x27, 0x7d, 0xc8, 0x1f, 0x1b, 0x89,
-	0x1a, 0x55, 0x92, 0x97, 0x12, 0x5b, 0xcd, 0xe5, 0xc6, 0x32, 0x89, 0x06, 0x8e, 0xff, 0x40, 0x98,
-	0x71, 0xd5, 0x9e, 0x34, 0xa1, 0x30, 0x51, 0x2d, 0x63, 0x5c, 0x29, 0xea, 0x2d, 0xbd, 0x55, 0x94,
-	0x0d, 0x48, 0xbe, 0x40, 0xc0, 0xa5, 0x44, 0x49, 0x47, 0x4b, 0x6f, 0x35, 0xcd, 0x1c, 0xc4, 0x13,
-	0x08, 0xfe, 0x9f, 0x1b, 0x7d, 0x89, 0x7f, 0x40, 0x90, 0x62, 0x2b, 0xb4, 0xf9, 0x8e, 0x99, 0xc1,
-	0x9e, 0x9f, 0x65, 0x0e, 0xe2, 0x17, 0x0f, 0xfc, 0x14, 0x85, 0x20, 0x5f, 0x21, 0x54, 0x5c, 0x76,
-	0x5c, 0x5a, 0x7f, 0x9a, 0xf5, 0x44, 0x16, 0x30, 0x6e, 0x8e, 0x55, 0xff, 0x73, 0x33, 0x1a, 0x45,
-	0x75, 0x8c, 0x8e, 0x9d, 0xa2, 0x3a, 0x66, 0xc2, 0xb1, 0x53, 0xab, 0x34, 0x97, 0xd4, 0xb7, 0xea,
-	0x80, 0xc6, 0xd9, 0xe7, 0xec, 0xc8, 0x45, 0x41, 0x03, 0xe7, 0xf4, 0x48, 0x7e, 0x02, 0x30, 0x14,
-	0x82, 0x33, 0x5d, 0xa3, 0xa0, 0xa1, 0x35, 0xef, 0x14, 0x42, 0xc0, 0xcf, 0x8b, 0x42, 0xd2, 0x89,
-	0x75, 0xec, 0x6c, 0xb4, 0x06, 0xa5, 0xa6, 0xd1, 0xd2, 0x5b, 0xf9, 0x99, 0x9d, 0xe3, 0x67, 0x88,
-	0xfe, 0x96, 0x65, 0x2d, 0x6a, 0x7d, 0x31, 0x1d, 0xdc, 0xc5, 0x0d, 0x1d, 0x1c, 0x99, 0xea, 0x76,
-	0x1a, 0xae, 0xc8, 0xc2, 0x7d, 0xea, 0xf1, 0x87, 0xa9, 0xfd, 0xb7, 0xa9, 0xe7, 0x30, 0xaa, 0x87,
-	0x2a, 0xa3, 0xba, 0xf8, 0xf5, 0x04, 0xb3, 0x14, 0x45, 0x59, 0x57, 0xad, 0xcc, 0x6d, 0xec, 0x2d,
-	0xcc, 0x76, 0x5c, 0xa7, 0xb7, 0x1e, 0xf3, 0xcd, 0xf5, 0x75, 0x8d, 0xfa, 0x6d, 0x71, 0x63, 0xf7,
-	0xb4, 0xf1, 0x27, 0xf2, 0x1b, 0x3e, 0xef, 0xb8, 0xbe, 0xd6, 0x20, 0xb7, 0x4f, 0x06, 0xed, 0xbd,
-	0x63, 0xff, 0x92, 0x87, 0x75, 0x55, 0xeb, 0x43, 0xbb, 0xdf, 0x30, 0x3c, 0x27, 0xd8, 0x70, 0xc1,
-	0x50, 0x16, 0x89, 0xdb, 0xad, 0x75, 0xbf, 0x5b, 0x15, 0x5e, 0xd7, 0x6b, 0x1f, 0x5a, 0x6d, 0xfb,
-	0x1a, 0x00, 0x00, 0xff, 0xff, 0x40, 0x18, 0x4d, 0xa7, 0x7f, 0x02, 0x00, 0x00,
-}
