精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Ryu拓撲發現原理分析

網絡
Ryu拓撲發現的核心模塊是ryu/topology目錄下的switches.py,拓撲發現的應用是同目錄下的dumper.py。在dumper.py中,會利用_CONTEXTS來實例化switches.py中的Switches類,然后將拓撲發現的相關信息通過日志方式(LOG.debug)顯示。

Ryu拓撲發現的核心模塊是ryu/topology目錄下的switches.py,拓撲發現的應用是同目錄下的dumper.py。在dumper.py中,會利用_CONTEXTS來實例化switches.py中的Switches類,然后將拓撲發現的相關信息通過日志方式(LOG.debug)顯示。啟動命令如下所示:

ryu-manager –verbose –observe-links ryu.topology.dumper 

或者

ryu-manager –verbose –observe-links ./ryu/topology/dumper.py

其中–verbose參數用于顯示LOG.debug信息,–observe-links用于指明拓撲發現。

[[150264]]

接下來對拓撲發現的核心模塊switches.py進行分析。

1. Port類

存儲端口相關信息,數據成員有:

self.dpid = dpid
self._ofproto = ofproto
self._config = ofpport.config
self._state = ofpport.state
self.port_no = ofpport.port_no
self.hw_addr = ofpport.hw_addr
self.name = ofpport.name

其中要特別注意的是dpid和port_no,即交換機ID和端口號,這兩個信息在下發流表項時很重要。

2. Switch類

存儲交換機相關信息,數據成員有:

self.dp = dp
self.ports = []

其中dp是Datapath類的實例,該類定義在在ryu/controller/controller.py,主要屬性有:

self.socket = socket
self.address = address
self.is_active = True
self.id = None # datapath_id is unknown yet
self.ports = None

ports是一個由Port類實例組成的列表,存儲該交換機的端口。

3. Link類

保存的是源端口和目的端口(都是Port類實例),數據成員有:

self.src = src
self.dst = dst

4. PortState類

該類繼承自dict,保存了從port_no(int型)到port(OFPPort類實例)的映射。該類主要用作self.port_state字典的值(鍵是dpid),用于存儲dpid對應的交換機的所有端口情況。

OFPPort類定義在ryu/ofproto目錄下對應的ofproto_v1_X_parser.py中(X代表版本號),繼承自一個namedtuple,保存有port_no等信息。

5. PortData類

保存每個端口與對應的LLDP報文數據,數據成員有:

self.is_down = is_down
self.lldp_data = lldp_data(這是LLDP報文的數據)
self.timestamp = None
self.sent = 0

每調用一次lldp_sent函數,便會把self.timestamp置為當前的時間(time.time()),并將self.sent加1;每調用一次lldp_received函數,便會把self.sent置為0。

6.PortDataState類

繼承自dict類,保存從Port類到PortData類的映射。該類維護了一個類似雙向循環鏈表的數據結構,并重寫了__iter__(),使得遍歷該類的實例(self.ports)時,會按照該雙向循環鏈表從哨兵節點(self._root)后一個節點開始遍歷。

包含一個add_port函數,傳入port和lldp_data,port作鍵,構建的PortData類實例作為值。

包含一個lldp_sent(self,port)函數,根據傳入的port(Port類實例)獲得對應的PortData類實例port_data,然后調用port_data.lldp_sent()(該函數會設置時間戳),再調用self._move_last_key(port),把該port移到類似雙向循環鏈表的數據結構中哨兵節點的前面(相當于下次遍歷的末尾);***返回port_data。

7. LinkState類

繼承自dict,保存從Link類到時間戳的映射。數據成員self._map字典用于存儲Link兩端互相映射的關系。

8. LLDPPacket類

靜態方法lldp_packet(dpid,port_no,dl_addr,ttl)用于構造LLDP報文,靜態方法lldp_parse(data)用于解析LLDP包,并返回源DPID和源端口號。

9. Switches類

該類是Ryu拓撲發現的核心所在。Switches類是app_manager.RyuApp類的子類,當運行switches應用時會被實例化,其__init__函數主要包括:

self.name = ‘switches’
self.dps = {} # datapath_id => Datapath class
self.port_state = {} # datapath_id => ports
self.ports = PortDataState() # Port class -> PortData class
self.links = LinkState() # Link class -> timestamp
self.is_active = True

self.dps字典用于保存dpid到Datapath類實例的映射,會在_register函數中添加新成員,_unregister函數中刪除成員。遍歷該字典可以得到連接的所有交換機。

self.port_state字典中鍵為dpid,值為PortState類型。遍歷該字典可以得到所有交換機對應的端口情況。當交換機連接時,會檢查交換機的id是否在self.port_state中,不在則創建PortState類實例,把交換機的所有端口號和端口存儲到該實例中;交換機斷開時,會從self.port_state中刪除。

self.ports是PortDataState類的實例,保存每個端口(Port類型)對應的LLDP報文數據(保存在PortData類實例中),遍歷self.ports用于發送LLDP報文。

self.links是LinkState類的實例,保存所有連接(Link類型)到時間戳的映射。遍歷self.links的鍵即可得到所有交換機之間的連接情況。

如果ryu-manager啟動時加了–observe-links參數,則下面的self.link_discovery將為真,從而執行if下面的語句:

self.link_discovery = self.CONF.observe_links
if self.link_discovery:
self.install_flow = self.CONF.install_lldp_flow
self.explicit_drop = self.CONF.explicit_drop
self.lldp_event = hub.Event()
self.link_event = hub.Event()
self.threads.append(hub.spawn(self.lldp_loop))
self.threads.append(hub.spawn(self.link_loop))

綜上所述,該初始化函數__init__()主要是創建用于存儲相關信息的數據結構,創建兩個事件,然后調用hub.spawn創建兩個新線程執行self.lldp_loop和self.link_loop兩個函數。

#p#

9.1 lldp_loop函數

lldp_loop函數里是一個while循環,只要self.is_active為真,就一直循環執行。(close函數會把self.is_active置為False,該函數在離開模塊時自動被調用)。

(1)執行self.lldp_event.clear(),將Event類實例lldp_event的_cond屬性設為False,用于線程間同步。

提到線程同步,常用的函數有:

Event.wait()

Event對象的wait的方法只有內部信號為真的時候才會很快的執行并完成返回。當Event對象的內部信號標識為假時,則wait方法一直等待其為真時才返回。同時可以對wait設置timeout,當達到timeout設置的時間的時候就可以完成返回或執行。

Event.set()

將標識位設為Ture

Event.clear()

將標識伴設為False。

Event.isSet()

判斷標識位是否為Ture。

(2)創建ports_now和ports兩個列表,分別存儲尚未發送過LLDP報文的端口和已發送過LLDP報文并且超時的端口。

(3)遍歷self.ports(PortDataState類的實例),獲得key(Port類實例)和data(PortData類實例),如果data.timestamp為None(該端口還沒發送過LLDP報文),則將key(端口)加入ports_now列表;否則,計算下次應該發送LLDP報文的時間expire,如果已經超時,則放到ports列表,否則就是還沒到發送時間,停止遍歷(發送LLDP報文時是按序發的,找到***個未超時的端口,后面的端口肯定更沒有超時,因為后面端口上次發送LLDP是在前一端口之后,前一個都沒超時后面的自然也沒超時)。

(4)遍歷ports_now列表,對每個端口調用self.send_lldp_packet(port),發送LLDP報文。

send_lldp_packet函數執行過程如下:

a. 調用PortDataState類的lldp_sent函數,該函數會設置時間戳,移動相應端口在雙向循環鏈表中的位置,***返回PortData類實例port_data;

b. 如果該端口已經down掉,直接返回,否則執行下一步;

c. 根據port.dpid得到對應的Datapath類實例dp,如果不存在,則直接返回,否則執行下一步;

d. 發送LLDP報文。具體地:(1)生成actions:從port.port_no端口發出消息;(2)生成PacketOut消息:datapath指定為上一步得到的dp,actions為前面的,data為步驟a中返回的port_data的lldp_data;

(5)遍歷ports列表,對每個端口調用self.send_lldp_packet(port),發送LLDP報文。

9.2 link_loop函數

link_loop函數也是一個while循環,只要self.is_active為真,就一直循環執行;

(1)執行self.link_event.clear(),將Event類實例link_event的_cond屬性設為False,用于線程間同步;

(2)創建deleted列表;

(3)遍歷self.links(LinkState類實例),獲得link(Link類實例)和timestamp時間戳。如果已經超時,且該link對應的源端口是否在self.ports中,并且發送LLDP次數已超過self.LINK_LLDP_DROP,則添加到deleted列表中;

(4)遍歷deleted列表,執行:

a. 對其中的每條需要刪除的link調用link_down函數(該函數會刪除self.links中link對應的項目,并刪除self.links._map中link對應的項目),并觸發EventLinkDelete事件。

b. 得到link對應的反向link,如果反向link不在deleted列表中,則將self.links中反向link的時間戳置為超時的事件,并將對端端口從self.ports的雙向循環鏈表中移動到哨兵節點的后面(下次檢查的開頭),以便盡早檢查反向link是否也斷開了。

9.3 state_change_handler

該函數用于處理EventOFPStateChange事件,當交換機連接或者斷開時會觸發該事件。

如果狀態是MAIN_DISPATCHER:

(1)從ev.datapath獲得Datapath類實例dp,如果該dp的dpid已經在self.dps里有,則報出重復鏈接的警告。

(2)調用_register(),將dp.id和dp添加到self.dps中;如果該dp.id不在self.port_state中,則創建該dp.id對應的PortState實例,并遍歷dp.ports.values,將所有port(OFPPort類型)添加到該PortState實例中。

(3)調用_get_switch(),如果dp.id在self.dps中,則創建一個Switch類實例,并把self.port_state中對應的端口都添加到該實例中,最終返回該實例。

(4)如果交換機沒有重復連接,觸發EventSwitchEnter事件。

(5)如果沒設置self.link_discovery,返回;否則執行下一步。

(6)如果設置了self.install_flow,則根據OpenFlow版本生成相應流表項,使得收到的LLDP報文(根據目的MAC地址匹配)上報給控制器。

(7)如果交換機沒有重復連接,則遍歷(3)中得到的switch.ports的所有端口,如果端口port不是被保留的,則調用self._port_added(port),該函數會調用LLDPPacket.lldp_packet()函數生成LLDP報文數據lldp_data(用于和“port.is_down()”一起構造PortData類實例),然后調用PortDataState類的add_port(port,lldp_data)。

add_port()函數會檢查port是否在self.ports中,不在則將該port添加到雙向循環鏈表中哨兵節點的后面(下次檢查的開頭),并把port和對應的PortData類實例(該端口對應的LLDP報文數據)添加到self.ports中。

(8)調用self.lldp_event.set()

如果狀態是DEAD_DISPATCHER:

(1)如果dp.id為None,即握手之前交換機就斷開連接了,則直接返回;否則執行下一步。

(2)調用_get_switch()獲得Switch實例;

(3)調用_unregister(),從self.dps和self.port_state中刪除該dpid對應的數據;

(4)觸發EventSwitchLeave事件。

(5)如果沒有設置link_discovery,返回;否則執行下一步。

(6)遍歷switch.ports中的每個端口port,如果不是保留端口,則調用PortDataState類的del_port(),將self.ports中port對應的數據刪除;調用Switches類的_link_down()。_link_down函數執行如下操作:

a. 調用LinkState類的port_deleted函數。在port_deleted函數里,首先調用get_peer()獲得對端端口,然后生成兩個Link對象(src->dst和dst->src),并將這兩個對象從self.links中刪除(反向Link可能不存在);刪除src->dst和dst->src之間的映射(存儲在_map字典中)。***返回傳入的port對應的對端port和傳入的port本身。

b. 根據返回的“傳入的port對應的對端port和傳入的port本身”,創建Link對象,觸發EventLinkDelete事件(如果反向連接也存在,會觸發兩次EventLinkDelete事件)。

c. 調用self.ports.move_front(dst),該函數會從self.ports中得到dst對應的PortData類實例port_data,如果port_data不為None,則調用clear_timestamp函數將其timestamp屬性置為None,并將dst移動到雙向循環鏈表中哨兵節點的后面(下次檢查的開頭)。

(7)調用self.lldp_event.set()。

#p#

9.4 port_status_handler

該函數用于處理EventOFPPortStatus事件,該事件是交換機主動發給控制器的。

如果原因為“添加”:

(1)在self.port_state里dp.id對應的PortState實例中添加該端口,并觸發EventPortAdd事件。

(2)如果沒有設置self.link_discovery,則返回;否則執行下一步。

(3)調用_get_port函數,該函數首先根據傳入的dpid得到Switch實例,然后遍歷實例的ports列表,找到并返回傳入的端口號對應的端口(Port類實例)。如果找到了端口并且端口不是保留的,則調用_port_added(),該函數會獲得LLDP相關的數據部分(用于構造PortData類實例),然后調用PortDataState類的add_port(),該函數會將Port和對應的PortData映射關系存儲到self.ports中;調用self.lldp_event.set()。

如果原因為“刪除”:

(1)在self.port_state里該dpid對應的PortState實例中刪除該端口,并觸發EventPortDelete事件。

(2)如果沒有設置self.link_discovery,則返回;否則執行下一步。

(3)調用_get_port函數,該函數首先根據傳入的dpid得到Switch實例,然后遍歷實例的ports列表,找到并返回傳入的端口號對應的端口(Port類實例)。如果找到了端口并且端口不是保留的,則:

a. 調用del_port(),將該端口及對應的PortData從self.ports刪除;

b. 調用_link_down(),該函數會調用LinkState類的port_deleted函數,并返回傳入的port對應的對端port和傳入的port本身。在port_deleted函數里,首先調用get_peer()獲得對端端口,然后生成兩個Link對象(src->dst和dst->src),并將這兩個對象從self.links中刪除(反向Link可能不存在);刪除src->dst和dst->src之間的映射(存儲在_map字典中)。根據返回的“傳入的port對應的對端port和傳入的port本身”,創建Link對象,觸發EventLinkDelete事件(如果反向連接也存在,會觸發兩次EventLinkDelete事件)。調用self.ports.move_front();

c. 調用self.lldp_event.set()。如果原因為“修改”:

(1)修改self.port_state里該dpid對應的PortState實例值,并觸發EventPortModify事件。

(2)如果沒有設置self.link_discovery,則返回;否則執行下一步。

(3)調用_get_port函數,該函數首先根據傳入的dpid得到Switch實例,然后遍歷實例的ports列表,找到并返回傳入的端口號對應的端口(Port類實例)。如果找到了端口并且端口不是保留的:

a. 調用PortDataState類的set_down(),該函數會調用Port類的is_down(),檢測端口是否已關閉;獲得Port對應的PortData實例,調用PortData的set_down函數,將對應的is_down修改為當前狀態(布爾值);調用PortData的clear_timestamp(),將對應的timestamp修改為None。如果檢測端口沒有關閉,調用_move_front_key()。set_down函數返回是否已關閉的檢測結果。如果檢測結果是已關閉,則調用_link_down()。

b. 調用self.lldp_event.set()。

9.5 packet_in_handler

該函數用于處理EventOFPPacketIn事件。

(1)如果沒有設置self.link_discovery,直接返回;否則執行下一步。

(2)嘗試調用LLDPPacket.lldp_parse(msg.data)來按照LLDP報文格式解碼收到的報文,獲得源交換機dpid和源端口號(該LLDP報文從哪臺交換機的哪個端口發出的)。如果不是LLDP報文格式,返回;否則執行下一步。

(3)獲得目的交換機的dpid和目的端口(上報Packet_In消息的交換機dpid和接收到LLDP報文的端口號)。

(4)調用_get_port函數,得到源端口對應的Port類實例。如果不存在或者該實例的dpid跟目的dpid相同,則直接返回;否則執行下一步。

(5)調用PortDataState類的lldp_received函數,該函數會再調用PortData類的lldp_received函數,將對應的self.sent值置為0。

(6)調用_get_port函數,得到目的端口對應的Port類實例。如果不存在該實例,則返回;否則執行下一步。

(7)調用LinkState類的get_peer函數,得到源端口原先對應的目的端口。如果該目的端口存在,且與現在解析得到的目的端口不同,則說明原先的鏈路已斷開,觸發EventLinkDelete事件。

(8)根據源端口和目的端口構造Link類實例,如果該實例不存在于self.links,則說明是新鏈路,觸發EventLinkAdd事件。

(9)調用LinkState類的update_link函數,該函數會將上一步構造的Link類實例加上時間戳存儲到self.links中,并構造逆向鏈路,返回逆向鏈路是否在self.links中的布爾值。如果逆向鏈路還不存在,那很有可能會馬上存在,因此調用PortDataState類的move_front函數,將目的端口移動到雙向循環鏈表中哨兵節點的后面(下次檢查的頭部),盡早檢查;調用self.lldp_event.set()。

(10)如果設置了self.explicit_drop,則調用_drop_packet函數。

10. 拓撲發現概述

Switches類的初始化函數__init__()創建用于存儲相關信息的數據結構(self.dps、self.port_state、self.ports和self.links),創建兩個事件(self.lldp_event 和self.link_event),然后調用hub.spawn創建兩個新線程執行self.lldp_loop和self.link_loop兩個函數。其他工作就交給事件觸發和事件處理函數了。

交換機連接時觸發EventOFPStateChange事件,在對應的處理函數state_change_handler中會把連接上的交換機存儲到self.dps中,并把交換機的端口情況存儲到self.port_state中,并生成相應的LLDP報文數據,存儲在self.ports中(鍵為Port類型,值為PortData類型,PortData類的數據成員lldp_data存儲LLDP報文數據)。

lldp_loop函數會不停遍歷self.ports,并在需要的時候由send_lldp_packet函數執行發送LLDP報文的操作。

當LLDP報文被送回到控制器時,觸發EventOFPPacketIn事件,對應的處理函數packet_in_handler會解析LLDP報文,得到交換機之間的連接信息(Link類),存儲到self.links中。

link_loop函數會遍歷self.links,及時檢查鏈路是否還是活的。

后記:

實際使用Ryu獲取拓撲信息時,更好的方式是使用Ryu提供的REST API,具體方法將在下文中介紹。但分析switches.py的過程對了解Ryu的工作機制和應用編寫方法還是蠻有用的。

責任編輯:何妍 來源: 劍客
相關推薦

2015-07-27 14:57:32

OpenFlow協議Ryu

2015-12-30 13:21:33

SDN控制器拓撲

2015-09-11 09:15:32

RyuSDN

2023-11-29 16:21:30

Kubernetes服務注冊

2021-08-02 07:57:03

注冊Nacos源碼

2009-07-27 11:37:04

網絡拓撲摩卡

2017-07-07 14:30:27

Flink架構拓撲

2018-12-19 14:00:07

MySQL主從復制數據庫

2010-08-12 16:18:17

網絡拓撲運維管理摩卡軟件

2014-12-08 11:17:51

SDNDocker部署Docker

2009-01-11 22:32:53

電子發現法規遵從數據管理

2017-01-23 13:34:44

2022-04-13 08:23:31

Golang并發

2021-10-12 17:19:17

Random局限性變量

2020-10-13 07:35:22

JUC - Count

2023-04-26 08:39:41

Bitmap元素存儲

2021-08-10 07:00:00

Nacos Clien服務分析

2013-01-21 10:55:52

大數據Ayasdi拓撲數據

2009-06-29 14:30:42

網絡拓撲KoolPoint摩卡

2012-12-03 16:57:37

HDFS
點贊
收藏

51CTO技術棧公眾號

婷婷六月天在线| 国精产品一区一区三区有限在线| 亚洲狼人综合干| av电影在线网| 国产成人精品亚洲777人妖| 色综合老司机第九色激情 | 伊人久久久大香线蕉综合直播| 欧美日韩小视频| 青青草免费在线视频观看| 国产永久免费视频| 亚洲精品成a人ⅴ香蕉片| 亚洲精品中文字幕在线观看| 国产精品一区二区免费| 亚洲男同性视频| 亚洲一区二区三区成人在线视频精品 | 成人mm视频在线观看| www精品久久| 一本到在线视频| 欧美特黄视频| 一区二区三区在线播放欧美| 我要色综合中文字幕| 97久久精品人人做人人爽| 国产精品久久久久久av| 欧美黄色免费观看| 国产精品欧美在线观看| 欧美成人午夜电影| 欧美伦理片在线观看| 国产va在线视频| 国产精品二三区| 精品欧美一区二区三区久久久| 亚洲专区第一页| 亚洲欧美日韩视频二区| 性欧美精品高清| 日韩在线免费高清视频| 亚洲第一黄色网址| 亚洲视频三区| 51精品国自产在线| 国产精品视频中文字幕| 欧美国产大片| 精品国产1区2区| 成人毛片100部免费看| 米奇777四色精品人人爽| 久久久久青草大香线综合精品| 国产精品夜夜夜一区二区三区尤| 一区二区不卡视频在线观看| 日韩国产精品久久久| 456国产精品| 精品深夜av无码一区二区老年| 围产精品久久久久久久| 色噜噜狠狠狠综合曰曰曰| 国产一区二区三区四区五区六区 | 欧美日韩视频在线观看一区二区三区| 成熟丰满熟妇高潮xxxxx视频| 美女网站视频在线| 一区二区三区在线高清| 黄色污污在线观看| a免费在线观看| 亚洲欧美日韩在线不卡| av不卡在线免费观看| 日本网站在线免费观看视频| 国产精品久久久久久久久动漫 | 国产一区二区三区四区老人| 久操成人在线视频| 久久久久97国产| 欧美精品综合| 欧美激情一区二区三级高清视频 | 国产在线欧美| 久久久久久亚洲| 日韩三级一区二区三区| 亚洲国产一区二区三区a毛片| 国内精品久久久久久久久| 国产无码精品久久久| 国产欧美一级| 成人一区在线看| 日韩精品在线一区二区| 天堂在线精品视频| y111111国产精品久久久| 精品国产91乱码一区二区三区 | 亚洲色图欧美制服丝袜另类第一页 | av免费在线一区| 精品视频一区三区九区| 天天色天天综合网| 日本在线成人| 精品网站999www| 国产视频三区四区| 亚洲影视一区二区三区| 亚洲91av视频| 嫩草影院一区二区三区| 国产一区二区在线免费观看| 国内精品国语自产拍在线观看| 青青免费在线视频| 国产精品盗摄一区二区三区| 男人c女人视频| 欧美大片免费| 日韩一区二区不卡| 中文字幕一区二区人妻电影丶| 精品视频高潮| 视频一区视频二区国产精品 | 久久久999视频| 成人亚洲免费| 欧美tickling网站挠脚心| 亚洲啪av永久无码精品放毛片 | 免费 成 人 黄 色| 欧美videos另类精品| 亚洲地区一二三色| 成人久久久久久久久| 精品美女一区| 日韩精品一区二区三区在线| 中文字幕一区二区三区人妻| 日韩啪啪电影网| 久久av在线播放| 波多野结衣在线观看视频| 狠狠色丁香九九婷婷综合五月| 超碰97在线资源| 免费一级在线观看播放网址| 亚洲日本成人在线观看| 少妇人妻在线视频| 欧美成人xxxx| 亚洲精品国产精品自产a区红杏吧| 国产jjizz一区二区三区视频| 午夜精彩国产免费不卡不顿大片| 欧美中文字幕精品| 精品国产av鲁一鲁一区| 久久亚洲一区二区三区四区| eeuss中文| 成人软件在线观看| 日韩欧美亚洲另类制服综合在线| 亚洲国产综合视频| 91视频综合| 欧美在线视频一区二区| 国产乱淫a∨片免费视频| 久久综合九色综合97婷婷| 天天想你在线观看完整版电影免费| 悠悠资源网亚洲青| 欧美大片免费久久精品三p| 久久久免费看片| 一区二区亚洲精品| 成人有码视频在线播放| 黄网在线观看| 亚洲成人av福利| 在线观看免费看片| 久久麻豆精品| 国产成人精品免高潮费视频| 欧美 日韩 人妻 高清 中文| 一级做a爱片久久| 三区视频在线观看| 日韩精品看片| 日韩av电影手机在线| 少妇av一区二区| 夜夜夜精品看看| 日韩欧美理论片| 亚洲成aⅴ人片久久青草影院| 97视频在线观看免费| 六月丁香综合网| 自拍偷拍亚洲综合| 中文字幕av专区| 国产精品嫩模av在线| 91精品国产99久久久久久| 丰满大乳国产精品| 亚洲欧美日韩成人高清在线一区| www.51色.com| 精品一区二区6| 怡红院成永久免费人全部视频| 六月丁香综合在线视频| 日韩亚洲视频| 性欧美freehd18| 国产一区二区三区18| 7777久久亚洲中文字幕| 国产精品毛片高清在线完整版| 久久久精品麻豆| 欧美午夜精彩| 国产精品无码专区在线观看| 91xxx在线观看| 欧美三级三级三级爽爽爽| 老司机成人免费视频| 国产一区二区电影| 欧美少妇一区二区三区| 日韩亚洲精品在线观看| 欧美激情一区二区三区高清视频| 人妻91麻豆一区二区三区| 精品久久久久久久久久ntr影视| 自拍偷拍中文字幕| 日本亚洲视频在线| 亚洲欧洲日韩精品| gogo大尺度成人免费视频| 久久av在线播放| 日韩在线观看视频一区| 色婷婷久久综合| 少妇人妻丰满做爰xxx| 国产91精品一区二区麻豆网站| 成人午夜免费在线视频| 精品少妇3p| 国产精品99导航| 麻豆视频在线免费观看| 欧美一区二区三区的| 精品少妇一区二区三区密爱| 不卡av电影在线播放| 欧美激情成人网| 99久久夜色精品国产亚洲1000部| 超碰97人人在线| 久久电影tv| 另类天堂视频在线观看| 不卡av中文字幕| 欧美性猛交xxxx免费看久久久| 国产一级淫片久久久片a级| 国产剧情一区二区| 国产精品免费入口| 91麻豆国产自产在线观看亚洲| 动漫精品视频| 日韩午夜视频在线| 97婷婷涩涩精品一区| 99reav在线| 亚洲国产欧美在线成人app | 婷婷视频在线观看| 在线一区二区三区| 久久久久久久久久久97| 国产日韩精品一区二区浪潮av | 狠狠色2019综合网| 九九视频精品在线观看| 欧美日韩视频| 四虎一区二区| 美女视频免费精品| 91九色视频导航| 玛雅亚洲电影| 午夜精品久久久久久99热| 中文字幕在线播放| 日韩二区三区在线| www.看毛片| 欧美日韩亚洲另类| 成人免费毛片视频| 亚洲一区二区三区小说| 一级黄色录像视频| 国产精品久久一级| 成人乱码一区二区三区av| 国产91精品露脸国语对白| 青青草久久伊人| 日本大胆欧美人术艺术动态| 激情视频综合网| 亚洲一区日本| 免费人成自慰网站| 亚洲综合五月| 一本一生久久a久久精品综合蜜 | 亚洲欧美日韩在线综合| 久久av导航| 久久久久一区二区| 国产精品对白| 国产精品一区二区欧美| 亚洲大奶少妇| 亚洲最大的成人网| 亚洲人体在线| 国产精品午夜一区二区欲梦| 偷拍视频一区二区三区| 国产精品扒开腿做爽爽爽男男 | 国产精品精品一区二区三区午夜版 | 成人天堂yy6080亚洲高清 | 成人黄页网站视频| 国产精品第一视频| 另类中文字幕国产精品| 热99久久精品| 欧美xxxxxx| 国产精品成久久久久三级| 欧美无毛视频| 国产成人av网址| 日韩一区二区三区在线免费观看| 日本高清+成人网在线观看| 国产美女精品写真福利视频| 久久青草福利网站| 欧美黑人疯狂性受xxxxx野外| 91sa在线看| 松下纱荣子在线观看| 欧洲亚洲免费视频| 欧美最新精品| 国产精品美女视频网站| 精品国产一区二| 岛国视频一区| 人体久久天天| 欧美午夜精品久久久久免费视| 欧美**字幕| 亚洲在线色站| 国产一区二区三区四区三区四 | 欧美天天综合网| 国产理论视频在线观看| 日韩一区二区在线播放| www夜片内射视频日韩精品成人| 欧美mv日韩mv国产网站app| 天天舔天天干天天操| 亚洲全黄一级网站| 黄色一级片在线观看| 欧美另类精品xxxx孕妇| 国产盗摄——sm在线视频| 欧洲s码亚洲m码精品一区| 粉嫩av一区二区三区四区五区 | 99在线精品视频免费观看软件| 欧美成人一区二区| 好吊色视频一区二区| 亚洲天堂男人的天堂| 高清全集视频免费在线| 久久久久久久国产精品视频| 亚洲欧美一区二区三区| 国产欧美日韩专区发布| 综合久久成人| 国产精品波多野结衣| 亚洲精品九九| 久久久久久蜜桃一区二区| 国产91高潮流白浆在线麻豆| 精品国产成人亚洲午夜福利| 一区二区三区在线看| 日韩欧美中文字幕一区二区| 欧美日韩高清影院| 天堂av中文字幕| 久久精视频免费在线久久完整在线看| 第一av在线| 成人国产精品色哟哟| 国产99久久久国产精品成人免费 | 日韩精品福利| 九九热这里只有在线精品视| 台湾成人免费视频| 精品国产乱码久久久久久久软件 | 日韩中文字幕久久| 操人在线观看| 亚洲综合成人婷婷小说| 曰本一区二区三区视频| 真人抽搐一进一出视频| 久久国产精品99久久人人澡| 亚洲第一黄色网址| 亚洲男同1069视频| 99re热视频| 日韩欧美色电影| 国产精品扒开做爽爽爽的视频 | 毛片a片免费观看| 欧美精品亚洲一区二区在线播放| 青青草免费在线| 久久久最新网址| 国产精品一区二区三区av | 欧美日韩黄网站| 中文字幕免费在线不卡| 蜜桃视频一区| 亚洲熟女乱综合一区二区三区| 亚洲自拍偷拍图区| 国产精品欧美久久久久天天影视| 在线日韩第一页| 巨茎人妖videos另类| 久久久亚洲综合网站| 亚洲精选在线| 视频免费在线观看| 综合色天天鬼久久鬼色| 96日本xxxxxⅹxxx17| 丝袜情趣国产精品| 欧美va在线观看| 视频一区三区| 免费高清在线视频一区·| 亚洲一区二区自偷自拍| 日本高清免费不卡视频| 久草视频在线看| 日韩免费观看网站| 自拍亚洲一区| 成熟了的熟妇毛茸茸| 2023国产一二三区日本精品2022| 天堂网av手机版| 日韩精品免费在线| 天堂电影一区| 欧美三级华人主播| 狠狠色综合色综合网络| 最新av电影网站| 制服丝袜亚洲播放| 超碰人人在线| 成人3d动漫一区二区三区91| 亚洲巨乳在线| 国产呦小j女精品视频| 色综合夜色一区| 免费播放片a高清在线观看| 91国内产香蕉| 欧洲杯半决赛直播| 九九九九九伊人| 一区二区日韩电影| 天堂在线资源8| 国产91精品青草社区| 秋霞欧美视频| 午夜诱惑痒痒网| 精品免费在线视频| 国产美女性感在线观看懂色av | 91吃瓜在线观看| 日本在线观看一区二区三区| 麻豆精品国产传媒mv男同| 日韩va亚洲va欧美va清高| 精品处破学生在线二十三| 高清精品在线| 91制片厂免费观看| 成人一级片网址| 日韩欧美在线观看免费| 日韩综合中文字幕| 二区三区精品| 六月丁香婷婷在线| |精品福利一区二区三区| 亚洲精品成人区在线观看| 欧美一区二三区| 久久大综合网| 亚洲人成人无码网www国产| 在线播放一区二区三区| 成人在线黄色电影|