• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    支持多線程并發(fā)與消息異步處理的Linux Netlink通信機(jī)制研究

    2017-11-02 15:50熊偉丁涵羅云鋒
    軟件導(dǎo)刊 2017年10期

    熊偉++丁涵++羅云鋒

    摘要:Netlink是Linux操作系統(tǒng)內(nèi)核空間與用戶空間最流行的進(jìn)程間通信機(jī)制之一,但目前在多線程程序中的使用還存在一些問題。介紹了Netlink相對于Linux其它傳統(tǒng)通信手段的優(yōu)點(diǎn),闡述了使用Netlink進(jìn)行用戶程序與內(nèi)核模塊通信的實(shí)現(xiàn)方法,分析了目前公開資料上Netlink線程并發(fā)支持機(jī)制存在的問題,并給出了支持多線程并發(fā)與消息異步處理的正確方法,最后在真實(shí)機(jī)器上進(jìn)行了驗(yàn)證。結(jié)果顯示,該方法能有效支持在多線程Linux應(yīng)用中使用Netlink進(jìn)行用戶態(tài)與內(nèi)核態(tài)通信。

    關(guān)鍵詞:Linux;nelink;進(jìn)程間通信;多線程并發(fā);異步處理

    DOIDOI:10.11907/rjdk.172576

    中圖分類號:TP319文獻(xiàn)標(biāo)識碼:A文章編號:16727800(2017)010009905

    0引言

    Linux是當(dāng)今應(yīng)用最廣泛的操作系統(tǒng)之一,其兼容性好,能適應(yīng)從嵌入式設(shè)備、個人用戶終端到高性能服務(wù)器的不同硬件平臺,具有多任務(wù)與多用戶能力。Linux符合POSIX標(biāo)準(zhǔn),在GNU公共許可權(quán)限下可免費(fèi)獲得其內(nèi)核源代碼,同時還具備完整的軟件生態(tài)鏈,包含各種開發(fā)工具及第三方軟件庫,非常方便用戶開發(fā)定制自己的應(yīng)用。

    Linux采用模塊化單內(nèi)核架構(gòu),支持內(nèi)核模塊動態(tài)加載與卸載,其系統(tǒng)地址空間結(jié)構(gòu)如圖1所示。Linux所有

    圖1Linux操作系統(tǒng)結(jié)構(gòu)

    內(nèi)核代碼可看作一個整體,運(yùn)行在一個獨(dú)立的地址空間中,通常被稱為內(nèi)核空間[1]。運(yùn)行于內(nèi)核空間的代碼不受任何限制,能夠自由地訪問任何有效地址以及直接進(jìn)行設(shè)備訪問。而用戶應(yīng)用運(yùn)行在內(nèi)核之上,其不能隨意占用系統(tǒng)資源與修改系統(tǒng)配置,從而確保系統(tǒng)安全性與穩(wěn)定性。

    在日常應(yīng)用中,應(yīng)用程序通常包括上層用戶界面程序與底層內(nèi)核驅(qū)動模塊兩部分,用戶界面負(fù)責(zé)接收用戶輸入及顯示最終處理結(jié)果,內(nèi)核驅(qū)動則負(fù)責(zé)調(diào)用內(nèi)核處理用戶請求。因此內(nèi)核空間與用戶空間進(jìn)行通信的方法非常重要。

    目前,Linux常用的內(nèi)核用戶通信機(jī)制有以下幾種[2]:

    (1)設(shè)備驅(qū)動接口。設(shè)備節(jié)點(diǎn)位于/dev目錄下。設(shè)備驅(qū)動接口允許用戶訪問設(shè)備節(jié)點(diǎn)[3],利用copy_from_user()與copy_to_user()函數(shù),在用戶態(tài)與內(nèi)核態(tài)間拷貝數(shù)據(jù)。但是這兩個函數(shù)只支持阻塞式調(diào)用,不能在中斷中使用,而且只支持用戶程序主動進(jìn)行通信,通常用在硬件驅(qū)動中。

    (2)Proc與sysfs文件系統(tǒng)。Proc與sysfs是虛擬文件系統(tǒng),用于顯示進(jìn)程、處理器、內(nèi)存、中斷等信息[4,5]。用戶可以通過讀寫這兩種文件系統(tǒng)與內(nèi)核進(jìn)行通信。其最大缺點(diǎn)是不支持基于事件的信號機(jī)制,數(shù)據(jù)傳輸大小也不能超過一個內(nèi)存頁,可擴(kuò)展性較差。

    (3)內(nèi)存映射。/dev/mem是Linux系統(tǒng)中一種特殊的字符設(shè)備文件[6],應(yīng)用程序通過這個節(jié)點(diǎn),可以在內(nèi)核地址空間與用戶地址空間進(jìn)行映射,然后訪問映射后的內(nèi)存區(qū)域,實(shí)現(xiàn)用戶空間與內(nèi)核空間的通信。但是對內(nèi)核地址的誤操作將引起嚴(yán)重后果,導(dǎo)致系統(tǒng)崩潰。

    (4)Netlink套接字。Netlink是一種面向數(shù)據(jù)報(bào)的消息系統(tǒng),目前在Linux內(nèi)核中有非常多應(yīng)用可用于通信,包括路由、IPSEC、防火墻、netfilter日志等[710]。Netlink具有以下特點(diǎn):消息具有較強(qiáng)的擴(kuò)展能力,用戶可以自定義消息格式,且提供了基于事件的信號機(jī)制,允許大數(shù)據(jù)傳輸;支持全雙工傳輸,允許內(nèi)核主動發(fā)起傳輸通信;支持單播與組播兩種通信方式[11]。

    如上所述,目前在Linux系統(tǒng)內(nèi)核空間與用戶空間通信方式中:設(shè)備節(jié)點(diǎn)適合于驅(qū)動程序開發(fā),但只支持單工傳輸;Proc與sysfs文件使用方便,但不支持傳輸大數(shù)據(jù);內(nèi)存映射傳輸效率最高,但誤操作時會對系統(tǒng)造成嚴(yán)重破壞;Netlink則使用很靈活,能滿足大多數(shù)用戶需求。

    本文首先介紹Netlink套接字基本使用方法與通信流程,然后詳細(xì)闡述使用Netlink如何實(shí)現(xiàn)多線程并發(fā)與消息異步處理通信,最后在真實(shí)硬件平臺上對該機(jī)制進(jìn)行驗(yàn)證。

    1Netlink機(jī)制概述

    Netlink機(jī)制包含用戶態(tài)接口與內(nèi)核態(tài)接口,其中用戶態(tài)沿用標(biāo)準(zhǔn)的socket接口,內(nèi)核態(tài)則提供了專用接口。

    1.1用戶態(tài)Netlink接口

    Netlink用戶態(tài)接口與BSD套接字接口基本一致,包括:socket()、bind()、sendmsg()、recvmsg()、close等常用接口。

    1.1.1Netlink套接字創(chuàng)建

    int socket(int domain, int type, int protocol)

    其中,domain參數(shù)為AF_NETLINK或PF_NETLINK,表示使用Netlink協(xié)議,type參數(shù)是SOCK_RAW或SOCK_DGRAM,代表Netlink面向數(shù)據(jù)報(bào),最后一個參數(shù)指定Netlink協(xié)議類型,除了內(nèi)核中已經(jīng)定義的類型,用戶還可以定義自己的協(xié)議類型。

    1.1.2套接字地址綁定

    int bind(fd, (struct sockaddr*)&nladdr, sizeof(struct sockaddr_nl))

    函數(shù)bind()用于Netlink套接字句柄與Netlink源地址綁定。第一個參數(shù)為創(chuàng)建Netlink套接字時獲取的描述符,第二個為Netlink源地址結(jié)構(gòu)指針,最后一個參數(shù)為Netlink源地址結(jié)構(gòu)大小。

    Netlink socket地址定義如下:

    struct sockaddr_nl {

    _kernel_sa_family_t nl_family;/*AF_NETLINK*/endprint

    unsigned short nl_pad; /* zero */

    _u32 nl_pid; /* port ID */

    _u32 nl_groups; /* multicast groups mask */

    };

    其中:nl_family代表協(xié)議類型,設(shè)置為AF_NETLINK或者PF_NETLINK;字段nl_pad保留,默認(rèn)設(shè)置為0;nl_pid代表Netlink socket的本地地址,為確保消息發(fā)送準(zhǔn)確性,其設(shè)置非常關(guān)鍵,必須確保唯一性;字段nl_groups用于設(shè)置多播組,如果設(shè)置為0,表示進(jìn)行單播。

    1.1.3Netlink消息發(fā)送

    int sendmsg(int sock, struct msghdr *msg, int flags)

    Netlink發(fā)送消息前需要填充信息,信息由消息頭與數(shù)據(jù)部分組成,其結(jié)構(gòu)如圖2所示。

    圖2Netlink消息頭

    消息長度代表Netlink消息的總長度,包括消息頭長度與數(shù)據(jù)部分長度;應(yīng)用內(nèi)部定義消息類型,大部分情況下設(shè)置為0;標(biāo)志用于設(shè)置消息標(biāo)志,內(nèi)核讀取與修改這類標(biāo)志,通常不需修改,默認(rèn)為0,在一些高級應(yīng)用(如路由daemon)中需要設(shè)置它進(jìn)行特殊操作;字段序列號與消息端口號用于應(yīng)用追蹤消息來源,分別表示消息發(fā)送順序號與來源端口號。

    1.1.4Netlink消息接收

    int recvmsg(int sock, struct msghdr *msg, int flags)

    應(yīng)用接收消息時,首先需要為消息頭與數(shù)據(jù)部分分配足夠空間,然后填充消息頭。

    1.1.5關(guān)閉Netlink套接字

    Close函數(shù)用于關(guān)閉套接字,釋放資源。

    1.2內(nèi)核態(tài)Netlink接口

    Linux內(nèi)核包含一套專門的接口函數(shù),接收用戶程序發(fā)送的數(shù)據(jù)以及將處理完數(shù)據(jù)發(fā)送回用戶程序。

    1.2.1內(nèi)核態(tài)Netlink套接字創(chuàng)建

    struct sock*netlink_kernel_create(struct net*net, int unit, struct netlink_kernel_cfg*cfg)

    netlink_kernel_create函數(shù)在不同內(nèi)核版本間變化非常大,在使用過程中,需要查找與內(nèi)核匹配的函數(shù)定義。在3.0以上版本中,該函數(shù)包含3個參數(shù):第一個參數(shù)指定網(wǎng)絡(luò)名字空間,默認(rèn)為init_net全局變量;第二個參數(shù)設(shè)置Netlink協(xié)議類型,需要與用戶態(tài)定義一致;第三個參數(shù)用于指定內(nèi)核態(tài)Netlink配置信息。其結(jié)構(gòu)為:

    struct netlink_kernel_cfg {

    unsigned int groups;

    unsigned int flags;

    void (*input)(struct sk_buff *skb);

    struct mutex *cb_mutex;

    int (*bind)(struct net *net, int group);

    void (*unbind)(struct net *net, int group);

    bool (*compare)(struct net *net, struct sock *sk); }

    通常用戶只需設(shè)置groups與input字段:Groups用于設(shè)置單播還是組播;input用于注冊消息回調(diào)處理函數(shù),當(dāng)內(nèi)核接收到用戶發(fā)來的Netlink信息后會自動調(diào)用它。

    1.2.2從內(nèi)核態(tài)向用戶態(tài)發(fā)送數(shù)據(jù)

    Netlink支持單播與組播,因此內(nèi)核態(tài)信息發(fā)送函數(shù)包括兩個。

    單播:

    int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 portid, int nonblock)

    第一個參數(shù)為內(nèi)核Netlink套接字句柄;第二個參數(shù)存放消息結(jié)構(gòu),數(shù)據(jù)字段為發(fā)送的Netlink消息;控制塊則包含消息地址信息;第三個參數(shù)portid為接收對象的Netlink地址,最后一個用于設(shè)置阻塞屬性。

    組播:

    int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 portid,__u32 group, gfp_t allocation)

    前3個參數(shù)與單播一樣,第四個參數(shù)用于指定接收消息的多播組,最后一個參數(shù)則為內(nèi)核內(nèi)存分配類型。

    1.3Netlink內(nèi)核態(tài)與用戶態(tài)通信流程

    用戶程序通過Netlink機(jī)制與內(nèi)核進(jìn)行通信,流程如圖3所示。

    圖3Netlink用戶態(tài)與內(nèi)核態(tài)交互流程

    用戶態(tài)Netlink使用流程與常用BSD Socket一樣,首先使用socket函數(shù)創(chuàng)建套接字,然后使用bind函數(shù)綁定地址,封裝并使用sendmsg向內(nèi)核發(fā)送消息,接著使用recvmsg接收消息,最后通過close函數(shù)關(guān)閉套接字,釋放資源。內(nèi)核態(tài)處理過程類似,發(fā)送消息時還可以根據(jù)需要選擇單播或者多播。

    2機(jī)制設(shè)計(jì)

    Netlink作為socket的一個變種,本身就支持并發(fā)與異步處理,但是需要針對線程中Netlink socket本地地址設(shè)置與消息接收處理松耦合進(jìn)行特殊設(shè)計(jì)。

    2.1線程N(yùn)etlink本地地址生成方法

    Netlink并發(fā)實(shí)現(xiàn)的關(guān)鍵點(diǎn)是套接字創(chuàng)建時地址設(shè)置的唯一性。Bind函數(shù)負(fù)責(zé)給Netlink套接字命名,將本地地址與其相關(guān)聯(lián)。上文已經(jīng)介紹了結(jié)構(gòu)體sockaddr_nl中nl_pid字段用于代表32位本地地址,其在填充時必須保證唯一性才能確保收發(fā)消息的準(zhǔn)確性。endprint

    如果用戶程序?qū)崿F(xiàn)的是進(jìn)程級并發(fā),可以采用進(jìn)程號作為nl_pid的值,進(jìn)程號在系統(tǒng)中的唯一性確保了Netlink本地地址的唯一性。

    但是如果進(jìn)程中多個線程需要創(chuàng)建各自獨(dú)立的Netlink socket,基于線程共享進(jìn)程號的原因,進(jìn)程號就不能用于區(qū)分線程創(chuàng)建的Netlink套接字地址。目前流傳最廣泛的線程N(yùn)etlink中nl_pid創(chuàng)建方法為[12]:

    pthread_self() 16 | getpid()

    其中,nl_pid由線程自身ID后半部與其所屬進(jìn)程pid拼接而成,期望由pid在系統(tǒng)的唯一性與pthread_self在進(jìn)程中的唯一性,保證nl_pid在全系統(tǒng)的唯一性。但在實(shí)際使用中,生成的值并不唯一。圖4是在ubuntu 14.04中創(chuàng)建10個線程生成的pid、tid(pthread_self返回值)與nl_pid結(jié)果。如圖4所示,10個樣本中就出現(xiàn)了重復(fù)。

    圖4線程地址示例圖

    從圖4中可以發(fā)現(xiàn),pthread_self低16位有12位重復(fù),pthread_self()16后只有高4位發(fā)生變化,由于pid一般小于65 536,因此進(jìn)程中創(chuàng)建n個線程,使用pthread_self()16 | getpid()出現(xiàn)重復(fù)數(shù)據(jù)的概率為:

    1-15!(16-n)!×16n-1(1

    運(yùn)行10次出現(xiàn)重復(fù)的概率約為85%,而創(chuàng)建17個以上線程nl_pid重復(fù)概率就已經(jīng)為1。

    分析pthread_self實(shí)現(xiàn),可以發(fā)現(xiàn)其實(shí)際獲取的是線程TCB地址相對于進(jìn)程數(shù)據(jù)段的偏移,所以低地址一致,造成按上述方法生成nl_pid出現(xiàn)重復(fù)。

    因此,為了保證線程中Netlink套接字正常使用,需要重新設(shè)計(jì)nl_pid生成公式??疾靝thread_self的實(shí)現(xiàn),它在進(jìn)程內(nèi)唯一而且后半部基本一致,因此可以考慮取其前半部與線程pid進(jìn)行拼接,從而確保生成nl_pid在全系統(tǒng)的唯一性。新生成方法如下:

    pthread_self()16 | getpid()16

    一個支持多線程并發(fā)的Netlink用戶態(tài)示例用例如下,所有nl_pid設(shè)置都使用新方法:

    struct sockaddr_nl src_addr, dest_addr;

    struct nlmsghdr* nlh = NULL;

    struct iovec iov;

    struct msghdr msg;

    /**建立用戶空間netlink套接字*/

    sock_nl=socket(AF_NETLINK, SOCK_RAW, LinuxV_NL_P_TYPE);

    /**填充SRC_ADDR并進(jìn)行端口綁定*/

    memset(&src_addr, 0, sizeof(struct sockaddr_nl));

    src_addr.nl_family=AF_NETLINK;

    /**按照新公式定義本地地址*/

    src_addr.nl_pid=pthread_self()16 | getpid()16;

    src_addr.nl_groups = 0;

    /**綁定netlink套接字,在nl_pid端口監(jiān)聽*/

    bind(sock_nl, (struct sockaddr*)&src_addr, sizeof(struct sockaddr_nl);

    /**封裝Netlink消息*/

    dest_addr.nl_family=AF_NETLINK;

    dest_addr.nl_pid=0; /**to Linux kernel*/

    dest_addr.nl_groups=0;

    /**填充netlink命令包頭*/

    nlh=(struct nlmsghdr*)malloc(NLMSG_LENGTH(MAX_PAYLOAD));

    nlh->nlmsg_type=MY_TYPE_0;

    /**注意保持和初始化時nl_pid一致,用于確定消息來源*/

    nlh->nlmsg_pid=pthread_self()16 | getpid()16;

    /**填充發(fā)送命令報(bào)內(nèi)容*/

    memcpy(NLMSG_DATA(nlh), buf, buflen);

    /**構(gòu)造Netlink消息包*/

    iov.iov_base=(void*)nlh;

    msg.msg_name=(void*)&dest_addr;

    msg.msg_iov=&iov;

    /**發(fā)送netlink包*/

    sendmsg(sock_nl, &msg, 0);

    /**接收netlink包*/

    recvmsg(sock_nl, &msg, 0);

    close(sock_nl)

    2.2內(nèi)核Netlink消息異步處理機(jī)制

    Netlink是BSD套接字的一種,繼承了其異步處理特性,用戶程序發(fā)送消息并把消息保存到接收者的接收隊(duì)列后,不需要一直等待內(nèi)核處理完消息。

    為了提高異步處理效率,在內(nèi)核態(tài)可以將Netlink信息的接收與處理過程松耦合,這樣內(nèi)核收到用戶發(fā)來的消息后只負(fù)責(zé)喚醒處理內(nèi)核線程,然后就返回。所有的消息處理工作由處理線程完成,從而可以實(shí)現(xiàn)用戶程序持續(xù)快速發(fā)送Netlink消息到內(nèi)核,提高吞吐率。特別是如果應(yīng)用程序發(fā)送信息處理流程不同,就可以創(chuàng)建多個內(nèi)核線程進(jìn)行并發(fā)處理。在內(nèi)核3.12.11上內(nèi)核態(tài)Netlink創(chuàng)建與消息異步收發(fā)實(shí)現(xiàn)代碼如下:

    struct netlink_kernel_cfg cfg={

    .groups=0,

    .input=receive_us_msg,

    };

    nl_sk=netlink_kernel_create(&init_net,LinuxV_NL_P_TYPE, &cfg);

    /**創(chuàng)建netlink消息處理內(nèi)核線程*/

    nl_msg_thread=kthread_run(nlmsg_process_thread, NULL, "process");

    void receive_us_msg(struct sk_buff* skb)

    {

    struct sk_buff* nl_skb=NULL;

    nl_skb=skb_copy(skb,GFP_ATOMIC);

    if(nl_skb)

    skb_queue_tail(&(nl_sk->sk_receive_queue),nl_skb);

    wake_up_interruptible(sk_sleep(nl_sk));

    }

    /*nlmsg_process_thread函數(shù)負(fù)責(zé)處理Netlink消息并回傳用戶程序*/

    3實(shí)驗(yàn)平臺與測試方法

    為了驗(yàn)證本文Netlink多線程并發(fā)機(jī)制的穩(wěn)定性與擴(kuò)展性,測試將在32位與64位Linux系統(tǒng)上進(jìn)行。測試機(jī)具體配置如表1、表2所示。

    在測試中,檢驗(yàn)使用上述方法進(jìn)程能創(chuàng)建包含Netlink連接的線程數(shù)量。如果進(jìn)程中不同線程生成的nl_pid一致,Netlink將創(chuàng)建失敗。在32位系統(tǒng)上,進(jìn)程可以使用的虛擬用戶地址空間為3GB,其創(chuàng)建線程分配的線程空間大小總和不能超過這個限制,因此系統(tǒng)中進(jìn)程能創(chuàng)建的線程數(shù)量取決于線程堆棧大小,在實(shí)驗(yàn)中通過ulimit命令設(shè)置不同的線程堆棧大小,然后記錄進(jìn)程能創(chuàng)建的最大線程數(shù)量,看其是否與理論值相符。在64位機(jī)器上,由于虛擬地址空間可以達(dá)到TB級,因此測試時首先設(shè)置系統(tǒng)最大可創(chuàng)建線程數(shù),然后通過測試程序記錄實(shí)際能創(chuàng)建的最大線程數(shù)量,看其是否與設(shè)置值相符。

    4實(shí)驗(yàn)結(jié)果與分析

    在32位操作系統(tǒng)上測試結(jié)果如表3所示。

    試驗(yàn)顯示,在32位操作系統(tǒng)上,線程堆棧為2M時,創(chuàng)建線程數(shù)量為1 449,這個值與理論最大值相符,因?yàn)樵?2位Linux操作系統(tǒng)下進(jìn)程用戶空間大小為3G(3 072M),用3 072M除以2M得1 536,但實(shí)際測試用例中代碼段與數(shù)據(jù)段等占用大概1KB,這個值應(yīng)該為1 400多。同理,內(nèi)核堆棧為4M、8M、16M時,線程數(shù)量與理論最大值相符合。

    在64位操作系統(tǒng)上測試結(jié)果如表4所示。

    系統(tǒng)中最大線程數(shù)量值設(shè)置為32 768,測試結(jié)果顯示,不同大小線程堆棧情況下創(chuàng)建的線程數(shù)量與系統(tǒng)線程最大值相差不大,符合預(yù)期,完全能夠滿足實(shí)際應(yīng)用需求。

    5結(jié)語

    Netlink socket是Linux系統(tǒng)中用戶程序與內(nèi)核模塊之間一種很靈活的通信方式,它使用方便,提供了全雙工、緩沖I/O、多點(diǎn)傳送及異步通訊等高級特性,應(yīng)用極其廣泛。但是,Netlink在內(nèi)核不同版本中變化非常大,目前公開資料上提供的線程并發(fā)與消息接收處理松耦合方法存在錯誤,也不適應(yīng)當(dāng)前內(nèi)核版本。本文分析了Netlink socket本地地址nl_pid流行計(jì)算公式的錯誤原因,設(shè)計(jì)了新的計(jì)算公式,并在真實(shí)機(jī)器上進(jìn)行了驗(yàn)證,測試結(jié)果顯示新計(jì)算公式能真正支持線程中Netlink的使用。同時,還針對當(dāng)前內(nèi)核版本,設(shè)計(jì)了切實(shí)可用的消息接收與處理松耦合流程,實(shí)現(xiàn)了上層應(yīng)用程序的快速響應(yīng)。

    但是,由于Netlink是基于BSD socket實(shí)現(xiàn)的,其通信過程耗時非常大,傳輸效率不高,在今后工作中可以考慮結(jié)合其它傳輸機(jī)制,實(shí)現(xiàn)快捷高效的內(nèi)核態(tài)與用戶態(tài)數(shù)據(jù)通信。

    參考文獻(xiàn)參考文獻(xiàn):

    [1]ROBERT L. Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)[M].陳莉君,康華,張波,譯.北京:機(jī)械工業(yè)出版社,2006.

    [2]NEIRA-AYUSO P, GASCA R M, LEFEVRE L. Communicating between the kernel and userspace in Linux using Netlink sockets[J]. Software Practice & Experience,2013,40(9):797–810.

    [3]CORBET J, RUBINI A, KROAHHARTMAN G. Linux device drivers[M]. Cambridge :O'Reilly Media, Inc.2005.

    [4]郭松,謝維波.Linux視域下Proc文件系統(tǒng)的編程剖析[J].華僑大學(xué)學(xué)報(bào):自然科學(xué)版,2010,31(5):515520.

    [5]MOCHEL P. The sysfs filesystem[J]. Proceedings of Annual Linux Symposium,2005(1):313326.

    [6]STEVENS W R,RAGO S A. UNIX環(huán)境高級編程[M].尤晉元,譯.北京:人民郵電出版社,2009.

    [7]SALIM J, KHOSRAVI H, KLEEN A, et al. Linux Netlink as an IP services protocol[J]. International Journal of Developmental Neuroscience,2003,28(8):94.

    [8]KENT S, SEO K. RFC4301: security architecture for internet protocol (IPSec)[M]. Los Angeles: RFC Editor,2005.

    [9]PURDY G N. Linux iptablespocket reference: firewalls, nat and accounting[M]. Sebastopol, CA: OReilly Media, Inc,2004.

    [10]ROSEN. Netfilter[M]. Berkeley, CA: Linux Kernel Networking Apress,2014.

    [11]劉斌,朱程榮.Linux內(nèi)核與用戶空間通信機(jī)制研究[J].電腦知識與技術(shù),2012,8(16):38163817.

    [12]HE K K. Why and how to use Netlink socket[J]. Linux Journal,2005,11(130):1419.

    責(zé)任編輯(責(zé)任編輯:何麗)endprint

    99久久国产精品久久久| 精品久久久久久成人av| 啪啪无遮挡十八禁网站| 男女视频在线观看网站免费| 国产精品 国内视频| 国产亚洲av嫩草精品影院| 久久九九热精品免费| 青草久久国产| 日本撒尿小便嘘嘘汇集6| 99久国产av精品| 欧美国产日韩亚洲一区| 亚洲av电影不卡..在线观看| 久久热在线av| 99久久99久久久精品蜜桃| 国产熟女xx| 精品福利观看| 午夜福利高清视频| 欧美在线黄色| 美女免费视频网站| 在线永久观看黄色视频| 变态另类丝袜制服| 国产高清有码在线观看视频| 欧美黑人巨大hd| 亚洲欧美日韩高清专用| 在线看三级毛片| 色av中文字幕| 级片在线观看| 一级毛片高清免费大全| 国产熟女xx| 国产精品一区二区精品视频观看| 久久精品91蜜桃| 欧美+亚洲+日韩+国产| 搡老岳熟女国产| 国产精品免费一区二区三区在线| 国产一区二区激情短视频| 90打野战视频偷拍视频| 男女之事视频高清在线观看| 亚洲精品久久国产高清桃花| 欧美日韩一级在线毛片| www国产在线视频色| 午夜成年电影在线免费观看| 日本三级黄在线观看| 校园春色视频在线观看| 精品一区二区三区av网在线观看| 久久国产精品人妻蜜桃| 亚洲av中文字字幕乱码综合| 不卡av一区二区三区| 成年女人看的毛片在线观看| 好男人电影高清在线观看| 亚洲真实伦在线观看| 一a级毛片在线观看| 亚洲,欧美精品.| 久久久久久国产a免费观看| 岛国在线免费视频观看| 一级作爱视频免费观看| 成年女人毛片免费观看观看9| av黄色大香蕉| 搡老熟女国产l中国老女人| 日韩精品中文字幕看吧| 999久久久精品免费观看国产| 欧美又色又爽又黄视频| 国产免费av片在线观看野外av| 亚洲av成人av| or卡值多少钱| 一个人观看的视频www高清免费观看 | 亚洲精品一卡2卡三卡4卡5卡| 国产精品亚洲一级av第二区| 999久久久精品免费观看国产| 1000部很黄的大片| 一进一出抽搐gif免费好疼| 日韩免费av在线播放| 人人妻人人澡欧美一区二区| 国产伦精品一区二区三区视频9 | 最好的美女福利视频网| 国产精品免费一区二区三区在线| а√天堂www在线а√下载| 免费大片18禁| 一边摸一边抽搐一进一小说| 精品欧美国产一区二区三| svipshipincom国产片| 午夜福利成人在线免费观看| 国产久久久一区二区三区| 丰满人妻熟妇乱又伦精品不卡| 啦啦啦韩国在线观看视频| 香蕉久久夜色| 小说图片视频综合网站| 此物有八面人人有两片| 国产欧美日韩一区二区三| 久久久水蜜桃国产精品网| 久久中文字幕一级| 这个男人来自地球电影免费观看| 最近在线观看免费完整版| 国产97色在线日韩免费| 欧洲精品卡2卡3卡4卡5卡区| 日本一本二区三区精品| netflix在线观看网站| 欧美激情久久久久久爽电影| 久久香蕉精品热| 波多野结衣高清无吗| 五月伊人婷婷丁香| 久久久久久久久久黄片| 中文字幕熟女人妻在线| 欧美成人一区二区免费高清观看 | 黄色日韩在线| 国产三级中文精品| 国内揄拍国产精品人妻在线| 国产精品九九99| 狠狠狠狠99中文字幕| 国产亚洲av嫩草精品影院| 最新在线观看一区二区三区| 精品一区二区三区av网在线观看| 亚洲自偷自拍图片 自拍| 亚洲国产高清在线一区二区三| 999久久久国产精品视频| 丁香欧美五月| 欧美一区二区精品小视频在线| 天天躁狠狠躁夜夜躁狠狠躁| 他把我摸到了高潮在线观看| 久久久久久大精品| 亚洲狠狠婷婷综合久久图片| 18禁美女被吸乳视频| 国产精华一区二区三区| 99热6这里只有精品| 国产成人啪精品午夜网站| 可以在线观看毛片的网站| 老司机在亚洲福利影院| 国内少妇人妻偷人精品xxx网站 | 色av中文字幕| 91老司机精品| 欧美乱码精品一区二区三区| 网址你懂的国产日韩在线| 2021天堂中文幕一二区在线观| 免费高清视频大片| а√天堂www在线а√下载| 男插女下体视频免费在线播放| 国产亚洲欧美98| 欧美大码av| 91在线观看av| 国产亚洲精品久久久久久毛片| 亚洲精品一区av在线观看| 久久久成人免费电影| 久久久久久久午夜电影| 亚洲精华国产精华精| 99久久国产精品久久久| 精品久久久久久久久久久久久| 脱女人内裤的视频| 欧美另类亚洲清纯唯美| 色综合欧美亚洲国产小说| 日韩大尺度精品在线看网址| 亚洲va日本ⅴa欧美va伊人久久| 亚洲 欧美 日韩 在线 免费| av国产免费在线观看| 亚洲av成人av| 午夜福利在线观看吧| 欧美中文日本在线观看视频| 国产av麻豆久久久久久久| 免费av不卡在线播放| av中文乱码字幕在线| 精品国产美女av久久久久小说| 亚洲国产精品999在线| 中文字幕人妻丝袜一区二区| 精品久久久久久,| 亚洲美女视频黄频| 欧美一区二区国产精品久久精品| 18美女黄网站色大片免费观看| 99久久精品国产亚洲精品| www.熟女人妻精品国产| 中文资源天堂在线| 亚洲欧美精品综合一区二区三区| 欧美一区二区精品小视频在线| 日韩欧美一区二区三区在线观看| 嫩草影院精品99| 亚洲五月婷婷丁香| 国产亚洲欧美98| 天堂网av新在线| 国产成+人综合+亚洲专区| 午夜两性在线视频| 在线视频色国产色| 欧美一区二区国产精品久久精品| 欧美色视频一区免费| 91麻豆av在线| 日韩精品中文字幕看吧| 无遮挡黄片免费观看| 日本a在线网址| 亚洲人成伊人成综合网2020| 欧美大码av| 激情在线观看视频在线高清| 日韩欧美精品v在线| 成年女人永久免费观看视频| 午夜免费激情av| 特大巨黑吊av在线直播| 亚洲av片天天在线观看| 亚洲电影在线观看av| 中文字幕人成人乱码亚洲影| 成人特级av手机在线观看| 男人和女人高潮做爰伦理| 欧美国产日韩亚洲一区| 日本熟妇午夜| 国产精品综合久久久久久久免费| 亚洲美女视频黄频| 两个人视频免费观看高清| 一进一出抽搐动态| 淫妇啪啪啪对白视频| 一级黄色大片毛片| 美女大奶头视频| 九九热线精品视视频播放| 日韩高清综合在线| 99久久精品国产亚洲精品| 国产1区2区3区精品| 精品一区二区三区视频在线观看免费| 国产精品香港三级国产av潘金莲| 亚洲无线在线观看| 成年人黄色毛片网站| 丰满人妻熟妇乱又伦精品不卡| 看黄色毛片网站| 亚洲av五月六月丁香网| 午夜免费成人在线视频| 亚洲熟妇熟女久久| 亚洲五月天丁香| 亚洲欧美激情综合另类| 国产1区2区3区精品| 12—13女人毛片做爰片一| 五月玫瑰六月丁香| 淫秽高清视频在线观看| 给我免费播放毛片高清在线观看| 成人三级做爰电影| 熟妇人妻久久中文字幕3abv| 此物有八面人人有两片| 国产成人福利小说| 这个男人来自地球电影免费观看| 校园春色视频在线观看| 99国产精品一区二区三区| 国产精品影院久久| 国产精品一区二区三区四区久久| 亚洲国产欧美一区二区综合| 欧美中文日本在线观看视频| 国产熟女xx| 九九在线视频观看精品| 国产精品香港三级国产av潘金莲| 久久中文字幕一级| 青草久久国产| 国产精品久久电影中文字幕| 国产激情欧美一区二区| 免费av不卡在线播放| 亚洲国产看品久久| 香蕉丝袜av| 很黄的视频免费| 国产av麻豆久久久久久久| 午夜福利在线观看免费完整高清在 | 又黄又爽又免费观看的视频| 国产精品久久久久久亚洲av鲁大| 免费电影在线观看免费观看| 亚洲av电影在线进入| 亚洲欧美日韩高清专用| 怎么达到女性高潮| 亚洲一区二区三区色噜噜| 日韩欧美三级三区| 丝袜人妻中文字幕| 成人18禁在线播放| 小说图片视频综合网站| 九九久久精品国产亚洲av麻豆 | 特大巨黑吊av在线直播| 一级毛片精品| 特大巨黑吊av在线直播| 欧美日韩国产亚洲二区| 久久人人精品亚洲av| 国产精品 国内视频| 一级毛片精品| 一级a爱片免费观看的视频| 男人的好看免费观看在线视频| 一区二区三区国产精品乱码| av国产免费在线观看| 午夜免费激情av| 欧美日本视频| 久久婷婷人人爽人人干人人爱| 黄片大片在线免费观看| 中文字幕高清在线视频| 精华霜和精华液先用哪个| 久久久久国内视频| 国产精品野战在线观看| 97人妻精品一区二区三区麻豆| 中国美女看黄片| 免费一级毛片在线播放高清视频| 在线视频色国产色| 免费观看的影片在线观看| 国产精品野战在线观看| 国产三级在线视频| 国产精品精品国产色婷婷| 成人av在线播放网站| 日日夜夜操网爽| 日韩欧美 国产精品| 久久精品影院6| 一级作爱视频免费观看| 亚洲 欧美一区二区三区| 久久久久久九九精品二区国产| 免费高清视频大片| 久9热在线精品视频| 亚洲 欧美一区二区三区| 一进一出抽搐gif免费好疼| 欧美黑人欧美精品刺激| 久久久久九九精品影院| 蜜桃久久精品国产亚洲av| 久久久久国产精品人妻aⅴ院| 少妇人妻一区二区三区视频| 日本免费a在线| 少妇的丰满在线观看| 国内精品一区二区在线观看| 国内揄拍国产精品人妻在线| 久久精品91无色码中文字幕| 午夜久久久久精精品| 久久香蕉精品热| 亚洲18禁久久av| 欧美日韩一级在线毛片| 国产伦一二天堂av在线观看| 色在线成人网| 欧美性猛交╳xxx乱大交人| 99久国产av精品| 欧美日韩精品网址| 老熟妇乱子伦视频在线观看| 美女大奶头视频| 嫩草影院入口| 中文在线观看免费www的网站| 国产黄片美女视频| 日韩 欧美 亚洲 中文字幕| 欧美成人性av电影在线观看| 欧美成人免费av一区二区三区| 免费av不卡在线播放| 久久婷婷人人爽人人干人人爱| 麻豆av在线久日| 亚洲第一电影网av| 日韩精品中文字幕看吧| 一a级毛片在线观看| 这个男人来自地球电影免费观看| 成人午夜高清在线视频| 69av精品久久久久久| 又大又爽又粗| 久久久国产成人免费| 国产麻豆成人av免费视频| 亚洲精品456在线播放app | 桃红色精品国产亚洲av| 高清毛片免费观看视频网站| 18禁黄网站禁片午夜丰满| 久久久久免费精品人妻一区二区| 精品国产美女av久久久久小说| 精品久久久久久久末码| 国产aⅴ精品一区二区三区波| 黄色日韩在线| 亚洲精品色激情综合| 别揉我奶头~嗯~啊~动态视频| 小蜜桃在线观看免费完整版高清| 亚洲av成人不卡在线观看播放网| 偷拍熟女少妇极品色| 国产97色在线日韩免费| 欧美绝顶高潮抽搐喷水| 国产真人三级小视频在线观看| 一边摸一边抽搐一进一小说| 91老司机精品| av在线蜜桃| 午夜亚洲福利在线播放| 狂野欧美激情性xxxx| 国产亚洲精品一区二区www| 亚洲美女黄片视频| 欧美激情在线99| 精品国内亚洲2022精品成人| 神马国产精品三级电影在线观看| 亚洲精品中文字幕一二三四区| 亚洲av电影不卡..在线观看| 三级男女做爰猛烈吃奶摸视频| АⅤ资源中文在线天堂| 精品无人区乱码1区二区| 国产精品乱码一区二三区的特点| 香蕉av资源在线| 1024手机看黄色片| 国产精品亚洲美女久久久| 久久婷婷人人爽人人干人人爱| 欧美日韩福利视频一区二区| 国产亚洲精品综合一区在线观看| 神马国产精品三级电影在线观看| 亚洲七黄色美女视频| 国产aⅴ精品一区二区三区波| 精品人妻1区二区| 亚洲五月天丁香| 亚洲av成人精品一区久久| 村上凉子中文字幕在线| 久久午夜亚洲精品久久| 中文字幕最新亚洲高清| 亚洲人成网站在线播放欧美日韩| 视频区欧美日本亚洲| 97超级碰碰碰精品色视频在线观看| 搞女人的毛片| 99精品欧美一区二区三区四区| 色视频www国产| 亚洲色图av天堂| 波多野结衣高清作品| aaaaa片日本免费| 日本熟妇午夜| 少妇丰满av| 婷婷精品国产亚洲av| 色在线成人网| 成年人黄色毛片网站| 国产精品99久久久久久久久| 久久中文看片网| 在线观看免费午夜福利视频| 超碰成人久久| 男女床上黄色一级片免费看| 成年免费大片在线观看| 国产黄片美女视频| 免费电影在线观看免费观看| 三级毛片av免费| 亚洲精品一卡2卡三卡4卡5卡| 十八禁网站免费在线| 精品午夜福利视频在线观看一区| 亚洲人成网站在线播放欧美日韩| 久久久久久久午夜电影| 国产高清videossex| 又粗又爽又猛毛片免费看| 中亚洲国语对白在线视频| 99精品在免费线老司机午夜| 欧美在线黄色| 午夜精品在线福利| 无限看片的www在线观看| 国产一区二区在线观看日韩 | 国产伦精品一区二区三区视频9 | 亚洲av免费在线观看| 首页视频小说图片口味搜索| 九九在线视频观看精品| 露出奶头的视频| 午夜久久久久精精品| 久久久国产欧美日韩av| 桃红色精品国产亚洲av| 搞女人的毛片| 国产精品一区二区三区四区久久| 夜夜夜夜夜久久久久| 欧美日韩黄片免| 国产精品 国内视频| 老司机深夜福利视频在线观看| 久久久水蜜桃国产精品网| 一卡2卡三卡四卡精品乱码亚洲| 精品国产亚洲在线| 欧美日韩乱码在线| 国产精品野战在线观看| 国产黄a三级三级三级人| 在线视频色国产色| 日本一二三区视频观看| 国产午夜精品论理片| 国产成年人精品一区二区| 国产v大片淫在线免费观看| 亚洲专区中文字幕在线| 在线观看午夜福利视频| 两性午夜刺激爽爽歪歪视频在线观看| 国产精品九九99| 校园春色视频在线观看| 好男人电影高清在线观看| 舔av片在线| 黑人欧美特级aaaaaa片| 美女免费视频网站| 亚洲人与动物交配视频| 午夜福利在线观看免费完整高清在 | av欧美777| 国产成人一区二区三区免费视频网站| 国产精品98久久久久久宅男小说| 91av网站免费观看| 日日夜夜操网爽| 免费av毛片视频| 精品久久蜜臀av无| 精品人妻1区二区| 精品熟女少妇八av免费久了| 午夜两性在线视频| 男女视频在线观看网站免费| 久久精品国产综合久久久| 国产精品一区二区三区四区久久| 欧洲精品卡2卡3卡4卡5卡区| 女人高潮潮喷娇喘18禁视频| 1024手机看黄色片| 亚洲专区字幕在线| 久久香蕉国产精品| 久久午夜综合久久蜜桃| 男女午夜视频在线观看| 久9热在线精品视频| 国产精品亚洲一级av第二区| 日日干狠狠操夜夜爽| 国产亚洲精品av在线| 国产三级黄色录像| 级片在线观看| 在线观看一区二区三区| 亚洲成a人片在线一区二区| 国内精品美女久久久久久| 日韩高清综合在线| 国产黄片美女视频| 日日干狠狠操夜夜爽| 中文资源天堂在线| 国产一区二区激情短视频| 亚洲在线自拍视频| 久久中文看片网| 国产成人欧美在线观看| 大型黄色视频在线免费观看| 丝袜人妻中文字幕| 白带黄色成豆腐渣| av在线天堂中文字幕| 麻豆一二三区av精品| 国产精品,欧美在线| 法律面前人人平等表现在哪些方面| www.自偷自拍.com| 国产亚洲av嫩草精品影院| 婷婷亚洲欧美| 免费大片18禁| 一区二区三区国产精品乱码| 久久久水蜜桃国产精品网| 久久久久久久久免费视频了| 国产免费av片在线观看野外av| 老司机午夜福利在线观看视频| 国产男靠女视频免费网站| 无人区码免费观看不卡| 国产乱人视频| 很黄的视频免费| 国产精品综合久久久久久久免费| tocl精华| 国产一级毛片七仙女欲春2| 18禁裸乳无遮挡免费网站照片| 国产精品国产高清国产av| 亚洲七黄色美女视频| 成人永久免费在线观看视频| 久久精品综合一区二区三区| 亚洲av成人精品一区久久| 国产精品久久久人人做人人爽| 精品日产1卡2卡| 欧美日本亚洲视频在线播放| aaaaa片日本免费| 人人妻,人人澡人人爽秒播| 精品一区二区三区四区五区乱码| 精品人妻1区二区| 三级毛片av免费| 欧美日本亚洲视频在线播放| 99久久精品国产亚洲精品| 亚洲av成人不卡在线观看播放网| 别揉我奶头~嗯~啊~动态视频| 免费在线观看影片大全网站| 两性夫妻黄色片| 在线观看66精品国产| 国产成人影院久久av| 国产精品久久久久久久电影 | www.www免费av| 亚洲av五月六月丁香网| 免费人成视频x8x8入口观看| 欧美不卡视频在线免费观看| 日日干狠狠操夜夜爽| 在线十欧美十亚洲十日本专区| 国产伦人伦偷精品视频| 99久久99久久久精品蜜桃| 综合色av麻豆| 中文字幕久久专区| 久久精品影院6| 99热这里只有是精品50| 免费高清视频大片| 精品国内亚洲2022精品成人| 日韩三级视频一区二区三区| 久久久精品大字幕| 亚洲av成人av| 日日夜夜操网爽| 亚洲精品美女久久久久99蜜臀| 欧美最黄视频在线播放免费| 欧美日韩中文字幕国产精品一区二区三区| 国产精品野战在线观看| 久久久国产精品麻豆| 亚洲国产日韩欧美精品在线观看 | 久久久国产精品麻豆| 久久精品国产综合久久久| 俄罗斯特黄特色一大片| 99国产精品一区二区三区| 日韩av在线大香蕉| 黄色成人免费大全| 中国美女看黄片| 国产亚洲av高清不卡| 久久精品91无色码中文字幕| 一区二区三区激情视频| 日本一二三区视频观看| 色哟哟哟哟哟哟| 99久久国产精品久久久| 欧美又色又爽又黄视频| 欧美3d第一页| 男人舔女人下体高潮全视频| 久久午夜综合久久蜜桃| www.999成人在线观看| 99热这里只有是精品50| 国产黄a三级三级三级人| 91在线观看av| 日韩av在线大香蕉| 亚洲色图av天堂| 男插女下体视频免费在线播放| ponron亚洲| 欧美色欧美亚洲另类二区| 亚洲国产看品久久| 中文在线观看免费www的网站| 岛国视频午夜一区免费看| 可以在线观看毛片的网站| 90打野战视频偷拍视频| 老司机深夜福利视频在线观看| 最近最新中文字幕大全免费视频| 欧美日韩瑟瑟在线播放| 国产精品久久视频播放| 国产午夜福利久久久久久| 久9热在线精品视频| 亚洲av成人不卡在线观看播放网| 欧美中文日本在线观看视频| 男女做爰动态图高潮gif福利片| 夜夜躁狠狠躁天天躁| АⅤ资源中文在线天堂| 中文字幕最新亚洲高清| 久久精品影院6| 99国产精品99久久久久| 一二三四社区在线视频社区8| 日韩欧美在线乱码| 日日干狠狠操夜夜爽| 亚洲国产高清在线一区二区三| 在线观看免费午夜福利视频|