@@ -4,7 +4,6 @@ extern crate libc;
44extern crate api_server;
55extern crate data_model;
66extern crate devices;
7- extern crate fc_util;
87extern crate kernel_loader;
98extern crate kvm;
109extern crate kvm_sys;
@@ -35,10 +34,12 @@ use api_server::request::instance_info::{InstanceInfo, InstanceState};
3534use api_server:: request:: sync:: boot_source:: { PutBootSourceConfigError , PutBootSourceOutcome } ;
3635use api_server:: request:: sync:: machine_configuration:: { PutMachineConfigurationError ,
3736 PutMachineConfigurationOutcome } ;
38- use api_server:: request:: sync:: { APILoggerDescription , BootSourceBody , DriveDescription ,
37+ use api_server:: request:: sync:: { rate_limiter_description_into_implementation,
38+ APILoggerDescription , BootSourceBody , DriveDescription ,
3939 DriveError , Error as SyncError , GenerateResponse ,
4040 NetworkInterfaceBody , OkStatus as SyncOkStatus , PutDriveOutcome ,
4141 PutLoggerOutcome , SyncOutcomeSender , SyncRequest } ;
42+
4243use api_server:: ApiRequest ;
4344use data_model:: vm:: MachineConfiguration ;
4445use device_config:: * ;
@@ -47,7 +48,6 @@ use device_manager::mmio::MMIODeviceManager;
4748
4849use devices:: virtio;
4950use devices:: { DeviceEventT , EpollHandler } ;
50- use fc_util:: ratelimiter:: RateLimiter ;
5151use kvm:: * ;
5252use sys_util:: { register_signal_handler, EventFd , GuestAddress , GuestMemory , Killable , Terminal } ;
5353use vm_control:: VmResponse ;
@@ -565,15 +565,9 @@ impl Vmm {
565565 . map_err ( Error :: RootDiskImage ) ?;
566566 let epoll_config = epoll_context. allocate_virtio_block_tokens ( ) ;
567567
568- let rate_limiter = match drive_config. rate_limiter . as_ref ( ) {
569- Some ( rl) => Some ( RateLimiter :: new (
570- rl. bandwidth . size ,
571- rl. bandwidth . refill_time ,
572- rl. ops . size ,
573- rl. ops . refill_time ,
574- ) . map_err ( Error :: RateLimiterNew ) ?) ,
575- None => None ,
576- } ;
568+ let rate_limiter = rate_limiter_description_into_implementation (
569+ drive_config. rate_limiter . as_ref ( ) ,
570+ ) . map_err ( Error :: RateLimiterNew ) ?;
577571 let block_box = Box :: new ( devices:: virtio:: Block :: new (
578572 root_image,
579573 drive_config. is_read_only ,
@@ -609,25 +603,12 @@ impl Vmm {
609603 for cfg in self . network_interface_configs . iter_mut ( ) {
610604 let epoll_config = self . epoll_context . allocate_virtio_net_tokens ( ) ;
611605
612- // TODO: implement from to reduce code
613- let rx_rate_limiter = match cfg. rx_rate_limiter . as_ref ( ) {
614- Some ( rl) => Some ( RateLimiter :: new (
615- rl. bandwidth . size ,
616- rl. bandwidth . refill_time ,
617- rl. ops . size ,
618- rl. ops . refill_time ,
619- ) . map_err ( Error :: RateLimiterNew ) ?) ,
620- None => None ,
621- } ;
622- let tx_rate_limiter = match cfg. tx_rate_limiter . as_ref ( ) {
623- Some ( rl) => Some ( RateLimiter :: new (
624- rl. bandwidth . size ,
625- rl. bandwidth . refill_time ,
626- rl. ops . size ,
627- rl. ops . refill_time ,
628- ) . map_err ( Error :: RateLimiterNew ) ?) ,
629- None => None ,
630- } ;
606+ let rx_rate_limiter = rate_limiter_description_into_implementation (
607+ cfg. rx_rate_limiter . as_ref ( ) ,
608+ ) . map_err ( Error :: RateLimiterNew ) ?;
609+ let tx_rate_limiter = rate_limiter_description_into_implementation (
610+ cfg. tx_rate_limiter . as_ref ( ) ,
611+ ) . map_err ( Error :: RateLimiterNew ) ?;
631612
632613 if let Some ( tap) = cfg. take_tap ( ) {
633614 let net_box = Box :: new ( devices:: virtio:: Net :: new_with_tap (
0 commit comments