Rumah >Operasi dan penyelenggaraan >operasi dan penyelenggaraan linux >Apakah proses linux linkwatch?
Linux linkwatch ialah proses "perubahan status pautan" dalam timbunan protokol rangkaian Linux, modul linkwatch digunakan untuk memberitahu kad rangkaian sama ada ia boleh menghantar data pada masa ini; dalam pemacu untuk memberitahu perubahan status rangkaian.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Apakah proses linux linkwatch?
Perubahan status pautan (linkwatch)
Dalam tindanan protokol rangkaian Linux, modul linkwatch digunakan untuk memberitahu kad rangkaian sama ada penghantaran data boleh dilakukan pada masa ini .
Panggil fungsi netif_carrier_on/netif_carrier_off dalam pemacu untuk memberitahu perubahan status rangkaian.
Fungsi utama:
Dayakan /lumpuhkan kawalan aliran bagi Fungsi baris gilir TX
Mulakan mesej pautan net NETDEV_CHANGE ke ruang pengguna
void netif_carrier_on(struct net_device *dev) { if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) { if (dev->reg_state == NETREG_UNINITIALIZED) return; linkwatch_fire_event(dev); if (netif_running(dev)) __netdev_watchdog_up(dev); } } void netif_carrier_off(struct net_device *dev) { if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) { if (dev->reg_state == NETREG_UNINITIALIZED) return ; linkwatch_fire_event(dev); } } linwatch模块,只需要知道状态改变了,不需要知道具体是on还是off void linkwatch_fire_event(struct net_device *dev) { /*判断是否为紧急事件, 内核规定两次事件的间隔至少为1个HZ*/ bool urgent = linkwatch_urgent_event(dev); if (!test_and_set_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state)) { linkwatch_add_event(dev);//把dev添加到lweventlist链表 } else if (!urgent) return; /*调用工作队列linkwatch_event */ linkwatch_schedule_work(urgent); } static void __linkwatch_run_queue(int urgent_only) { struct net_device *dev; LIST_HEAD(wrk); while (!list_empty(&wrk)) { dev = list_first_entry(&wrk, struct net_device, link_watch_list); list_del_init(&dev->link_watch_list); /*判断是否只执行紧急事件 */ if (urgent_only && !linkwatch_urgent_event(dev)) { list_add_tail(&dev->link_watch_list, &lweventlist); continue; } spin_unlock_irq(&lweventlist_lock); linkwatch_do_dev(dev); spin_lock_irq(&lweventlist_lock); } if (!list_empty(&lweventlist)){ linkwatch_schedule_work(0); } spin_unlock_irq(&lweventlist_lock); } static void linkwatch_do_dev(struct net_device *dev) { rfc2863_policy(dev); if (dev->flags & IFF_UP) { if (netif_carrier_ok(dev)) dev_activate(dev);//启动tx队列流量控制功能 else dev_deactivate(dev);//禁止tx队列流量控制功能 netdev_state_change(dev);//发起Netlink事件:NETDEV_CHANGE } dev_put(dev); }
Berkaitan cadangan: "Tutorial Video Linux》
Atas ialah kandungan terperinci Apakah proses linux linkwatch?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!