diff --git a/api/bbsim/bbsim.pb.go b/api/bbsim/bbsim.pb.go
index 12cf16e..132c8b4 100644
--- a/api/bbsim/bbsim.pb.go
+++ b/api/bbsim/bbsim.pb.go
@@ -1804,7 +1804,7 @@
 func init() { proto.RegisterFile("api/bbsim/bbsim.proto", fileDescriptor_ef7750073d18011b) }
 
 var fileDescriptor_ef7750073d18011b = []byte{
-	// 2090 bytes of a gzipped FileDescriptorProto
+	// 2092 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcb, 0x6e, 0xdb, 0xd8,
 	0xf9, 0xb7, 0xee, 0xd2, 0x27, 0x4b, 0xa2, 0x4f, 0x62, 0x0f, 0xe1, 0x78, 0x26, 0x02, 0x27, 0xf3,
 	0x87, 0x13, 0xfc, 0xc7, 0x99, 0x24, 0xed, 0x34, 0x59, 0xd2, 0x92, 0xac, 0x70, 0x2c, 0x93, 0xc2,
@@ -1926,16 +1926,16 @@
 	0x0f, 0xfe, 0x9e, 0xc2, 0x72, 0x25, 0xd9, 0xb6, 0x73, 0x32, 0xc9, 0xd1, 0x79, 0x07, 0x3b, 0x29,
 	0x47, 0xbe, 0xe6, 0x8c, 0x35, 0x35, 0x76, 0x97, 0xdc, 0xa8, 0xf2, 0xdd, 0xc5, 0x73, 0xf8, 0xe0,
 	0x10, 0x5f, 0x41, 0x9b, 0xeb, 0x3c, 0x38, 0xc2, 0xb7, 0x20, 0x24, 0x6e, 0xbe, 0x2a, 0xc0, 0x5f,
-	0xc1, 0x36, 0x1f, 0x9a, 0xf0, 0xb1, 0xf0, 0xb0, 0x10, 0xdf, 0x40, 0x93, 0x6b, 0xb1, 0x37, 0xc4,
-	0xc3, 0x94, 0x8e, 0x61, 0x57, 0x67, 0xfd, 0x65, 0xe7, 0xa8, 0xe2, 0x98, 0xd6, 0xdc, 0xa0, 0x7b,
-	0x18, 0xda, 0x4b, 0xd4, 0xd3, 0x47, 0xec, 0x67, 0x6c, 0xd0, 0x55, 0x7f, 0x8f, 0x8d, 0xec, 0x31,
-	0x9d, 0x67, 0xe3, 0x47, 0xa8, 0x0f, 0x49, 0x10, 0xee, 0xdc, 0x39, 0x91, 0x47, 0xc5, 0x66, 0x02,
-	0xac, 0xb6, 0x9d, 0xde, 0xb5, 0xe1, 0x5c, 0x11, 0x7a, 0x08, 0x85, 0x2f, 0x0f, 0xc4, 0x45, 0x52,
-	0xc7, 0x52, 0x9e, 0xa3, 0x53, 0xf8, 0x26, 0x1c, 0xe8, 0xcd, 0xd7, 0x48, 0x8e, 0xdf, 0x27, 0x09,
-	0xb4, 0x21, 0x1f, 0x2f, 0x3d, 0xb6, 0x34, 0xf2, 0x97, 0x5e, 0xb8, 0x2a, 0x8e, 0x7f, 0xf8, 0xed,
-	0xf7, 0x57, 0x56, 0x70, 0xbd, 0xba, 0x38, 0x9a, 0xbb, 0x0b, 0xf6, 0x07, 0xf0, 0xdc, 0xf5, 0x4c,
-	0xfe, 0x8f, 0x71, 0xfc, 0xdf, 0xf1, 0x45, 0x95, 0xfd, 0xe1, 0xfb, 0xe6, 0xbf, 0x01, 0x00, 0x00,
-	0xff, 0xff, 0x64, 0x15, 0xb3, 0xe8, 0x4f, 0x16, 0x00, 0x00,
+	0xc1, 0x36, 0x1f, 0x9a, 0xf0, 0xb1, 0xf0, 0x99, 0x56, 0xa5, 0xb4, 0xde, 0x40, 0x93, 0x6b, 0xb1,
+	0x37, 0xc4, 0xc3, 0x94, 0x8e, 0x61, 0x57, 0x67, 0xfd, 0x65, 0xe7, 0xa8, 0xe2, 0x98, 0xd6, 0xdc,
+	0xa0, 0x7b, 0x18, 0xda, 0x4b, 0xca, 0x92, 0x3e, 0x62, 0x3f, 0x63, 0x83, 0xae, 0xfa, 0x7b, 0x6c,
+	0x64, 0x8f, 0xe9, 0x3c, 0x1b, 0x3f, 0x42, 0x7d, 0x48, 0x82, 0x70, 0xe7, 0xce, 0xe9, 0x48, 0x54,
+	0x6c, 0x26, 0xc0, 0x6a, 0xdb, 0xe9, 0x5d, 0x1b, 0xce, 0x15, 0xa1, 0x87, 0x50, 0xf8, 0xf2, 0x40,
+	0x5c, 0x24, 0x75, 0x2c, 0xe5, 0x39, 0x3a, 0x85, 0x6f, 0xc2, 0x81, 0xde, 0x7c, 0x8d, 0xe4, 0xf8,
+	0x7d, 0x92, 0x40, 0x1b, 0xf2, 0xf1, 0xd2, 0x63, 0x4b, 0x23, 0x7f, 0xe9, 0x85, 0xab, 0xe2, 0xf8,
+	0x87, 0xdf, 0x7e, 0x7f, 0x65, 0x05, 0xd7, 0xab, 0x8b, 0xa3, 0xb9, 0xbb, 0x60, 0x7f, 0x00, 0xcf,
+	0x5d, 0xcf, 0xe4, 0xff, 0x18, 0xc7, 0xff, 0x1d, 0x5f, 0x54, 0xd9, 0x1f, 0xbe, 0x6f, 0xfe, 0x1b,
+	0x00, 0x00, 0xff, 0xff, 0x2d, 0xf0, 0xfb, 0x77, 0x4f, 0x16, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1990,9 +1990,9 @@
 	// Poweron all ONUs under a PON by pon-port-ID
 	PoweronONUsOnPON(ctx context.Context, in *PONRequest, opts ...grpc.CallOption) (*Response, error)
 	// Restart EAPOL for ONU
-	RestartEapol(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
+	RestartEapol(ctx context.Context, in *UNIRequest, opts ...grpc.CallOption) (*Response, error)
 	// Restart DHCP for ONU
-	RestartDhcp(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
+	RestartDhcp(ctx context.Context, in *UNIRequest, opts ...grpc.CallOption) (*Response, error)
 	// Send ONU alarm indication
 	SetOnuAlarmIndication(ctx context.Context, in *ONUAlarmRequest, opts ...grpc.CallOption) (*Response, error)
 	// Send OLT alarm indication for Interface type NNI or PON
@@ -2195,7 +2195,7 @@
 	return out, nil
 }
 
-func (c *bBSimClient) RestartEapol(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error) {
+func (c *bBSimClient) RestartEapol(ctx context.Context, in *UNIRequest, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/RestartEapol", in, out, opts...)
 	if err != nil {
@@ -2204,7 +2204,7 @@
 	return out, nil
 }
 
-func (c *bBSimClient) RestartDhcp(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error) {
+func (c *bBSimClient) RestartDhcp(ctx context.Context, in *UNIRequest, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/RestartDhcp", in, out, opts...)
 	if err != nil {
@@ -2309,9 +2309,9 @@
 	// Poweron all ONUs under a PON by pon-port-ID
 	PoweronONUsOnPON(context.Context, *PONRequest) (*Response, error)
 	// Restart EAPOL for ONU
-	RestartEapol(context.Context, *ONURequest) (*Response, error)
+	RestartEapol(context.Context, *UNIRequest) (*Response, error)
 	// Restart DHCP for ONU
-	RestartDhcp(context.Context, *ONURequest) (*Response, error)
+	RestartDhcp(context.Context, *UNIRequest) (*Response, error)
 	// Send ONU alarm indication
 	SetOnuAlarmIndication(context.Context, *ONUAlarmRequest) (*Response, error)
 	// Send OLT alarm indication for Interface type NNI or PON
@@ -2390,10 +2390,10 @@
 func (*UnimplementedBBSimServer) PoweronONUsOnPON(ctx context.Context, req *PONRequest) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method PoweronONUsOnPON not implemented")
 }
-func (*UnimplementedBBSimServer) RestartEapol(ctx context.Context, req *ONURequest) (*Response, error) {
+func (*UnimplementedBBSimServer) RestartEapol(ctx context.Context, req *UNIRequest) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method RestartEapol not implemented")
 }
-func (*UnimplementedBBSimServer) RestartDhcp(ctx context.Context, req *ONURequest) (*Response, error) {
+func (*UnimplementedBBSimServer) RestartDhcp(ctx context.Context, req *UNIRequest) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method RestartDhcp not implemented")
 }
 func (*UnimplementedBBSimServer) SetOnuAlarmIndication(ctx context.Context, req *ONUAlarmRequest) (*Response, error) {
@@ -2780,7 +2780,7 @@
 }
 
 func _BBSim_RestartEapol_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(ONURequest)
+	in := new(UNIRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
@@ -2792,13 +2792,13 @@
 		FullMethod: "/bbsim.BBSim/RestartEapol",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(BBSimServer).RestartEapol(ctx, req.(*ONURequest))
+		return srv.(BBSimServer).RestartEapol(ctx, req.(*UNIRequest))
 	}
 	return interceptor(ctx, in, info, handler)
 }
 
 func _BBSim_RestartDhcp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(ONURequest)
+	in := new(UNIRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
@@ -2810,7 +2810,7 @@
 		FullMethod: "/bbsim.BBSim/RestartDhcp",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(BBSimServer).RestartDhcp(ctx, req.(*ONURequest))
+		return srv.(BBSimServer).RestartDhcp(ctx, req.(*UNIRequest))
 	}
 	return interceptor(ctx, in, info, handler)
 }
