首页 > 编程知识 正文

linux进程内存分析,进程撤销原语分析正确的是

时间:2023-05-05 08:47:37 阅读:215370 作者:583

netcfg 进程 -garnetbinnetcfgsrcmain.rs

//概括而言就是通过一个watcher来监听网卡目录,当有新节点添加时,通过IPC调用netstack的AddEthernetDevice接口添加网口端点
fn main() 
    const ETHDIR: &str = "/dev/class/ethernet"; //常量字符串,监控的网卡目录
    interface_ids.insert("lo".to_owned(), 1); //interface_ids为hash表;向其中加入localhost项
    let ethdir = fs::File::open(ETHDIR).xxx //打开网卡目录
    let mut watcher = fuchsia_vfs_watcher::Watcher::new(&ethdir) //设置网卡目录watcher
    let ethernet_device = async {……} //网卡设备
        while let Some(fuchsia_vfs_watcher::WatchMessage { event, filename }) =
            await!(watcher.try_next()){……} //对watcher出的每个对象(每个网卡会增加一项)
                match event {……} //匹配不同的事件,分别进行处理
                    fuchsia_vfs_watcher::WatchEvent::ADD_FILE | fuchsia_vfs_watcher::WatchEvent::EXISTING => {……} //添加文件或已经现存文件的执行流程
                        let filename = path::Path::new(ETHDIR).join(filename); //将前面的网卡目录与发现的文件拼接
                        let device = fs::File::open(&filename) //打开网卡文件,这里会触发通用网卡层的EthDev0::DdkOpen,从而建立一个使用网卡驱动的实例
                        fdio::fdio_sys::fdio_get_service_handle(device, &mut client) //这里device为网卡驱动文件的fd,获取的client则为可以与网卡驱动通信的句柄
                        let device = fidl::endpoints::ClientEnd::<fidl_fuchsia_hardware_ethernet::DeviceMarker,>::new(client).into_proxy()?; //TODO:此操作应该是对前面client(channel)的封装,目的是获取网卡设备的IPC操作实例
                        if let Ok(device_info) = await!(device.get_info()) {……} //GetInfo
                            if device_info.features.is_physical() {……} //判断是物理网卡?里面会判断INFO_FEATURE_SYNTH(虚拟网卡会设置)属性。
                                let name = …… //配置文件可配
                                let metric //hardcode
                                let mut derived_interface_config = matchers::config_for_device(……)
                                let nic_id = await!(netstack.add_ethernet_device(
                                                    &topological_path,
                                                    &mut derived_interface_config,
                                                    fidl::endpoints::ClientEnd::<
                                                        fidl_fuchsia_hardware_ethernet::DeviceMarker,
                                                    >::new(client),
                                                    )) //
                                    NetstackProxyInterface::add_ethernet_device(……) //add_ethernet_device --./out/default/fidling/gen/sdk/fidl/fuchsia.netstack/fidl_fuchsia_netstack.rs
                                        self.client.send_query(……,561491870) //561491870为IPC编码
                                            NetstackRequest::AddEthernetDevice //后面没跟了,应该是发IPC到netstack调用AddEthernetDevice接口了!!
                                await!(match derived_interface_config.ip_address_config {……} //配置ip
                                let () = netstack.set_interface_status(nic_id as u32, true)?; //设置网卡状态为true
                                await!(interface_ids.lock()).insert(derived_interface_config.name, nic_id as u64); //将此物理网卡加入interface_ids的hash表
                    fuchsia_vfs_watcher::WatchEvent::IDLE | fuchsia_vfs_watcher::WatchEvent::REMOVE_FILE => {} //idle或者remove file事件,什么都不做
                    event => {……} //error打印
    let (_success, (), (), ()) = executor.run_singlethreaded(try_join4(
        device_name,
        filter_setup,
        ethernet_device,
        fs.collect().map(Ok),
    ))?; //Run a single future to completion on a single thread。--./garnet/public/rust/fuchsia-async/src/executor.rs

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。