1 // Copyright 2021, The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 //! Android Virt Manager
16
17 mod aidl;
18 mod config;
19 mod crosvm;
20
21 use crate::aidl::{VirtManager, BINDER_SERVICE_IDENTIFIER};
22 use android_system_virtmanager::aidl::android::system::virtmanager::IVirtManager::BnVirtManager;
23 use android_system_virtmanager::binder::{add_service, BinderFeatures, ProcessState};
24 use log::{info, Level};
25
26 /// The first CID to assign to a guest VM managed by the Virt Manager. CIDs lower than this are
27 /// reserved for the host or other usage.
28 const FIRST_GUEST_CID: Cid = 10;
29
30 const LOG_TAG: &str = "VirtManager";
31
32 /// The unique ID of a VM used (together with a port number) for vsock communication.
33 type Cid = u32;
34
main()35 fn main() {
36 android_logger::init_once(
37 android_logger::Config::default().with_tag(LOG_TAG).with_min_level(Level::Trace),
38 );
39
40 let virt_manager = VirtManager::default();
41 let virt_manager = BnVirtManager::new_binder(
42 virt_manager,
43 BinderFeatures { set_requesting_sid: true, ..BinderFeatures::default() },
44 );
45 add_service(BINDER_SERVICE_IDENTIFIER, virt_manager.as_binder()).unwrap();
46 info!("Registered Binder service, joining threadpool.");
47 ProcessState::join_thread_pool();
48 }
49