【網(wǎng)絡(luò)驅(qū)動】ifconfigup后內(nèi)核網(wǎng)絡(luò)驅(qū)動做了什么?

嵌入式藝術(shù) 2023-06-07 11:30




背景

最近在排查一個(gè)網(wǎng)絡(luò)問題,ifconfig eth0 up 后,網(wǎng)卡link up比較慢。因此,分析了下從ifconfig up 到網(wǎng)絡(luò)驅(qū)動的調(diào)用流程。這里順便作個(gè)記錄。

ifconfig eth0 up 調(diào)用的是busybox 的命令,因此從busybox 源碼入手,逐步分析下調(diào)用流程。代碼介紹文件位于:networking/ifenslave.c

ifconfig eth0 up

ifconfig eth0 upifconfig eth0 down 分別對應(yīng)busybox 的set_if_up()set_if_down().

static?int?set_if_down(char?*ifname,?int?flags)
{
?int?res?=?set_if_flags(ifname,?flags?&?~IFF_UP);
?if?(res)
??bb_perror_msg("%s:?can't?down",?ifname);
?return?res;
}
static?int?set_if_up(char?*ifname,?int?flags)
{
?int?res?=?set_if_flags(ifname,?flags?|?IFF_UP);
?if?(res)
??bb_perror_msg("%s:?can't?up",?ifname);
?return?res;
}

比如,當(dāng)我們敲ifconfig eth0 down時(shí),實(shí)則就是調(diào)用:

set_if_down("eth0",?master_flags.ifr_flags);

set_if_flags()會將網(wǎng)卡名,up / down 標(biāo)志位flags通過ioctl命令SIOCSIFFLAGS 傳遞給內(nèi)核網(wǎng)卡驅(qū)動。

static?int?set_if_flags(char?*ifname,?int?flags)
{
?struct?ifreq?ifr;

?ifr.ifr_flags?=?flags;
?return?set_ifrname_and_do_ioctl(SIOCSIFFLAGS,?&ifr,?ifname);
}

dev_ifsioc

接著深入到內(nèi)核代碼中,看下SIOCSIFFLAGS命令在哪里實(shí)現(xiàn)。代碼位于kernel\net\core\dev_ioctl.c

static?int?dev_ifsioc(struct?net?*net,?struct?ifreq?*ifr,?unsigned?int?cmd)
{
?int?err;
?struct?net_device?*dev?=?__dev_get_by_name(net,?ifr->ifr_name);
?const?struct?net_device_ops?*ops;

?if?(!dev)
??return?-ENODEV;

?ops?=?dev->netdev_ops;

?switch?(cmd)?{
?case?SIOCSIFFLAGS:?/*?Set?interface?flags?*/
??return?dev_change_flags(dev,?ifr->ifr_flags);

?case?SIOCSIFMETRIC:?/*?Set?the?metric?on?the?interface
???????(currently?unused)?*/

??return?-EOPNOTSUPP;

...................

?}
?return?err;
}

dev_ifsioc()會調(diào)用__dev_get_by_name()根據(jù) 網(wǎng)卡名遍歷 net鏈表,如果匹配到則返回net_device結(jié)構(gòu)體指針。接著,SIOCSIFFLAGS會調(diào)用到dev_change_flags(),最后調(diào)用到__dev_change_flags()

dev_change_flags

int?dev_change_flags(struct?net_device?*dev,?unsigned?int?flags)
{
?int?ret;
?unsigned?int?changes,?old_flags?=?dev->flags,?old_gflags?=?dev->gflags;

?ret?=?__dev_change_flags(dev,?flags);
?if?(ret?0)
??return?ret;

?changes?=?(old_flags?^?dev->flags)?|?(old_gflags?^?dev->gflags);
?__dev_notify_flags(dev,?old_flags,?changes);
?return?ret;
}
int?__dev_change_flags(struct?net_device?*dev,?unsigned?int?flags)
{
?unsigned?int?old_flags?=?dev->flags;
?int?ret;

?ASSERT_RTNL();

?/*
??*?Set?the?flags?on?our?device.
??*/


?dev->flags?=?(flags?&?(IFF_DEBUG?|?IFF_NOTRAILERS?|?IFF_NOARP?|
??????????IFF_DYNAMIC?|?IFF_MULTICAST?|?IFF_PORTSEL?|
??????????IFF_AUTOMEDIA))?|
???????(dev->flags?&?(IFF_UP?|?IFF_VOLATILE?|?IFF_PROMISC?|
????????IFF_ALLMULTI));

?/*
??*?Load?in?the?correct?multicast?list?now?the?flags?have?changed.
??*/


?if?((old_flags?^?flags)?&?IFF_MULTICAST)
??dev_change_rx_flags(dev,?IFF_MULTICAST);

?dev_set_rx_mode(dev);

?/*
??*?Have?we?downed?the?interface.?We?handle?IFF_UP?ourselves
??*?according?to?user?attempts?to?set?it,?rather?than?blindly
??*?setting?it.
??*/


?ret?=?0;
????/*?兩個(gè)標(biāo)識有一個(gè)是IFF_UP?*/
?if?((old_flags?^?flags)?&?IFF_UP)
??ret?=?((old_flags?&?IFF_UP)???__dev_close?:?__dev_open)(dev);?//?通過flags?判斷調(diào)用__dev_close?還是?__dev_open

?if?((flags?^?dev->gflags)?&?IFF_PROMISC)?{
??int?inc?=?(flags?&?IFF_PROMISC)???1?:?-1;
??unsigned?int?old_flags?=?dev->flags;

??dev->gflags?^=?IFF_PROMISC;

??if?(__dev_set_promiscuity(dev,?inc,?false)?>=?0)
???if?(dev->flags?!=?old_flags)
????dev_set_rx_mode(dev);
?}

?/*?NOTE:?order?of?synchronization?of?IFF_PROMISC?and?IFF_ALLMULTI
????is?important.?Some?(broken)?drivers?set?IFF_PROMISC,?when
????IFF_ALLMULTI?is?requested?not?asking?us?and?not?reporting.
??*/

?if?((flags?^?dev->gflags)?&?IFF_ALLMULTI)?{
??int?inc?=?(flags?&?IFF_ALLMULTI)???1?:?-1;

??dev->gflags?^=?IFF_ALLMULTI;
??__dev_set_allmulti(dev,?inc,?false);
?}

?return?ret;
}

__dev_change_flags(dev, flags)函數(shù)中,通過判斷flag的IFF_UP位上的值是否相反,來實(shí)現(xiàn)是調(diào)用__dev_close()還是__dev_open()來開關(guān)eth0。

__dev_close

__dev_close中會將當(dāng)前的net_device加入到等待設(shè)備關(guān)閉列表中。

static?int?__dev_close(struct?net_device?*dev)
{
?int?retval;
?LIST_HEAD(single);

?list_add(&dev->close_list,?&single);
?retval?=?__dev_close_many(&single);
?list_del(&single);

?return?retval;
}

__dev_close_many

__dev_close_many通知設(shè)備正在關(guān)閉,等待未發(fā)送完的數(shù)據(jù)發(fā)送完,最后清除開啟標(biāo)記。

static?int?__dev_close_many(struct?list_head?*head)
{
?struct?net_device?*dev;

?ASSERT_RTNL();
?might_sleep();

?list_for_each_entry(dev,?head,?close_list)?{
??/*?Temporarily?disable?netpoll?until?the?interface?is?down?*/
??????????/*?禁用netpoll?*/
??netpoll_poll_disable(dev);
??/*?通知設(shè)備正在關(guān)閉?*/
??call_netdevice_notifiers(NETDEV_GOING_DOWN,?dev);
???/*?清除start標(biāo)志位?*/
??clear_bit(__LINK_STATE_START,?&dev->state);

??/*?Synchronize?to?scheduled?poll.?We?cannot?touch?poll?list,?it
???*?can?be?even?on?different?cpu.?So?just?clear?netif_running().
???*
???*?dev->stop()?will?invoke?napi_disable()?on?all?of?it's
???*?napi_struct?instances?on?this?device.
???*/

??smp_mb__after_atomic();?/*?Commit?netif_running().?*/
?}
??/*?未發(fā)送完的數(shù)據(jù)發(fā)送完?*/
?dev_deactivate_many(head);

?list_for_each_entry(dev,?head,?close_list)?{
??const?struct?net_device_ops?*ops?=?dev->netdev_ops;

??/*
???*?Call?the?device?specific?close.?This?cannot?fail.
???*?Only?if?device?is?UP
???*
???*?We?allow?it?to?be?called?even?after?a?DETACH?hot-plug
???*?event.
???*/

?????????/*?調(diào)用設(shè)備關(guān)閉操作?*/
??if?(ops->ndo_stop)
???ops->ndo_stop(dev);
??/*?標(biāo)記設(shè)備關(guān)閉?*/
??dev->flags?&=?~IFF_UP;
????????/*?啟用netpoll?*/
??netpoll_poll_enable(dev);
?}

?return?0;
}

ndo_stop

ndo_stop為關(guān)閉網(wǎng)卡時(shí),不同網(wǎng)卡驅(qū)動注冊的不同的關(guān)閉函數(shù),我們以海思的網(wǎng)卡驅(qū)動為例,分析下ndo_stop函數(shù)的實(shí)現(xiàn)。代碼位于kernel\drivers\net\ethernet\hisilicon\hns\hns_enet.c

hns_nic_net_stop

static?int?hns_nic_net_stop(struct?net_device?*ndev)
{
?hns_nic_net_down(ndev);

?return?0;
}

hns_nic_net_down

static?void?hns_nic_net_down(struct?net_device?*ndev)
{
?int?i;
?struct?hnae_ae_ops?*ops;
?struct?hns_nic_priv?*priv?=?netdev_priv(ndev);
?
?if?(test_and_set_bit(NIC_STATE_DOWN,?&priv->state))
??return;

?(void)del_timer_sync(&priv->service_timer);
?netif_tx_stop_all_queues(ndev);
?netif_carrier_off(ndev);
?netif_tx_disable(ndev);
?priv->link?=?0;

?if?(priv->phy)
??phy_stop(priv->phy);

?ops?=?priv->ae_handle->dev->ops;

?if?(ops->stop)
??ops->stop(priv->ae_handle);

?netif_tx_stop_all_queues(ndev);

?for?(i?=?priv->ae_handle->q_num?-?1;?i?>=?0;?i--)?{
??hns_nic_ring_close(ndev,?i);
??hns_nic_ring_close(ndev,?i?+?priv->ae_handle->q_num);

??/*?clean?tx?buffers*/
??hns_nic_tx_clr_all_bufs(priv->ring_data?+?i);
?}
}

hns_nic_net_down()中會調(diào)用netif_carrier_off()通知內(nèi)核子系統(tǒng)網(wǎng)絡(luò)斷開。下面我們詳細(xì)分析下netif_carrier_off()的實(shí)現(xiàn)。

netif_carrier_off()

void?netif_carrier_off(struct?net_device?*dev)
{
?????/*?設(shè)置網(wǎng)卡為載波斷開狀態(tài)?即nocarrier狀態(tài),上行時(shí)軟中斷下半部讀到該狀態(tài)不會進(jìn)行網(wǎng)卡收包?*/
?if?(!test_and_set_bit(__LINK_STATE_NOCARRIER,?&dev->state))?{
??if?(dev->reg_state?==?NETREG_UNINITIALIZED)
???return;
????????/*?增加設(shè)備改變狀態(tài)?*/
??atomic_inc(&dev->carrier_changes);
????????/*?加入事件處理隊(duì)列進(jìn)行處理?*/
??linkwatch_fire_event(dev);
?}
}

linkwatch_fire_event()

linkwatch_fire_event()函數(shù)將設(shè)備加入到事件隊(duì)列,并且進(jìn)行事件調(diào)度,調(diào)度中會根據(jù)是否為緊急事件做不同處理。

void?linkwatch_fire_event(struct?net_device?*dev)
{
????/*?判斷是否是緊急處理的事件?*/
?bool?urgent?=?linkwatch_urgent_event(dev);
?/*?判斷是否是緊急處理的事件?*/
?if?(!test_and_set_bit(__LINK_STATE_LINKWATCH_PENDING,?&dev->state))?{
?????????/*?添加事件到事件列表?*/
??linkwatch_add_event(dev);
?}?else?if?(!urgent)
?????????/*?設(shè)備以前已經(jīng)設(shè)置了pending標(biāo)記,不是緊急事件,直接返回?*/
??return;
?/*?事件調(diào)度?*/
?linkwatch_schedule_work(urgent);
}

linkwatch_urgent_event()

linkwatch_urgent_event()判斷是否是否需要緊急處理。

static?bool?linkwatch_urgent_event(struct?net_device?*dev)
{
????/*?設(shè)備未運(yùn)行,非緊急?*/
?if?(!netif_running(dev))
??return?false;
??/*?設(shè)備的索引號與連接索引號不等,緊急?*/
?if?(dev->ifindex?!=?dev_get_iflink(dev))
??return?true;
?/*?設(shè)備作為team?port,緊急?*/
?if?(dev->priv_flags?&?IFF_TEAM_PORT)
??return?true;
?/*?連接與否?&&?發(fā)送隊(duì)列排隊(duì)規(guī)則改變與否?*/
?return?netif_carrier_ok(dev)?&&?qdisc_tx_changing(dev);
}

linkwatch_add_event()

linkwatch_add_event()將設(shè)備加入到事件處理鏈表。

static?void?linkwatch_add_event(struct?net_device?*dev)
{
?unsigned?long?flags;

?spin_lock_irqsave(&lweventlist_lock,?flags);
????/*?若未添加,則添加設(shè)備到事件列表?*/
?if?(list_empty(&dev->link_watch_list))?{
??list_add_tail(&dev->link_watch_list,?&lweventlist);
??dev_hold(dev);
?}
?spin_unlock_irqrestore(&lweventlist_lock,?flags);
}

linkwatch_schedule_work()

linkwatch_schedule_work()對事件處理進(jìn)行調(diào)度,緊急事件立即執(zhí)行,非緊急事件延后執(zhí)行。

static?void?linkwatch_schedule_work(int?urgent)
{
?unsigned?long?delay?=?linkwatch_nextevent?-?jiffies;
?/*?已經(jīng)設(shè)置了緊急標(biāo)記,則返回?*/
?if?(test_bit(LW_URGENT,?&linkwatch_flags))
??return;

?/*?需要緊急調(diào)度?*/
?if?(urgent)?{
????????/*?之前設(shè)置了,則返回?*/
??if?(test_and_set_bit(LW_URGENT,?&linkwatch_flags))
???return;
????????/*?未設(shè)置緊急,則立即執(zhí)行?*/
??delay?=?0;
?}

?/*?如果大于1s則立即執(zhí)行?*/
?if?(delay?>?HZ)
??delay?=?0;

?/*?如果設(shè)置了緊急標(biāo)記,則立即執(zhí)行?*/
?if?(test_bit(LW_URGENT,?&linkwatch_flags))
??mod_delayed_work(system_wq,?&linkwatch_work,?0);
?else
????????/*?未設(shè)置緊急標(biāo)記,則按照delay執(zhí)行?*/
??schedule_delayed_work(&linkwatch_work,?delay);
}

__linkwatch_run_queue()

__linkwatch_run_queue()完成對事件調(diào)度隊(duì)列中設(shè)備的處理。

static?void?__linkwatch_run_queue(int?urgent_only)
{
?struct?net_device?*dev;
?LIST_HEAD(wrk);

?/*
??*?Limit?the?number?of?linkwatch?events?to?one
??*?per?second?so?that?a?runaway?driver?does?not
??*?cause?a?storm?of?messages?on?the?netlink
??*?socket.??This?limit?does?not?apply?to?up?events
??*?while?the?device?qdisc?is?down.
??*/

????/*?已達(dá)到調(diào)度時(shí)間?*/
?if?(!urgent_only)
??linkwatch_nextevent?=?jiffies?+?HZ;
?/*?Limit?wrap-around?effect?on?delay.?*/
????/*
?????未到達(dá)調(diào)度時(shí)間,并且下一次調(diào)度在當(dāng)前時(shí)間的1s以后?
?????那么設(shè)置調(diào)度時(shí)間是當(dāng)前時(shí)間
?????*/

?else?if?(time_after(linkwatch_nextevent,?jiffies?+?HZ))
??linkwatch_nextevent?=?jiffies;
?/*?清除緊急標(biāo)識?*/
?clear_bit(LW_URGENT,?&linkwatch_flags);

?spin_lock_irq(&lweventlist_lock);
?list_splice_init(&lweventlist,?&wrk);
?/*?遍歷鏈表?*/
?while?(!list_empty(&wrk))?{
??/*?獲取設(shè)備?*/
??dev?=?list_first_entry(&wrk,?struct?net_device,?link_watch_list);
????????/*?從鏈表移除設(shè)備?*/
??list_del_init(&dev->link_watch_list);
??/*?未到達(dá)調(diào)度時(shí)間?&&??不需要緊急處理??*/
??if?(urgent_only?&&?!linkwatch_urgent_event(dev))?{
????????????/*?添加到鏈表尾部?*/
???list_add_tail(&dev->link_watch_list,?&lweventlist);
????????????/*?繼續(xù)處理?*/
???continue;
??}
??spin_unlock_irq(&lweventlist_lock);
????????/*?處理設(shè)備?*/
??linkwatch_do_dev(dev);
??spin_lock_irq(&lweventlist_lock);
?}
?/*?鏈表有未處理事件,則以非緊急狀態(tài)調(diào)度隊(duì)列?*/
?if?(!list_empty(&lweventlist))
??linkwatch_schedule_work(0);
?spin_unlock_irq(&lweventlist_lock);
}

linkwatch_do_dev()

linkwatch_do_dev()完成對某個(gè)設(shè)備的狀態(tài)改變處理。

static?void?linkwatch_do_dev(struct?net_device?*dev)
{
?/*
??*?Make?sure?the?above?read?is?complete?since?it?can?be
??*?rewritten?as?soon?as?we?clear?the?bit?below.
??*/

?smp_mb__before_atomic();

?/*?We?are?about?to?handle?this?device,
??*?so?new?events?can?be?accepted
??*/

????/*?清除pending標(biāo)記?*/
?clear_bit(__LINK_STATE_LINKWATCH_PENDING,?&dev->state);

?rfc2863_policy(dev);
?????/*?如果設(shè)備啟動狀態(tài)?*/
?if?(dev->flags?&?IFF_UP)?{
????????/*?鏈路連接?*/
??if?(netif_carrier_ok(dev))
????????????/*?啟用排隊(duì)規(guī)則?*/
???dev_activate(dev);
??else
????????????/*?關(guān)閉排隊(duì)規(guī)則?*/
???dev_deactivate(dev);
???/*?設(shè)備狀態(tài)改變處理,執(zhí)行netdev_chain上設(shè)備狀態(tài)變更回調(diào)?*/
??netdev_state_change(dev);
?}
?dev_put(dev);
}

phy_stop()

最后,hns_nic_net_down()中會調(diào)用phy_stop()將網(wǎng)卡link down。

void?phy_stop(struct?phy_device?*phydev)
{
?mutex_lock(&phydev->lock);

?if?(PHY_HALTED?==?phydev->state)
??goto?out_unlock;

?if?(phy_interrupt_is_valid(phydev))?{
??/*?Disable?PHY?Interrupts?*/
??phy_config_interrupt(phydev,?PHY_INTERRUPT_DISABLED);

??/*?Clear?any?pending?interrupts?*/
??phy_clear_interrupt(phydev);
?}

?phydev->state?=?PHY_HALTED;

out_unlock:
?mutex_unlock(&phydev->lock);

?/*?Cannot?call?flush_scheduled_work()?here?as?desired?because
??*?of?rtnl_lock(),?but?PHY_HALTED?shall?guarantee?phy_change()
??*?will?not?reenable?interrupts.
??*/

}

phy_stop()將phydev->state設(shè)置為PHY_HALTED,將網(wǎng)卡關(guān)閉。

__dev_open

__dev_open為設(shè)備啟用核心函數(shù),該函數(shù)打開eth0,設(shè)置啟用標(biāo)記,并且設(shè)置接收模式,排隊(duì)規(guī)則等。

static?int?__dev_open(struct?net_device?*dev)
{
?const?struct?net_device_ops?*ops?=?dev->netdev_ops;
?int?ret;

?ASSERT_RTNL();
??/*?設(shè)備不可用?*/
?if?(!netif_device_present(dev))
??return?-ENODEV;

?/*?Block?netpoll?from?trying?to?do?any?rx?path?servicing.
??*?If?we?don't?do?this?there?is?a?chance?ndo_poll_controller
??*?or?ndo_poll?may?be?running?while?we?open?the?device
??*/

?????/*?禁用netpoll?*/
?netpoll_poll_disable(dev);
?/*?設(shè)備打開前通知?*/
?ret?=?call_netdevice_notifiers(NETDEV_PRE_UP,?dev);
?ret?=?notifier_to_errno(ret);
?if?(ret)
??return?ret;
??/*?設(shè)置設(shè)備打開標(biāo)記,設(shè)備將設(shè)置IFF_UP標(biāo)志位*/
?set_bit(__LINK_STATE_START,?&dev->state);
?/*?校驗(yàn)地址?*/
?if?(ops->ndo_validate_addr)
??ret?=?ops->ndo_validate_addr(dev);
??/*?執(zhí)行打開?*/
?if?(!ret?&&?ops->ndo_open)
??ret?=?ops->ndo_open(dev);
?/*?啟用netpoll?*/
?netpoll_poll_enable(dev);
?/*?失敗,清除打開標(biāo)記?*/
?if?(ret)
??clear_bit(__LINK_STATE_START,?&dev->state);
????/*?設(shè)備打開操作?*/
?else?{
?????????/*?設(shè)置打開標(biāo)記?*/
??dev->flags?|=?IFF_UP;
?????????/*?設(shè)置接收模式?*/
??dev_set_rx_mode(dev);
?????????/*?初始化排隊(duì)規(guī)則?*/
??dev_activate(dev);
????????/*?加入設(shè)備數(shù)據(jù)到熵池?*/
??add_device_randomness(dev->dev_addr,?dev->addr_len);
?}

?return?ret;
}

hns_nic_net_open()

我們以海思的網(wǎng)卡驅(qū)動為例,分析下ndo_open()函數(shù)的實(shí)現(xiàn)。代碼位于kernel\drivers\net\ethernet\hisilicon\hns\hns_enet.c

static?int?hns_nic_net_open(struct?net_device?*ndev)
{
?struct?hns_nic_priv?*priv?=?netdev_priv(ndev);
?struct?hnae_handle?*h?=?priv->ae_handle;
?int?ret;

?if?(test_bit(NIC_STATE_TESTING,?&priv->state))
??return?-EBUSY;

?priv->link?=?0;
?netif_carrier_off(ndev);
?/*設(shè)置tx?queue的個(gè)數(shù)*/
?ret?=?netif_set_real_num_tx_queues(ndev,?h->q_num);
?if?(ret?0)?{
??netdev_err(ndev,?"netif_set_real_num_tx_queues?fail,?ret=%d!\n",
??????ret);
??return?ret;
?}
?/*設(shè)置rx?queue的個(gè)數(shù)*/
?ret?=?netif_set_real_num_rx_queues(ndev,?h->q_num);
?if?(ret?0)?{
??netdev_err(ndev,
??????"netif_set_real_num_rx_queues?fail,?ret=%d!\n",?ret);
??return?ret;
?}
?/*啟動網(wǎng)卡*/
?ret?=?hns_nic_net_up(ndev);
?if?(ret)?{
??netdev_err(ndev,
??????"hns?net?up?fail,?ret=%d!\n",?ret);
??return?ret;
?}

?return?0;
}

hns_nic_net_up()

static?int?hns_nic_net_up(struct?net_device?*ndev)
{
?struct?hns_nic_priv?*priv?=?netdev_priv(ndev);
?struct?hnae_handle?*h?=?priv->ae_handle;
?int?i,?j,?k;
?int?ret;
?/*初始化中斷,并設(shè)置中斷函數(shù)為hns_irq_handle,每個(gè)rx和tx?queue都對應(yīng)一個(gè)中斷*/
?ret?=?hns_nic_init_irq(priv);
?if?(ret?!=?0)?{
??netdev_err(ndev,?"hns?init?irq?failed!?ret=%d\n",?ret);
??return?ret;
?}

?for?(i?=?0;?i?q_num?*?2;?i++)?{
????????/*使能中斷,使能napi*/
??ret?=?hns_nic_ring_open(ndev,?i);
??if?(ret)
???goto?out_has_some_queues;
?}

?for?(k?=?0;?k?q_num;?k++)
??h->dev->ops->toggle_queue_status(h->qs[k],?1);
?/*設(shè)置mac地址*/
?ret?=?h->dev->ops->set_mac_addr(h,?ndev->dev_addr);
?if?(ret)
??goto?out_set_mac_addr_err;
?/*hns的start函數(shù)為null*/
?ret?=?h->dev->ops->start???h->dev->ops->start(h)?:?0;
?if?(ret)
??goto?out_start_err;

?if?(priv->phy)
????????/*啟動phy*/
??phy_start(priv->phy);

?clear_bit(NIC_STATE_DOWN,?&priv->state);
????/*修改time?每一秒到期一次*/
?(void)mod_timer(&priv->service_timer,?jiffies?+?SERVICE_TIMER_HZ);

?return?0;

out_start_err:
?netif_stop_queue(ndev);
out_set_mac_addr_err:
?for?(k?=?0;?k?q_num;?k++)
??h->dev->ops->toggle_queue_status(h->qs[k],?0);
out_has_some_queues:
?for?(j?=?i?-?1;?j?>=?0;?j--)
??hns_nic_ring_close(ndev,?j);

?set_bit(NIC_STATE_DOWN,?&priv->state);

?return?ret;
}

phy_start()

最后會調(diào)用到phy_start()啟動網(wǎng)卡。

void?phy_start(struct?phy_device?*phydev)
{
?bool?do_resume?=?false;
?int?err?=?0;

?mutex_lock(&phydev->lock);

?switch?(phydev->state)?{
?case?PHY_STARTING:
??phydev->state?=?PHY_PENDING;
??break;
?case?PHY_READY:
??phydev->state?=?PHY_UP;
??break;
?case?PHY_HALTED:
??/*?make?sure?interrupts?are?re-enabled?for?the?PHY?*/
??err?=?phy_enable_interrupts(phydev);
??if?(err?0)
???break;

??phydev->state?=?PHY_RESUMING;
??do_resume?=?true;
??break;
?default:
??break;
?}
?mutex_unlock(&phydev->lock);

?/*?if?phy?was?suspended,?bring?the?physical?link?up?again?*/
?if?(do_resume)
??phy_resume(phydev);
}

參考

https://blog.csdn.net/qq_29044159/article/details/118030335

https://www.likecs.com/show-308571259.html

https://blog.csdn.net/Longyu_wlz/article/details/108026902

http://bbs.chinaunix.net/thread-2020457-1-1.html

https://blog.csdn.net/tiantao2012/article/details/75283527

https://blog.csdn.net/sinat_20184565/article/details/104353185

嵌入式藝術(shù)
MEET SPRING
萬物更生,新歲開啟

???????????????????????????????

? ??

分享

收藏

點(diǎn)贊

在看



嵌入式藝術(shù) 分享一些高級嵌入式相關(guān)知識,包括:計(jì)算機(jī)基礎(chǔ)、操作系統(tǒng)、Linux驅(qū)動、Linux內(nèi)核、RT-thread等,除此之外,并且會組織一些簡單的訓(xùn)練項(xiàng)目,一起成長。 我的創(chuàng)作理念:專注分享高質(zhì)量的嵌入式文章,讓大家讀有所得!
評論
  • 做藍(lán)牙音箱的工程師大概都碰過這個(gè)局面。產(chǎn)品要連手機(jī)放歌,要本地播開機(jī)提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報(bào)。三件事拆開,早先的常規(guī)做法是音頻藍(lán)牙一顆料、數(shù)傳藍(lán)牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機(jī)電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍(lán)牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對藍(lán)牙音箱來說,最實(shí)在的好處就
    唯創(chuàng)知音語音芯片 2026-08-06 15:14 287瀏覽
  • 摘要在防爆電氣設(shè)計(jì)中,只參照芯數(shù)選型而忽略額定載流量,長期滿負(fù)荷運(yùn)行會出現(xiàn)插頭發(fā)熱、接觸面氧化、IP67 密封受熱老化等問題。結(jié)合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數(shù)對照表,區(qū)分冷壓免焊接、焊接兩種接線結(jié)構(gòu)的安全載流數(shù)值,設(shè)置合理電流冗余系數(shù),搭配使用環(huán)境修正參數(shù),規(guī)范防爆接近開關(guān)連接器、防爆法蘭插座的選型計(jì)算方式。關(guān)鍵詞圓形防爆連接器,載流參數(shù)表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產(chǎn)品概述圓形防爆連接器觸點(diǎn)載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128642瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 106592瀏覽
  • 導(dǎo)語在現(xiàn)代高速數(shù)字電路設(shè)計(jì)中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實(shí)踐。濾波器芯片作為凈化傳輸鏈路的關(guān)鍵屏障,其核心挑戰(zhàn)在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態(tài)脈沖干擾,這類干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統(tǒng)函數(shù)發(fā)生器受限于采樣率與邊沿速率,根本無法忠實(shí)復(fù)現(xiàn)如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細(xì)刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 在EMC測試過程中,傳導(dǎo)發(fā)射(Conducted Emission,CE)超標(biāo)是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標(biāo)曲線背后,可能對應(yīng)著完全不同的干擾機(jī)理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負(fù)載、電纜布局或接地結(jié)構(gòu)引起的連鎖反應(yīng)。 · 150kHz~1MHz 超標(biāo):多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標(biāo):通常共模噪聲占主導(dǎo),干擾通過火線/零線對地回路傳播。 如果條件允許,用電流探
    譽(yù)磁電磁兼容EMC 2026-07-31 18:45 502瀏覽
  • 文:杜杰編輯:侯煜當(dāng)?shù)貢r(shí)間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯(lián)邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設(shè)備——境外生產(chǎn)的先進(jìn)機(jī)器人設(shè)備、境外生產(chǎn)的聯(lián)網(wǎng)電力逆變器。FCC在官方情況說明書中明確,該類境外制造產(chǎn)品,“會對美國國家安全或美國民眾的人身安全構(gòu)成無法承受的風(fēng)險(xiǎn)”。本次新規(guī)設(shè)置明確豁免機(jī)制:經(jīng)美國國防部(DoW)、電力逆變器品類經(jīng)美國國土安全部(DHS)審核并授予“有條件批準(zhǔn)”,認(rèn)定對應(yīng)設(shè)備品類不存在重大安全風(fēng)險(xiǎn),即可獲得準(zhǔn)入豁免。同時(shí)政策嚴(yán)格執(zhí)行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 325瀏覽
  • ?摘要:低價(jià)大流量卡正全面退市,政策收緊已成定局。面對傳統(tǒng)號卡的不確定性,隨身WiFi憑借穩(wěn)定連接、多設(shè)備共享、獨(dú)立設(shè)備和靈活套餐等優(yōu)勢,成為務(wù)實(shí)可靠的備選方案。1、流量卡黃金時(shí)代要結(jié)束了通信行業(yè)正迎來一場前所未有的“地震式”調(diào)整——曾讓無數(shù)用戶追捧的低價(jià)大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業(yè)洗牌。回望過去,19元200G的神卡,那時(shí)真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設(shè)計(jì) 2026-08-03 10:21 128873瀏覽
  • 在物聯(lián)網(wǎng)從“萬物互聯(lián)”邁向“萬物智聯(lián)”的進(jìn)程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡(luò)覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場的絕對主力。隨著2G/3G網(wǎng)絡(luò)的逐步退網(wǎng)以及新國標(biāo)對終端設(shè)備智能化、定位功能的強(qiáng)制要求,Cat.1模組迎來了爆發(fā)式的增長窗口。在這一關(guān)鍵節(jié)點(diǎn),基于華為海思Hi2131芯片設(shè)計(jì)的LTE Cat.1模組,憑借其在能效、射頻、架構(gòu)及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競爭力的連接最優(yōu)解。核心技術(shù)優(yōu)勢:重塑Cat.1能效與連接標(biāo)桿海
    用戶1778981989717 2026-08-05 21:04 169瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐 J褂瞄_關(guān)型的充電控制芯片不穩(wěn)定。嘗試自行設(shè)計(jì)一個(gè)。整體采用分立三極管 + TL431架構(gòu),分4個(gè)功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實(shí)現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導(dǎo)通,對地拉低 R1、R2 組成的分壓控制節(jié)點(diǎn)電位;該節(jié)點(diǎn)直
    southcreek 2026-08-07 13:45 321瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個(gè)生產(chǎn)過程里哪怕0.1微米的誤差,都會直接廢掉整批產(chǎn)品,這也是小尺寸晶振過去長期依賴進(jìn)口,國內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 381瀏覽
  • 在前六期中,我們已經(jīng)分別討論了 CRA 的適用范圍、整體影響、漏洞通報(bào)義務(wù)、風(fēng)險(xiǎn)評估與技術(shù)文檔證據(jù)鏈、第三方組件與 SBOM 供應(yīng)鏈治理,以及產(chǎn)品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業(yè)已經(jīng)能夠回答幾個(gè)核心問題:產(chǎn)品是否落入 CRA 適用范圍,產(chǎn)品由哪些組件構(gòu)成,企業(yè)如何證明自己在設(shè)計(jì)、開發(fā)和上市前采取了必要的安全措施,以及產(chǎn)品上市后如何持續(xù)維護(hù)和安全下線。但對于真正準(zhǔn)備落地 CRA 合規(guī)的企業(yè)來說,還有一個(gè)更現(xiàn)實(shí)的問題:CRA 的法規(guī)條文相對原則化,企業(yè)應(yīng)當(dāng)如何把“網(wǎng)絡(luò)安
    虹科云科技 2026-08-03 16:51 155430瀏覽
我要評論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 兵在哪马在哪俑在哪导游你在哪| 勇者王粤语| 神断狄仁杰第二部| 电影女囚| 武契奇联大痛斥北约| 21世纪爱情指南免费版| 危机迷雾| 铁血娇娃| 星克莱尔魔术师在线看| 激情艳女| 蜜桃成熟33d全集百度影音| 特殊的游泳教练在线观看中字| 胜者为王iv争霸粤语 | 电影呼唤生活| 雷迪嘎嘎演唱会| 女长官的体罚1-43集介绍| 唐人街探案3正片完整版免费观看| 法版风女管家2008版| 谁日过女副市长姜保红| 高清《我的娜塔莎》电视剧| 新人类《毒医肥尸》电影完整版在线 | 酒店1-90集免费观看中文| 电视剧画眉三十八集免费观看| 侯门嫡女谋略:定乾坤短剧全集| 高压监狱法版1分45钟高清免费观看 | 《丈夫面前被搬工人欺负的电影》全 | 唐凯vs丹勒二番战结果| 《女子高压监狱2》法国版完整版免费| 6708杏色水蜜桃| 《婚前的忠贞》电影免费观看| 《堕落的女律师》HD中字| 龙卷风优化| 沙田区| 皇家一号娱乐| 指环王:力量之戒第二季| 女子监狱满天星法版2024 | 跨界歌王第三季| 坎贝奇《无憾》免费下载| 最美的时光第一集| overflow第一季全集樱花观看| 歧路兄弟全集免费观看完整版| 延吉市| 我爱男保姆电视剧| 电影婚戒| 酒店第1-100集全集观看| 听海哭的声音是什么歌| 怪盗基德的结局| 三年大片免费观看完整版高清第三集| 下一站是幸福在线观看全集| 少林方世玉| 法国空乘10| 西游记之大圣归来西瓜| 新乱世佳人在线观看免费| 小蜜蜂姐妹5娃娃脸| 刺客伍六七玄武国篇免费观看| 麻辣变形计电视剧全集免费观看| 战狼9欧式少女免费播放电影推荐| 非洲和尚| 品三国mp3| 爱我多深删除的三个片段分别是什么| 切糕段子| 学校2013一共多少集| 入室强奸电影完整版| 家国两难全| 《怪谈》免费观看| 萝莉星克莱尔 在线| 一夜丈夫 电视剧| 新包青天吕良伟版普通话| 疯狂小女生完整版| 职业替身泰剧| 傻婿觉醒:大佬跪迎短剧全集| 美丽的小樱桃美国电影| 一起过春天电影在线观看| 高清《顽主》| 韩剧《蓝帽子》完整版| 中国新说唱第一集| 《强奸2制服诱惑》| 厕所花子vs倔强的驱魔师| 樱花动漫免费看妖神记第五季 | 难寻电视剧免费观看全集完整版| 高清《忠犬》在线观看| 鸦片战争演义| 西班牙掌中之物电影在线观看| 科洛弗悖论| 美国队长3 下载| 3对1:三人| 山河同在52集免费观看完整版| 棒子老虎机| 爱唯侦察D V D| 某年某月某一天| 烧饼皇后下载| 木下凛凛子主演| 浪漫满屋全集| 三妻四妾高清免费观看第7集 | 缬怎么读| 法证先锋 3| 全球最让人害羞的时装比赛 | 妻子的姐姐免费观看大全电视剧| 启示录电影完整版免费观看| 色九月在线观看| 《曼哈顿金牌经纪 第二季》未删减| 密室死斗| 美国版《健美》在线播放| 少林扫地僧| 带球跑宝:虐渣超神短剧全集| 《女海盗1》美版免费观看| 利刃出击在线观看| 旧版水浒传全集| 儿子同学的妈妈卖保险| 终极一班3全部| 鸭王 团购| 《美容院特殊待遇》在线观看| 太极拳战泰拳| 俺去也资源站| 小早川伶子电影| 黑暗圣经外传| 我是刑警免费观看版| 三级《偷妻》| 上位完整版下载| 回家的诱惑电视剧免费完整版| 《妻子8》HD免费完整| 无烟柴火气化炉| 银魂201| 孙静雅 快播| 壮志凌云满天星法版免费完整版在线观看 | 农民乡2下妺三级HD11| 《梦境》电影| 莫妮卡贝鲁奇《地爆天星》电影无删 | 唯你归途短剧免费观看| 重生之爱泰剧| 远征军电视剧| 高清《婚前试爱》罗仲谦周秀娜| 魔盒电影网| 蜜桃成熟时3之蜜桃仙子| 爆火短剧单亲妈妈| 漂亮女邻居| 剑来第一季免费观看完整版动漫| 热辣滚烫电影免费看| 天道结局| 兄妹在客厅当父母2上映时间| 猎罪行动电视剧免费播放| 天机富春山居图在线观看| 终极笔记电视剧免费观看高清| 从后面来从前面来| 攻击嗓子的新病毒来了| 非诚勿扰百度影音| 禽流感什么症状| 电视剧寻秦记| 血滴子电影下载| 替夫还债的电影完整版中文字幕| 里番牝教师 淫辱yy4180| 妻子6韩国免费完整版电视| 风雨哈佛路电影| 牙医诊所1986电影完整版在线观看| 终极追捕电视剧全集免费观看| 向井蓝免费观看| 祈祷爱情电视剧| 成都4P雪梨枪在线免费看 | 吾家小女不好惹| 侏罗纪公园5| 使徒行者优酷| jⅰzz日本| 偏偏喜欢你电视剧免费观看| 酒店1到75集免费观看| 不说谎恋人免费观看全集| 巨乳保险| 小猪佩奇全套| 王多鱼视频观看全集高清| 查泰莱夫人的情人2022| 良心无悔免费观看全集| 进击的巨人06| 密宗威龙国语完整版| 金鹰卡通节目在线直播| 大头和珍珍合集| 珠海35人死亡事故原因| 幸福到万家多少集| 齐天大圣孙悟空陈浩民全集| 变形记20120202| 旺角黑夜粤语| 薇娃 碧安卡| 楼下女友请签收全集免费观看| 时尚王韩剧免费观看完整版| 电影正义的慈悲| 虎鹤妖师录 电视剧免费观看| 《私人航空》| 圣斗士混沌篇| 我们结婚了20101016| 金刚狼2 字幕| 北京 发廊| 《妈妈的外遇》电影| 韩讯五第二部| 《水电工人的艳遇》免费| 我不会再逃了我错了| 永乐大帝电视剧全集免费观看| 17se电影| 年的继拇4| 丁小芹孙协志| xl司令第一季动漫在线观看免| 和顺县| 致命关系| 战狼6免费高清版视频| 淘宝公布2023年度丑东西 | 电影爱的色放在线观看| 《特殊的精油按摩| 女超人满天星无删减麦乐迪版在线| 春晓舞蹈| 战狠6完整版在线观看| 万湖会议| 龙之谷破晓奇兵2| 双鱼陨石在线观看| 花与蛇 零| 法国空乘4之不良航班| 英语老师充足的奶水| 时光尽头的恋人| 高清《碧血剑》电影| 电影欢乐英雄| 修理工的艳遇 在线| 娄艺潇新恋情曝光| 生化危机5上映| 林凡短剧免费观看全集| 高清《沈家嫡女》短剧全集| 求爸爸播种| 超级警察3在线国语完整版| 阿瓦人民唱新歌| 小沈阳2012北京春晚| 黄曼巴罗伊| 《代替满足妻子》电影| 这省凭什么春节游客量第一| 她们的爱| 一见如花你就笑| 百度蹊径| 1995版《泰山和珍妮丛林》男女主角是| 乒乓球男团决赛完整版| 白发电视剧在线观看全集免费高清| 雪中悍刀行33集免费观看| 少林七十二绝技| 绿光森林全集| 至尊红颜内地版| 恐怖浴室| 泰版永恒无删除版| 你巅峰时我退让你衰老时我骑脸| 《特殊游泳教练》在线观看 | 廖凡宿敌电视剧免费观看全集| 公主与青蛙电影| 抗战奇侠| 罕见四胞胎排排睡| 夫妻隔帘按摩同时绿帽免费电影| 糊涂的爱小品| 锵锵锵锵锵锵锵锵电视剧| 女官升职记:宫女到女相短剧全集| 火影忍者h动漫| 第22条婚规 电视剧| 《女超人麦乐迪》免费| 海军陆战队员快播| 中国摩登家庭| 骑马舞mv| 《外出》电影在线观看| 《有翡》观看免费完整版| 星际蓝多多全集| 《激战后厨5》完整版日本| 刘倩楠微博| 蛇姬恋| 帝王之妾免费全集在线观看高清| 法国版《女超人:麦乐迪》2013| 舒淇主演《玉女心》电影免费观看| 爸爸需要播种子| 哪里可以看晚娘| 农民伯伯下乡2国语版百度云电影| 浴火女凰免费观看完整版| 偷偷藏不住46集初吻| 《我的初恋不是姐姐》动漫| 我在北京挺好的第6集| 三佳购物网上商城| 少女3完整免费观看版高清在线| 索多玛120 日韩电影免费| 好久不见电视剧在线观看免费完整版| 空蝉之森在线观看高清完整版| 滨崎步演唱会高清| 兔子先生在线观看高清完整版免费 | 《驯服》电影完整版丽卡结局是什么| 麻辣女宾| 拐个皇子回现代| 很爱很爱你电视剧| 我的野蛮女友 全智贤| 渔夫的老婆赛仑免费观看| 神印王座在线看| 女超人2满天星版| 彩翼儿童美术| 粉红满天星36| 朋友的妻子中字 在线观看交换| 九歌电影高清版免费观看在线| 蜡笔小新全集播放| 再度重相逢伍佰| 长相思第60集完整版免费下载| 肥龙过江粤语在线| 南少林三十六房全集| 克宫:普京不打算祝贺特朗普胜选| 胜者为王3王者之战电视剧| 她来自胡志明市电影| 为爱疯狂| 森田芳光| 需要爸爸播种子2美国电影第二部| 课外授业3在线| 美国1985小辣椒| 人民公社大食堂| 二十一世纪性格指南全集免费看| 《我不是戏神》第一季在线观看全集 | 恶魔的教育| 大风杀电影免费观看| 白衣绳索牙医电影完整版 | 姐姐的朋友2在线| 寻秦记2018| 高清《巴黎小姐》电影在线观看| 开心姐姐在美国| 伊波拉病毒国语高清| 姊妹牙医完整版视频在线观看| 世界十大巨兽排行榜| 维修工人的绝遇2中文版| 韩剧《美人》完整版| 《公的浮之手中字》电影完整版 | 天域战士2| 原谅他77次免费观看完整版| 地爆天星无删减完整版| 日本阅兵| 兔子先生第一季在线观看免费高清 | 郝板栗千金小姐在线观看| 三打白骨精西瓜影音| 最近我的妹妹样子有点怪真人电影原声| 电视剧使命全集| 俘虏之锁1~4集免费观看中文版| 先生你哪位| 正阳县| 暴走微电影| 繁华似锦电视剧演员表| 女超人满天星版麦乐迪马克斯在线观看视频| 高清《葬送的芙莉莲》| 吴健版农民伯伯全集免费看| 错爱 余文乐 下载| 《双女任务》完整版电影| 查泰莱夫人的| 孤注一掷在线观看| 《女医生4》免费观看全集完整版| 天魔异种| 牙医姐妹1986日语版在线观看| 子弹慢镜头| 理伦电影第2季| 短剧《撕夜》免费观看| 佩奇小猪佩奇动画片免费观看| 搞基是什么| 寒战2免费| 男子坐飞机和妈祖邻座| 龙月泰剧1集免费观看| 美丽l小密桃5| 电影《红色角落》完整版免费观看| 《需要爸爸播种子》HD免费在线播放 - 全集电影 - 金鸿影视 | 李二不哈| 马达加斯加的企鹅第三季动漫| 高压监狱法版1小时46分预告片| 我的爸爸是森林之王| 《乳房按摩》免费观| 新济公活佛下部2015| 女人的战争免费观看| 无名之辈:否极泰来未删减| 高清《千金》在线完整观看日剧| 大汉王朝电视剧免费观看| 与讨厌的部长一起去出差旅在线免费观看 | 高清消失的妻子| 恶搞奥巴马演讲| 南来北往策驰影院| 天坑鹰猎电视剧免费观看完整版| 美容是特殊待遇| 长河落日在线电视剧免费观看| 美容院特殊待遇电视剧| 寂寞 谢容儿| 核弹总动员| 电影长城大决战| 我是歌手官方网站| 《男按摩师做乳房按摩》在线观看视 | 夺命速递| 公的粗大挺进了我的密道的演员表| 青春期失乐园全集| 徐锦江吃叶子楣乳| 《激战丛林》完整版观看在线播放| 他其实没那么喜欢你在线观看| 黑白配电影高清在线观看| 家常菜电视剧全集免费观看| 安义县| 金刚2帝国崛起免费播放在线观看| 不再说分手| 伊波拉病毒无删减免费观看完整国语版| 幸福密码电视剧| 《强奸ii制服诱惑》清晰免费观看韩国-兵临城下服诱惑》清晰免费观看韩国-兵临 | 木下檀檀子完整版免费看| 变形警车珀利| 大男当婚全集下载| 向涟苍生士献上纯洁第一季| 曾经想火| 美丽小蜜桃5最经典的一句| 傻婿觉醒:大佬跪迎全集免费| 荣誉守则完整版在线观看 | 新有菜电影在线观看| 沉香如屑电视剧40集全| 师傅在首尔| 善良的嫂子2字巴巴鱼汤饭| 都市后宫艳妇全部阅读| 绿色帽子电影完整版| 李小龙电影全集国语高清| 郝板栗《姐妹》| 吉他精灵| 原神旅行者插雷电将军的游戏| 莱恩安德森《满天星》| 思春期动漫| 台江县| 海贼王狂热行动在线观看| 小品小崔说事| 《出差遇到前任》全集在线观看 | 坎贝奇《无憾》全集免费看| 猪猪侠泡泡糖| 杜拉拉升职记歌曲| 忍者无敌| 诛烬枭亡 电影免费观看| 姨母家客厅| 重生70再高嫁短剧免费观看| 《闪婚老伴是豪门》免费观看| 天生一对印度| tobu4 HD免费,电影| 巧虎动画片| 烧包谷云南方言版| 南部档案电视剧| 高清异世界的安泰全看社畜未删减| melodymarks女超人无删减免费播放 | 识夜描银| 猫和老鼠全集| 女友母亲双字ID| 我的教师生涯 电影| 终极恶女| 鬼灭之刃游郭篇| 食人神之山在线观看完整版| 三年高清观看免费大全一| 十七岁电影免费看| 蝴蝶效应2| 朋友的妻子.| 我们的秘密| kendykross壮志凌云| 雄狮少年电影| 韩国演艺圈| 瓦噶黄色电影| 在夫面前被强行侵犯的人妻| 瓜棚女杰| 意大利电影爱情与秘密| 只有你泰剧完整版免费观看| 我要爸爸的种子电影完整版 | yellow视频在线观看| 麦迪乐马克斯女超人正版| 电影偷窥者| 一二三电影| 李娟就董宇辉一坨赞美发声明| 隐身帽在线观看完整| 沈樵第二部闺蜜20分钟| 儿媳的味道| 仙逆哪里可以看到76集| 青春荷尔蒙2 国语| 黑白配中文免费观看| 烈火青春19| 站着再来一次30集全免费高清| 新醉打金枝电视剧| 斗破苍穹年番全免费观看| 暴躁老妈46集全免费播放柳暗花明又一春的上句是什么? | 电视剧《青盲》免费观看| 漂亮的妈妈中字开头5个字| 爱的疯狂| 猎毒者电影| 木子檀檀子剧免费观电影| 阿西门的街| 人民的名义 直播| 《黑土无言》电影免费观看| 盟军夺宝队百度影音| 妻子当社长秘书偿还债| 飓风奇劫电影| 法国航空2满天星3| 俘虏之锁全集下载| 二泉映月课文朗读| 变成黑辣皮之后第1集| 爱情珠宝电视剧全集免费观看| 风云雄霸天下1.5| 斯巴达(大人版)满天星| 无心法师金晨| 电影玩火在线观看完整版| 短剧合集金牌销售| 袁隆平去世降半旗| 为时已是寿司!?未删减| 《500排毒》电影叫什么| 摇滚狂花电视剧免费观看| 柳江县| 国乒女团丢冠后马琳缺席颁奖仪式| 继父在线观看| 美国《睫毛膏4》美国版| 冲出虚拟世界| 小姐电影完整版在线观看免费| 需要爸爸来播种在线观看完整版中文版| 小狼电影| 有爱就有家电视剧| 南极大冒险| 叛逆者在线观看完整版电影| 《美丽妻子替丈夫还债》电影完整版| 李小龙传奇电视剧| 高清《你的名字》高清免费观看| xl司令第一季全集免费观看动漫| 我的漂亮姐姐韩剧完整版中文| 满清十大刑酷快播| 美国大片国语配音| 加勒比海盗5 死无对证| 我年轻瘦子的8| 法国空乘2019法版英文名字| 魔王学院的不适合者动漫免费观看| 麦乐迪版女超人| 夏目彩春出演的电影中文字幕| 高清《暗战1》电影在线观看| 好妈妈14中汉字| 韩国片黄18以上在线观看| 女法医jd| 坎贝奇《品味人生》第二部| 黑大佬的365天无删除完整翻译| 女排vs荷兰女排| 男女做爰猛烈叫床视频动态图| 《新人类毒医肥尸》免费观看 | 一个完美结局电影完整版在线观看 | 一次邂逅| 女警坠落| 两个人的寂寞| 管家后宫学园07| 《女兵俘虏营》| 跑男第十二季免费播放| 我是特种兵之利刃出鞘片尾曲| 两个人的世界电视剧在线观看完整版| 大江大河第一部全集免费观看| 《瓜达卢佩的玫瑰》| ssni780| 蓝可儿电梯事件| 周香允的《外卖奇遇》| 独孤曼陀结局| 韩国演员金承佑| 大兵的寝室在线观看免费播放电视剧| 青山不老课件| 十大奇冤下载| 女版战狼六三人| 血仍未冷| 黑衣人小方| 种马猎人美国1982电影HD| 海角七号百度影音| 甄嬛传下载迅雷| 麦乐迪马克斯女超人电影| 南京城市频道| 高清《满意度》电影完整版免费观看 | 彼女动漫| 男女一起免费观看高清完整版电视剧 | 黑狐电视剧免费全集在线观看| 烧仙草和龟苓膏| 大学生4第一季| 长津湖2021在线观看完整版| 天魔异种| 斯巴达第四季39集剧情| 电影三毛从军记| 血腥的夜晚| 女版战狼10普通话版免费播放下载 | 高清极寒潜袭| 《我是妈妈》1-60集| 法国外籍兵团谈论站| 地牢女孩在线观看完整版高清| 法国空姐3| 白娘子影院免费高清观看电视剧| 猫屎妈妈粤语20| 白峰电影在线播放免费版最新章节 | 办公室的秘密2在线观看免费全集电视 | 《法国空姐2020法版》中文版| 幸福密码40集完整版| 杰克逊 地球之歌| 麻生香织黑色的眼泪| 通天狄仁杰| 薛仁贵传奇分集剧情| 《丈夫上司部长与妻子| 隔山有眼2| 功夫教练| 正在播放: ROE-417 在见证女儿幸福的同时……却在婚礼宴席上,被女婿侵犯的母 | 义子侵犯北条麻妃在线观看 | 誓言今生 下载| 《婚礼的前一天与前男友》| 大江大河第一部全集免费观看| 云雨生死恋国语完整版免费观看| 木下檩檩子电影免费观看高清版| 关东棋王| 如果时间有回音| 法国凌云壮志成版2011| 《维修工艳遇》2007| 电影你好李焕英免费高清在线观看| 理发店里的特殊待遇在线 | 13一14chinesex破| 白雪公主H成 版伦理| 金蝉脱壳电影| 生命之旅国语版在线观看| 伊朗美国驻华使馆隔空掐架| 神奇 电影| 中日最新动态| 泰安市| 战狼6免费高清| 高清《佐佐木与宫野》| 一路向西电影在线观看| 《overflower》第一季动漫真人版 | 八仙饭店电影| 归路第二部电视剧第一集| 无名之辈:否极泰来电影| 东游记电视剧| 《女律师的堕落》HD| 封神2在线观看完整免费观看国语| 星梦缘优酷| 青草青青视频| 武朝迷案| 《驯服小峓子2》丽卡在线观看| 笑傲江湖中东方不败是男是女| 无名老僧| 《私人航空》法国电影免费观看完整版 | 少女大人在线观看免费韩剧| 公与2个熄乱理| 日本一卡二卡三卡四| 肉蒲团电影下载| 五亿探长雷洛传2| 苍空电影完整版免费| 之后2第二季免费完整观看| 新白娘子传奇50集免费观看| 楞严咒全文| 星空在线观看免费| 天使堕落| 需要爸爸的种子美国子弹电影在线观看| 铃音りおな| 《泰莎的绣感》完整版| 非洲人与性动交CCOO| 名创优品指甲油致癌物超标| 四大名捕1(国语版)| 战狼6高清免费下载| 斗破苍穹年番第四集在线观看| 爱的理想生活大结局| 诱人的老师4| 《死亡之花》| 图书馆员第四季在线观看全集| 战狼6欧式少女全集在哪看啊| 汪汪队立大功全集免费观看中文版| 韩剧国语版面包大王| 楼上女邻居电视剧全集| 残酷的温柔 彭佳慧 | 雾岛奈津美全集种子| 进击的巨人第二季第三集| 《秒速5厘米》| 出轨的味道在线观看| 夫妻本是林中鸟短剧全集免费观看| 《无憾》电影完整版| 幸福的面包| 高清《海狼行动》免费播放| 赤坂丽牙医诊所| 四方馆 电视剧| 3d肉蒲团高清在线| 四十七浪人| 生死线电视剧全集免费观看完整版| 总之就是非常可爱第二季免费观看| 《夫妻一场》大结局| 再生人电影在线观看国语版| 甄嬛传百度影音| 姜素拉影院三级在线观看| 无颜之月1~5集无删减观看策驰| 杨思明敏电影| 高压监狱2法版1小时43分| 高清砖墙谜攻| 高清《高嫁柳嫁家》在线看| 售楼小姐| 豪门大佬的校草男友| 陈加玲惊艳的电影| 同事三分亲国语全集| 风满女管家| 尹律最新电影| 美英空袭也门:夜空升起巨大火球 青柠在线观看免费高清电视剧下载 | 黑名单上的人全集免费观看| 谢娜唱哭了| 色妻交换| 性的暴行2糟蹋女兵电影在线观看| 高清《希望的大地》电视剧| 烈火街头| 美国忌讳1~7| 魔法咪路咪路高清| 母亲4中字免费完整| 禅宗少林音乐大典| 塔日酒店未删减版在线观看 | 妻子8免费全集高清观看在线| 功夫小龙| 她的潮汐| 波多野结衣高清全集| 女超人麦乐迪完整版观看| 电视剧淬火年代| 邻家有女韩剧在线观看国语| 高压监狱2在线完整免费高清原声满天星2019 | 《永不独眠》在线观看| 白峰美羽大尺度电影在线观看| 百变机兽之元气星魂| 妖女迷行第五季| 覆雨翻云 电视剧| 娃娃脸4在线观看免费观看电视剧| 延禧攻略70集免费观看完整版| 表演系的故事| 莫丽3特别酒店完整版| 功守道电影| 《东宫》电视剧免费观看西瓜影院 | 《牙医姊妹》完整版1986| 龙少爷粤语| 大鱼电影在线观看| 蒋玲玲版《渔夫的荒野史记》剧在线 | 侦探语录免费观看完整版| 美国版《健美》| 壮硕军警猛男高H| 刻晴被盗宝团C的不能自理| 卿本佳人在线观看| 《玛丽玛丽》满天星中文| 浪子燕青电视剧| 孽欲狐仙| 蒋玲玲版《渔夫的荒野史记》剧在线| 美国电影想要爸爸播种| 《美丽小蜜桃》1| 雨春电影| 需要爸爸播种 美国版在哪里可以看 | 香格里拉开拓异境| 花样男子大结局| 和部长出差的日子在线观看| 变脸印度电影| 大漠苍狼电视剧| 逃犯入室暴行电影免费播放 | 灵魂战车2在线观看| 电影婚礼2008| 大明劫在线观看| 菠萝蜜菠萝蜜影视在线观看| 费马的料理| 折腰电视剧免费观看完整版| 《爱我几何》免费完整版| 凯登·克罗斯全集| 偏偏喜欢你 电视剧| 麦克斯的魔法世界| 农场交易满天星| 佐罗 西班牙| 数码暴龙| 罗生门免费| av无| 潘金莲之前生后世| 中日大对决| 诱人的岳HD中文字幕| 姐姐的朋友3在完整有限中字第5| 高福:长新冠是基本事实| 吉尔莫女孩第二季| 类似战狼六的欧式少女电影| 张婧仪电影《独一无二》免费观看| 好想告诉你2动漫| 凯登克罗斯最火的5部电影| 《法国伦理女警》完整版| 生死兄弟情剧情介绍| 女儿的味道免费观看| 塔日酒店在线观看高清完整版 | 罗刹海市刀郎原唱完整版| 荒野求生无马赛原版在哪里看| 《我的舞蹈女教练》| 扫黑风暴28在线观看| 《借命而生》| 唯一的听众教学设计| 同学的妈妈中字ID英文| 终结者 黑暗命运| 弃女归家:家产归我完整版观看| 电视剧爱了散了| 《特殊游泳教练》免费观看平台| 暗花电视剧全集| 菲律宾玩火在线看完整版电影| 2001个疯子在线观看| 1995意大利版泰山全版| 大冶风云网| 我的女神室友| 欢乐颂全集360云盘| 千金与佣人日剧电影免费观看| 火腿火腿电影| 电影沙丘| 来电奇缘全集| 粉红大白菜在线观看 | 满天星法版免费壮志凌云| 野蛮奶奶大战| 百花奖总导演致歉| 有一种悲伤 刘以豪| 《修理工的艳遇》观看| 逃英乱港分子染上奥密克戎| 海底小纵队中国之旅| 家庭教师59| 电影金银梅| 超碰10| 再喊一声爹娘| 青面修罗免费观看| 军事不当| 黑道风云20年第二部| 真爷们儿电视剧全集| 上错花轿嫁对郎电视剧全集观看 | 男朋友让我带着跳蚤出门| 归途电视剧全集免费观看乐视| 昼颜 电影| 千金赤子板栗无删减版免费观看视频 | 黑白配免费观看完整版| 燃烧电视剧| 始作俑者的意思| 女友的妈妈双字ID高冷| 甩皮鬼在线观看| 春日狂热| 良师男友电视剧| 台湾《小凤新婚下》演员表| 轮到你了短剧合集| 太空部队第二季| 突然的喜欢一共多少集| 爱我几何《莫妮卡》电影| 美国禁忌三部曲满天星| 杀出绝地| 《娜塔莎》电影在线观看| 电视剧辛亥革命| 《高级特工满天星》| 杨佑宁十七岁的天空| 动漫无双3终极无敌版| 常香玉电视剧| 罗丽星克莱尔性迷宫片长| 临时同居 电影| 老人街头散钱66万无人要| 全集免费观看1-40集| XL司令高清免费看| 胜算电视剧免费完整版在线观看| 水饺皇后未删减| 乾隆下江南电影| 82板杨敏思版本1-5电视剧免费观看就是| 韩剧高级课程完整免费观看| 缘之空动画| 老舅一共多少集| 法国电影《金牌销售》在线播放| 东莞东坑新东泰| 战狼9欧式少女中文版| 婚礼前婚闹先上车在线观看| 笑功震武林下载| 《反击》在线观看完整版| 酒店激战5| 《女狱警》法国正版完整版| 米老鼠与唐老鸭全集| 窃听风云3| 蜜桃成熟时33d在线观影| 我好兄弟的女朋友 | 弱杀无删减版在线观看完整版 | 高清钢琴事故| 大力女子都奉顺|