亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 10.html

?? 介紹linux下文件和設備編程
?? HTML
?? 第 1 頁 / 共 5 頁
字號:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------------------<br>&nbsp;&nbsp;&nbsp;&nbsp; |send to hardware |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |receivce from hardware|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp;&nbsp; -----------------------------------------------------<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hardware media&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp;&nbsp; -----------------------------------------------------<p>&nbsp;&nbsp;&nbsp; 初始化程序完成硬件的初始化、device中變量的初始化和系統資源的申請。發送程序是在驅動程序的上層協議層有數據要發送時自動調用的。一般驅動程序中不對發送數據進行緩存,而是直接使用硬件的發送功能把數據發送出去。接收數據一般是通過硬件中斷來通知的。在中斷處理程序里,把硬件幀信息填入一個skbuff結構中,然后調用netif_rx()傳遞給上層處理。<p><br>2.2 網絡驅動程序的基本方法<br>&nbsp;&nbsp;&nbsp; 網絡設備做為一個對象,提供一些方法供系統訪問。正是這些有統一接口的方法,掩蔽了硬件的具體細節,讓系統對各種網絡設備的訪問都采用統一的形式,做到硬件無關性。<br>&nbsp;&nbsp;&nbsp; 下面解釋最基本的方法。<p>2.2.1 初始化(initialize)<br>&nbsp;&nbsp;&nbsp; 驅動程序必須有一個初始化方法。在把驅動程序載入系統的時候會調用這個初始化程序。它做以下幾方面的工作。檢測設備。在初始化程序里你可以根據硬件的特征檢查硬件是否存在,然后決定是否啟動這個驅動程序。配置和初始化硬件。在初始化程序里你可以完成對硬件資源的配置,比如即插即用的硬件就可以在這個時候進行配置(Linux內核對PnP功能沒有很好的支持,可以在驅動程序里完成這個功能)。配置或協商好硬件占用的資源以后,就可以向系統申請這些資源。有些資源是可以和別的設備共享的,如中斷。有些是不能共享的,如IO、DMA。接下來你要初始化device結構中的變量。最后,你可以讓硬件正式開始工作。<p>2.2.2 打開(open)<br>&nbsp;&nbsp;&nbsp; open這個方法在網絡設備驅動程序里是網絡設備被激活的時候被調用(即設備狀態由down--&gt;up)。所以實際上很多在initialize中的工作可以放到這里來做。比如資源的申請,硬件的激活。如果dev-&gt;open返回非0(error),則硬件的狀態還是down。<br>&nbsp;&nbsp;&nbsp; open方法另一個作用是如果驅動程序做為一個模塊被裝入,則要防止模塊卸載時設備處于打開狀態。在open方法里要調用MOD_INC_USE_COUNT宏。<p>2.2.3 關閉(stop)<br>&nbsp;&nbsp;&nbsp; close方法做和open相反的工作。可以釋放某些資源以減少系統負擔。close是在設備狀態由up轉為down時被調用的。另外如果是做為模塊裝入的驅動程序,close里應該調用MOD_DEC_USE_COUNT,減少設備被引用的次數,以使驅動程序可以被卸載。<br>&nbsp;&nbsp;&nbsp; 另外close方法必須返回成功(0==success)。<p>2.2.4 發送(hard_start_xmit)<br>&nbsp;&nbsp;&nbsp; 所有的網絡設備驅動程序都必須有這個發送方法。在系統調用驅動程序的xmit時,發送的數據放在一個sk_buff結構中。一般的驅動程序把數據傳給硬件發出去。也有一些特殊的設備比如loopback把數據組成一個接收數據再回送給系統,或者dummy設備直接丟棄數據。<br>&nbsp;&nbsp;&nbsp; 如果發送成功,hard_start_xmit方法里釋放sk_buff,返回0(發送成功)。如果設備暫時無法處理,比如硬件忙,則返回1。這時如果dev-&gt;tbusy置為非0,則系統認為硬件忙,要等到dev-&gt;tbusy置0以后才會再次發送。tbusy的置0任務一般由中斷完成。硬件在發送結束后產生中斷,這時可以把tbusy置0,然后用mark_bh()調用通知系統可以再次發送。在發送不成功的情況下,也可以不置dev-&gt;tbusy為非0,這樣系統會不斷嘗試重發。如果hard_start_xmit發送不成功,則不要釋放sk_buff。<br>&nbsp;&nbsp;&nbsp; 傳送下來的sk_buff中的數據已經包含硬件需要的幀頭。所以在發送方法里不需要再填充硬件幀頭,數據可以直接提交給硬件發送。sk_buff是被鎖住的(locked),確保其他程序不會存取它。<p>2.2.5 接收(reception)<br>&nbsp;&nbsp;&nbsp; 驅動程序并不存在一個接收方法。有數據收到應該是驅動程序來通知系統的。一般設備收到數據后都會產生一個中斷,在中斷處理程序中驅動程序申請一塊sk_buff(skb),從硬件讀出數據放置到申請好的緩沖區里。接下來填充sk_buff中的一些信息。skb-&gt;dev = dev,判斷收到幀的協議類型,填入skb-&gt;protocol(多協議的支持)。把指針skb-&gt;mac.raw指向硬件數據然后丟棄硬件幀頭(skb_pull)。還要設置skb-&gt;pkt_type,標明第二層(鏈路層)數據類型。可以是以下類型:<br>&nbsp; PACKET_BROADCAST : 鏈路層廣播<br>&nbsp; PACKET_MULTICAST : 鏈路層組播<br>&nbsp; PACKET_SELF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 發給自己的幀<br>&nbsp; PACKET_OTHERHOST : 發給別人的幀(監聽模式時會有這種幀)<p>最后調用netif_rx()把數據傳送給協議層。netif_rx()里數據放入處理隊列然后返回,真正的處理是在中斷返回以后,這樣可以減少中斷時間。調用netif_rx()以后,驅動程序就不能再存取數據緩沖區skb。<p>2.2.6 硬件幀頭(hard_header)<br>&nbsp;&nbsp;&nbsp; 硬件一般都會在上層數據發送之前加上自己的硬件幀頭,比如以太網(Ethernet)就有14字節的幀頭。這個幀頭是加在上層ip、ipx等數據包的前面的。驅動程序提供一個hard_header方法,協議層(ip、ipx、arp等)在發送數據之前會調用這段程序。<br>&nbsp;&nbsp;&nbsp; 硬件幀頭的長度必須填在dev-&gt;hard_header_len,這樣協議層回在數據之前保留好硬件幀頭的空間。這樣hard_header程序只要調用skb_push然后正確填入硬件幀頭就可以了。<br>&nbsp;&nbsp;&nbsp; 在協議層調用hard_header時,傳送的參數包括(2.0.xx):數據的sk_buff,device指針,protocol,目的地址(daddr),源地址(saddr),數據長度(len)。數據長度不要使用sk_buff中的參數,因為調用hard_header時數據可能還沒完全組織好。saddr是NULL的話是使用缺省地址(default)。daddr是NULL表明協議層不知道硬件目的地址。如果hard_header完全填好了硬件幀頭,則返回添加的字節數。如果硬件幀頭中的信息還不完全(比如daddr為NULL,但是幀頭中需要目的硬件地址。典型的情況是以太網需要地址解析(arp)),則返回負字節數。hard_header返回負數的情況下,協議層會做進一步的build header的工作。目前Linux系統里就是做arp(如果hard_header返回正,dev-&gt;arp=1,表明不需要做arp,返回負,dev-&gt;arp=0,做arp)。<br>&nbsp;&nbsp;&nbsp; 對hard_header的調用在每個協議層的處理程序里。如ip_output。<p>2.2.7 地址解析(xarp)<br>&nbsp;&nbsp;&nbsp; 有些網絡有硬件地址(比如Ethernet),并且在發送硬件幀時需要知道目的硬件地址。這樣就需要上層協議地址(ip、ipx)和硬件地址的對應。這個對應是通過地址解析完成的。需要做arp的的設備在發送之前會調用驅動程序的rebuild_header方法。調用的主要參數包括指向硬件幀頭的指針,協議層地址。如果驅動程序能夠解析硬件地址,就返回1,如果不能,返回0。<br>&nbsp;&nbsp;&nbsp; 對rebuild_header的調用在net/core/dev.c的do_dev_queue_xmit()里。<p>2.2.8 參數設置和統計數據<br>&nbsp;&nbsp;&nbsp; 在驅動程序里還提供一些方法供系統對設備的參數進行設置和讀取信息。一般只有超級用戶(root)權限才能對設備參數進行設置。設置方法有:<br>&nbsp;&nbsp;&nbsp; dev-&gt;set_mac_address()<br>&nbsp;&nbsp;&nbsp; 當用戶調用ioctl類型為SIOCSIFHWADDR時是要設置這個設備的mac地址。一般對mac地址的設置沒有太大意義的。<br>&nbsp;&nbsp;&nbsp; dev-&gt;set_config()<br>&nbsp;&nbsp;&nbsp; 當用戶調用ioctl時類型為SIOCSIFMAP時,系統會調用驅動程序的set_config方法。用戶會傳遞一個ifmap結構包含需要的I/O、中斷等參數。<br>&nbsp;&nbsp;&nbsp; dev-&gt;do_ioctl()<br>&nbsp;&nbsp;&nbsp; 如果用戶調用ioctl時類型在SIOCDEVPRIVATE和SIOCDEVPRIVATE+15之間,系統會調用驅動程序的這個方法。一般是設置設備的專用數據。<br>&nbsp;&nbsp;&nbsp; 讀取信息也是通過ioctl調用進行。除次之外驅動程序還可以提供一個dev-&gt;get_stats方法,返回一個enet_statistics結構,包含發送接收的統計信息。<br>&nbsp;&nbsp;&nbsp; ioctl的處理在net/core/dev.c的dev_ioctl()和dev_ifsioc()里。<p><br>2.3 網絡驅動程序中用到的數據結構<br>&nbsp;&nbsp;&nbsp; 最重要的是網絡設備的數據結構。定義在include/linux/netdevice.h里。它的注釋已經足夠詳盡。<br>struct device<br>{<p>&nbsp; /*<br>&nbsp;&nbsp; * This is the first field of the &quot;visible&quot; part of this structure<br>&nbsp;&nbsp; * (i.e. as seen by users in the &quot;Space.c&quot; file).&nbsp; It is the name<br>&nbsp;&nbsp; * the interface.<br>&nbsp;&nbsp; */<br>&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *name;<p>&nbsp; /* I/O specific fields - FIXME: Merge these and struct ifmap into one */<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rmem_end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* shmem &quot;recv&quot; end&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rmem_start;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* shmem &quot;recv&quot; start&nbsp;&nbsp; */<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mem_end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* shared mem end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mem_start;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* shared mem start&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base_addr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* device I/O address&nbsp;&nbsp; */<br>&nbsp; unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; irq;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* device IRQ number&nbsp;&nbsp;&nbsp; */<p>&nbsp; /* Low-level status flags. */<br>&nbsp; volatile unsigned char&nbsp; start,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* start an operation&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interrupt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* interrupt arrived&nbsp;&nbsp;&nbsp; */<br>&nbsp; /* 在處理中斷時interrupt設為1,處理完清0。 */<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tbusy;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* transmitter busy must be longg for<br>bitops */<p>&nbsp; struct device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *next;<p>&nbsp; /* The device initialization function. Called only once. */<br>&nbsp; /* 指向驅動程序的初始化方法。 */<br>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*init)(struct device *dev);<p>&nbsp; /* Some hardware also needs these fields, but they are not part of the<br>&nbsp;&nbsp;&nbsp;&nbsp; usual set specified in Space.c. */<br>&nbsp; /* 一些硬件可以在一塊板上支持多個接口,可能用到if_port。 */<br>&nbsp; unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if_port;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Selectable AUI, TP,..*/<br>&nbsp; unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dma;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* DMA channel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<p>&nbsp; struct enet_statistics* (*get_stats)(struct device *dev);<p>&nbsp; /*<br>&nbsp;&nbsp; * This marks the end of the &quot;visible&quot; part of the structure. All<br>&nbsp;&nbsp; * fields hereafter are internal to the system, and may change at<br>&nbsp;&nbsp; * will (read: may be cleaned up at will).<br>&nbsp;&nbsp; */<p>&nbsp; /* These may be needed for future network-power-down code. */<br>&nbsp; /* trans_start記錄最后一次成功發送的時間。可以用來確定硬件是否工作正常。*/<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trans_start;&nbsp; /* Time (in jiffies) of last Tx */<br>&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last_rx;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Time of last Rx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<p>&nbsp; /* flags里面有很多內容,定義在include/linux/if.h里。*/<br>&nbsp; unsigned short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* interface flags (a la BSD)&nbsp;&nbsp; */<br>&nbsp; unsigned short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; family;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* address family ID (AF_INET)&nbsp; */<br>&nbsp; unsigned short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metric;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* routing metric (not used)&nbsp;&nbsp;&nbsp; */<br>&nbsp; unsigned short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mtu;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* interface MTU value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<p>&nbsp; /* type標明物理硬件的類型。主要說明硬件是否需要arp。定義在<br>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合视频网| 久久精品在线免费观看| 久久99精品久久久久久久久久久久| 国产无一区二区| 欧美挠脚心视频网站| 粉嫩一区二区三区性色av| 亚洲一区二区三区中文字幕| 久久精品无码一区二区三区| 欧洲一区二区三区在线| 国产精品一区二区三区网站| 天天操天天色综合| 国产精品少妇自拍| 日韩一级高清毛片| 欧美四级电影在线观看| 不卡电影免费在线播放一区| 久久99精品国产91久久来源| 亚洲制服欧美中文字幕中文字幕| 久久精品亚洲麻豆av一区二区| 91精品国产麻豆国产自产在线 | 亚洲乱码国产乱码精品精的特点| 欧美一级夜夜爽| 欧美亚洲自拍偷拍| 北岛玲一区二区三区四区| 久久国产麻豆精品| 午夜视黄欧洲亚洲| 一区二区视频免费在线观看| 亚洲国产高清在线观看视频| 精品久久人人做人人爰| 欧美一区二区高清| 欧美三级三级三级| 色偷偷88欧美精品久久久| 成人一区二区三区在线观看| 精品午夜久久福利影院| 日韩av高清在线观看| 性欧美疯狂xxxxbbbb| 亚洲自拍都市欧美小说| 亚洲欧美日韩国产另类专区| 国产精品久久久久久久久动漫 | 日韩一区二区在线看| 欧美麻豆精品久久久久久| 色综合久久综合网欧美综合网| 成人久久久精品乱码一区二区三区 | 国产精品一区二区三区99| 奇米色一区二区| 秋霞影院一区二区| 强制捆绑调教一区二区| 美女视频黄 久久| 蓝色福利精品导航| 韩国成人精品a∨在线观看| 蜜桃视频第一区免费观看| 日韩高清不卡一区二区三区| 日本三级亚洲精品| 免费观看久久久4p| 九九九精品视频| 精品综合免费视频观看| 国产在线视频一区二区三区| 久久99精品久久久久| 久草精品在线观看| 国产福利电影一区二区三区| 国产91对白在线观看九色| 成人性色生活片| 99精品黄色片免费大全| 色婷婷综合久久久中文字幕| 欧美视频一区二区三区在线观看 | 一区二区三区成人| 夜夜精品视频一区二区 | 亚洲欧洲精品一区二区三区不卡| 日韩美女视频一区二区| 一区二区三区波多野结衣在线观看 | 91精品国产综合久久久久久久| 久久久精品tv| 中文字幕av一区二区三区免费看| 亚洲视频小说图片| 天堂一区二区在线| 精品一区二区免费在线观看| 风间由美性色一区二区三区| 色偷偷成人一区二区三区91| 欧美一卡二卡三卡四卡| 久久久欧美精品sm网站| 亚洲日本一区二区| 日本亚洲天堂网| 国产成人亚洲综合色影视| 欧美中文字幕一区二区三区| 日韩精品一区二区三区视频| 国产精品免费看片| 亚洲va欧美va国产va天堂影院| 久久国产尿小便嘘嘘尿| 97精品超碰一区二区三区| 欧美精品久久99久久在免费线| 久久综合久久久久88| 亚洲六月丁香色婷婷综合久久| 久久精品国内一区二区三区| 色妞www精品视频| 日韩欧美黄色影院| 亚洲免费高清视频在线| 激情欧美日韩一区二区| 99久久99久久免费精品蜜臀| 日韩欧美亚洲一区二区| 亚洲欧美色一区| 久久精品国产99| 一本色道综合亚洲| 精品精品欲导航| 亚洲精品高清视频在线观看| 激情综合网天天干| 欧美欧美欧美欧美首页| 国产精品久久99| 国内久久精品视频| 欧美浪妇xxxx高跟鞋交| 国产精品久久午夜| 麻豆久久久久久| 欧美日韩一级片网站| 中文字幕一区视频| 精品一区二区三区视频 | 久久久久久免费毛片精品| 一区二区三区不卡视频在线观看| 国产99久久久精品| 精品国产sm最大网站免费看| 视频一区在线视频| 在线影视一区二区三区| 国产精品网站一区| 国产精品99久久久久久似苏梦涵| 91精品婷婷国产综合久久性色| 亚洲精品乱码久久久久久黑人| 成人美女视频在线看| 国产女同互慰高潮91漫画| 精品一区二区三区在线观看国产| 91精品一区二区三区在线观看| 亚洲国产精品一区二区www| 91丨porny丨国产入口| 国产精品免费观看视频| 成人影视亚洲图片在线| 久久先锋资源网| 国内成人精品2018免费看| 日韩欧美一区二区视频| 麻豆免费看一区二区三区| 91精品啪在线观看国产60岁| 午夜日韩在线电影| 欧美精品第1页| 日韩精品91亚洲二区在线观看| 欧美亚洲禁片免费| 亚洲一区视频在线| 在线中文字幕一区二区| 亚洲一卡二卡三卡四卡| 欧美日韩国产大片| 日一区二区三区| 欧美一级黄色录像| 麻豆精品国产91久久久久久| 精品日韩一区二区三区免费视频| 加勒比av一区二区| 国产亚洲综合av| 99久久99久久免费精品蜜臀| 亚洲精品视频免费观看| 欧美日韩免费观看一区二区三区| 五月婷婷综合网| 日韩久久免费av| 国产精品77777| 亚洲日本护士毛茸茸| 欧美日韩一二三| 美女mm1313爽爽久久久蜜臀| 久久这里只有精品首页| 成人午夜伦理影院| 亚洲精品视频在线观看免费| 欧美日本韩国一区| 蜜桃av噜噜一区二区三区小说| www日韩大片| caoporn国产一区二区| 一区二区三区四区视频精品免费| 欧美日韩高清影院| 激情久久五月天| 亚洲视频中文字幕| 欧美精品三级日韩久久| 国模大尺度一区二区三区| 18成人在线观看| 91精品国产综合久久久久久久| 国产精品综合久久| 日韩美女久久久| 日韩一区国产二区欧美三区| 国产一区视频网站| 一区二区三区在线免费| 日韩欧美亚洲一区二区| 99精品久久免费看蜜臀剧情介绍| 午夜激情久久久| 中文字幕欧美日韩一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 韩国理伦片一区二区三区在线播放 | 欧美精品日韩精品| 国产91精品在线观看| 性欧美疯狂xxxxbbbb| 国产欧美一区二区三区沐欲| 色成年激情久久综合| 韩国中文字幕2020精品| 亚洲尤物在线视频观看| 国产亚洲综合色| 777欧美精品| aa级大片欧美| 久久99精品一区二区三区| 一区二区三区在线观看国产| 久久综合久久综合九色| 精品视频在线视频| 99国产精品久久久久久久久久|