日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux内核链表访问链表头指针,linux内核——链表结构分析

發布時間:2023/12/3 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux内核链表访问链表头指针,linux内核——链表结构分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/tigerjibo/article/details/8299584

簡單整理(使用linux3.0內核)

這里首先學習的是內核中一種抽象定義的雙向鏈表,為了提高其擴展性。

內核中鏈表的描述數據結構

位置:Types.h (linux-3.0.12\include\linux) ? ? 5444 ? ? 2011/11/29

222:

struct list_head {

struct list_head *next, *prev;

};

這是一個不含數據域的結構

使用內核鏈表結構構造自定義結構

我們可以這樣定義我們的鏈表節點

struct my_list_node {

數據域

......

struct list_head index;

......

};

如果需要構造某類對象的特定列表,則在其結構中定義一個類型為

struct list_head的成員,通過這個成員將這類對象連接起來,形成所需列表,并通過通用鏈表函數對其進行操作。其優點是只需編寫通用鏈表函數,即可構造和操作不同對象的列表,而無需為每類對象的每種列表編寫專用函數,實現了代碼的重用。

使用方法:以struct list_head 為基本對象,對鏈表進行插入、刪除、合并以及遍歷等各種操作。

內核鏈表頭的初始化定義

位置:List.h (linux-3.0.12\include\linux) ? ? 21209 ? ? 2011/11/29

19:

#define LIST_HEAD_INIT(name) { &(name), &(name) }

#define LIST_HEAD(name) \

struct list_head name = LIST_HEAD_INIT(name)

static inline void INIT_LIST_HEAD(struct list_head *list)

{

list->next = list;

list->prev = list;

}

其中name是一個struct list_head類型變量,list是struct list_head類型指針,上面是兩種初始化的方法,使用宏定義和內聯函數

自定義鏈表頭初始化

struct list_head my_list_head;

LIST_HEAD(my_list_head);或者

INIT_LIST_HEAD(&my_list_head);

調用后頭結點my_list_head的next, prev都指向自己,構成一個空鏈表。所以,可以借助next是否指向自己 (頭結點)來判斷鏈表是否為空。

內核鏈表操作的定義

判斷鏈表是否為空

/**

* list_empty - tests whether a list is empty

* @head: the list to test.

*/

static inline int list_empty(const struct list_head *head)

{

return head->next == head;

}

/**

* list_empty_careful - tests whether a list is empty and not being modified

* @head: the list to test

*

* Description:

* tests whether a list is empty _and_ checks that no other CPU might be

* in the process of modifying either member (next or prev)

*

* NOTE: using list_empty_careful() without synchronization

* can only be safe if the only activity that can happen

* to the list entry is list_del_init(). Eg. it cannot be used

* if another CPU could re-list_add() it.

*/

static inline int list_empty_careful(const struct list_head *head)

{

struct list_head *next = head->next;

return (next == head) && (next == head->prev);

}

返回值:

為空返回1,不為空返回0

插入節點

static inline void __list_add(struct list_head *new,

struct list_head *prev,

struct list_head *next)

{

next->prev = new;

new->next = next;

new->prev = prev;

prev->next = new;

}

/**

* list_add - add a new entry

* @new: new entry to be added

* @head: list head to add it after

*

* Insert a new entry after the specified head.

* This is good for implementing stacks.

*/

static inline void list_add(struct list_head *new, struct list_head *head)

{

__list_add(new, head, head->next);

}

/**

* list_add_tail - add a new entry

* @new: new entry to be added

* @head: list head to add it before

*

* Insert a new entry before the specified head.

* This is useful for implementing queues.

*/

static inline void list_add_tail(struct list_head *new, struct list_head *head)

{

__list_add(new, head->prev, head);

}

遍歷鏈表

首先看下需要用到額外的宏定義

offsetof:計算某結構體成員在結構體中的偏移地址

位置:Stddef.h (linux-3.0.12\include\linux) ? ? 435 ? ? 2011/11/29

24:

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

對這個宏的講解我們大致可以分為以下4步進行講解:

1>( (TYPE *)0 ) ?0地址強制 "轉換" 為 TYPE結構類型的指針;

2>((TYPE *)0)->MEMBER ? 訪問TYPE結構中的MEMBER數據成員;

3>&( ( (TYPE *)0 )->MEMBER)取出TYPE結構中的數據成員MEMBER的地址;

4>(size_t)(&(((TYPE*)0)->MEMBER))結果轉換為size_t類型。

宏offsetof的巧妙之處在于將0地址強制轉換為 TYPE結構類型的指針,TYPE結構以內存空間首地址0作為起始地址,則成員地址自然為偏移地址。可能有的讀者會想是不是非要用0呢?當然不是,我們僅僅是為了計算的簡便。也可以使用其他的值,只是算出來的結果還要再減去該數值才是偏移地址。

container_of:通過結構體中某個成員的地址,算出結構體的地址

位置:Kernel.h (linux-3.0.12\tools\perf\util\include\linux) ? ? 2691 ? ? 2011/11/29

19:

/**

* container_of - cast a member of a structure out to the containing structure

* @ptr: ? ? the pointer to the member.

* @type: ? ? the type of the container struct this is embedded in.

* @member: ? ? the name of the member within the struct.

*

*/

#define container_of(ptr, type, member) ({ ? ? ? ? ? ? ? \

const typeof(((type *)0)->member) * __mptr = (ptr); ? ? \

(type *)((char *)__mptr - offsetof(type, member)); })

說明

第一步,首先定義一個臨時的數據類型(通過typeof( ((type *)0)->member )獲得)與ptr相同的指針變量__mptr,然后用它來保存ptr的值。

說明:typeof是GNU C對標準C的擴展,它的作用是根據變量獲取變量的類型《typeof關鍵字在linux 內核中很常見》

第二步,用(char *)__mptr減去member在結構體中的偏移量,得到的值就是整個結構體變量的首地址(整個宏的返回值就是這個首地址)。

遍歷鏈表的相關宏定義

/**

* list_entry - get the struct for this entry

* @ptr: ? ? the &struct list_head pointer.

* @type: ? ? the type of the struct this is embedded in.

* @member: ? ? the name of the list_struct within the struct.

*/

#define list_entry(ptr, type, member) \

container_of(ptr, type, member)

通過成員指針獲得整個結構體的指針,Linux鏈表中僅保存了節點中struct list_head成員變量的地址,通過list_entry宏經struct list_head成員訪問到作為它的所有者的節點起始地址。

/**

* list_first_entry - get the first element from a list

* @ptr: ? ? the list head to take the element from.

* @type: ? ? the type of the struct this is embedded in.

* @member: ? ? the name of the list_struct within the struct.

*

* Note, that list is expected to be not empty.

*/

#define list_first_entry(ptr, type, member) \

list_entry((ptr)->next, type, member)

得到ptr指向的節點的next成員指向的結構體變量地址,此處的ptr一般是一個鏈表的頭結點

/**

* list_for_each ? ? - ? ? iterate over a list

* @pos: ? ? the &struct list_head to use as a loop cursor.

* @head: ? ? the head for your list.

*/

#define list_for_each(pos, head) \

for (pos = (head)->next; pos != (head); pos = pos->next)

/**

* __list_for_each ? ? - ? ? iterate over a list

* @pos: ? ? the &struct list_head to use as a loop cursor.

* @head: ? ? the head for your list.

*

* This variant doesn't differ from list_for_each() any more.

* We don't do prefetching in either case.

*/

#define __list_for_each(pos, head) \

for (pos = (head)->next; pos != (head); pos = pos->next)

兩個宏都是用來遍歷鏈表

pos是一個輔助指針(即鏈表類型),用于鏈表遍歷

head:鏈表的頭指針(即結構體中成員struct list_head)

/**

* list_for_each_prev ? ? - ? ? iterate over a list backwards

* @pos: ? ? the &struct list_head to use as a loop cursor.

* @head: ? ? the head for your list.

*/

#define list_for_each_prev(pos, head) \

for (pos = (head)->prev; pos != (head); pos = pos->prev)

逆向遍歷

/**

* list_for_each_safe - iterate over a list safe against removal of list entry

* @pos: ? ? the &struct list_head to use as a loop cursor.

* @n: ? ? ? ? ?another &struct list_head to use as temporary storage

* @head: ? ? the head for your list.

*/

#define list_for_each_safe(pos, n, head) \

for (pos = (head)->next, n = pos->next; pos != (head); \

pos = n, n = pos->next)

前面介紹了用于鏈表遍歷的幾個宏,它們都是通過移動pos指針來達到遍歷的目的。但如果遍歷的操作中包含刪除pos指針所指向的節點,pos指針的移動就會被中斷,因為list_del(pos)將把pos的next、prev置成LIST_POSITION2和LIST_POSITION1的特殊值。當然,調用者完全可以自己緩存next指針使遍歷操作能夠連貫起來,但為了編程的一致性,Linxu內核鏈表要求調用者另外提供一個與pos同類型的指針n,在for循環中暫存pos下一個節點的地址,避免因pos節點被釋放而造成的斷鏈。

/**

* list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry

* @pos: ? ? the &struct list_head to use as a loop cursor.

* @n: ? ? ? ? ?another &struct list_head to use as temporary storage

* @head: ? ? the head for your list.

*/

#define list_for_each_prev_safe(pos, n, head) \

for (pos = (head)->prev, n = pos->prev; \

pos != (head); \

pos = n, n = pos->prev)

功能與list_for_each_prev相同,用于逆向遍歷鏈表。不同的是使用list_head結構體變量n作為臨時存儲變量。主要用于鏈表刪除時操作。

下邊遍歷鏈表宏定義,所不同的是它是根據鏈表的結構體地址來進行遍歷。大多數情況下,遍歷鏈表的時候都需要獲得鏈表節點數據項,也就是說list_for_each()和list_entry()總是同時使用。與list_for_each()不同,這里的pos是數據項結構指針類型,而不是(struct list_head 類型。

首先是從head開始遍歷整個鏈

/**

* list_for_each_entry ? ? - ? ? iterate over list of given type

* @pos: ? ? the type * to use as a loop cursor.

* @head: ? ? the head for your list.

* @member: ? ? the name of the list_struct within the struct.

*/

#define list_for_each_entry(pos, head, member) ? ? ? ? ? ? ? ? ? ?\

for (pos = list_entry((head)->next, typeof(*pos), member); ? ? \

&pos->member != (head); ? ? ?\

pos = list_entry(pos->member.next, typeof(*pos), member))

/**

* list_for_each_entry_reverse - iterate backwards over list of given type.

* @pos: ? ? the type * to use as a loop cursor.

* @head: ? ? the head for your list.

* @member: ? ? the name of the list_struct within the struct.

*/

#define list_for_each_entry_reverse(pos, head, member) ? ? ? ? ? ? ? \

for (pos = list_entry((head)->prev, typeof(*pos), member); ? ? \

&pos->member != (head); ? ? ?\

pos = list_entry(pos->member.prev, typeof(*pos), member))

/**

* list_for_each_entry_safe - iterate over list of given type safe against removal of list entry

* @pos: ? ? the type * to use as a loop cursor.

* @n: ? ? ? ? ?another type * to use as temporary storage

* @head: ? ? the head for your list.

* @member: ? ? the name of the list_struct within the struct.

*/

#define list_for_each_entry_safe(pos, n, head, member) ? ? ? ? ? ? ? \

for (pos = list_entry((head)->next, typeof(*pos), member), ? ? \

n = list_entry(pos->member.next, typeof(*pos), member); ? ? \

&pos->member != (head); ? ? ? ? ? ? ? ? ? ? ? ? ?\

pos = n, n = list_entry(n->member.next, typeof(*n), member))

/**

* list_for_each_entry_safe_continue - continue list iteration safe against removal

* @pos: ? ? the type * to use as a loop cursor.

* @n: ? ? ? ? ?another type * to use as temporary storage

* @head: ? ? the head for your list.

* @member: ? ? the name of the list_struct within the struct.

*

* Iterate over list of given type, continuing after current point,

* safe against removal of list entry.

*/

#define list_for_each_entry_safe_continue(pos, n, head, member) ? ? ? ? ? \

for (pos = list_entry(pos->member.next, typeof(*pos), member), ? ? ? ? ? \

n = list_entry(pos->member.next, typeof(*pos), member); ? ? ? ? ?\

&pos->member != (head); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\

pos = n, n = list_entry(n->member.next, typeof(*n), member))

pos:用于遍歷的指針,只是它的數據類型是結構體類型而不是strut list_head 類型

head:鏈表頭指針

member:該結構體類型定義中struct list_head成員的變量名。

n和pos類型相同

從pos后位置開始順序遍歷到head,需要list_prepare_entry宏先對pos處理

/**

* list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()

* @pos: ? ? the type * to use as a start point

* @head: ? ? the head of the list

* @member: ? ? the name of the list_struct within the struct.

*

* Prepares a pos entry for use as a start point in list_for_each_entry_continue().

*/

#define list_prepare_entry(pos, head, member) \

((pos) ? : list_entry(head, typeof(*pos), member))

/**

* list_for_each_entry_continue - continue iteration over list of given type

* @pos: ? ? the type * to use as a loop cursor.

* @head: ? ? the head for your list.

* @member: ? ? the name of the list_struct within the struct.

*

* Continue to iterate over list of given type, continuing after

* the current position.

*/

#define list_for_each_entry_continue(pos, head, member) ? ? ? ? ? \

for (pos = list_entry(pos->member.next, typeof(*pos), member); ? ? \

&pos->member != (head); ? ? \

pos = list_entry(pos->member.next, typeof(*pos), member))

從pos前一位置開始逆序遍歷到head,需要list_prepare_entry宏先對pos處理

/**

* list_for_each_entry_continue_reverse - iterate backwards from the given point

* @pos: ? ? the type * to use as a loop cursor.

* @head: ? ? the head for your list.

* @member: ? ? the name of the list_struct within the struct.

*

* Start to iterate over list of given type backwards, continuing after

* the current position.

*/

#define list_for_each_entry_continue_reverse(pos, head, member) ? ? ? ? ?\

for (pos = list_entry(pos->member.prev, typeof(*pos), member); ? ? \

&pos->member != (head); ? ? \

pos = list_entry(pos->member.prev, typeof(*pos), member))

#define list_for_each_entry_safe(pos, n, head, member) ? ? ? ? ? ? ? \

for (pos = list_entry((head)->next, typeof(*pos), member), ? ? \

n = list_entry(pos->member.next, typeof(*pos), member); ? ? \

&pos->member != (head); ? ? ? ? ? ? ? ? ? ? ? ? ?\

pos = n, n = list_entry(n->member.next, typeof(*n), member))

從已知的某個結點pos后一個結點開始進行遍歷,與list_for_each_entry_continue不同的是,它主要用于鏈表進行刪除時進行的遍歷。

從當前pos位置開始遍歷到head

#define list_for_each_entry_from(pos, head, member) ? ? ? ? ? ? ? ?\

for (; &pos->member != (head); ? ? \

pos = list_entry(pos->member.next, typeof(*pos), member))

#define list_for_each_entry_safe_from(pos, n, head, member) ? ? ? ? ? ? ? ?\

for (n = list_entry(pos->member.next, typeof(*pos), member); ? ? ? ? ?\

&pos->member != (head); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\

pos = n, n = list_entry(n->member.next, typeof(*n), member))

根據pos得到其下一個節點的起始地址

/**

* list_safe_reset_next - reset a stale list_for_each_entry_safe loop

* @pos: ? ? the loop cursor used in the list_for_each_entry_safe loop

* @n: ? ? ? ? ?temporary storage used in list_for_each_entry_safe

* @member: ? ? the name of the list_struct within the struct.

*

* list_safe_reset_next is not safe to use in general if the list may be

* modified concurrently (eg. the lock is dropped in the loop body). An

* exception to this is if the cursor element (pos) is pinned in the list,

* and list_safe_reset_next is called after re-taking the lock and before

* completing the current iteration of the loop body.

*/

#define list_safe_reset_next(pos, n, member) ? ? ? ? ? ? ? ? ? ?\

n = list_entry(pos->member.next, typeof(*pos), member)

鏈表節點的刪除

/*

* Delete a list entry by making the prev/next entries

* point to each other.

*

* This is only for internal list manipulation where we know

* the prev/next entries already!

*/

static inline void __list_del(struct list_head * prev, struct list_head * next)

{

next->prev = prev;

prev->next = next;

}

static inline void __list_del_entry(struct list_head *entry)

{

__list_del(entry->prev, entry->next);

}

只是簡單刪除,對被刪除的節點沒做處理

static inline void list_del(struct list_head *entry)

{

__list_del(entry->prev, entry->next);

entry->next = LIST_POISON1;

entry->prev = LIST_POISON2;

}

list_del()函數將刪除后的prev、next指針分別被設為LIST_POSITION2和LIST_POSITION1兩個特殊值,這樣設置是為了保證不在鏈表中的節點項不可訪問。對LIST_POSITION1和LIST_POSITION2的訪問都將引起頁故障。

static inline void INIT_LIST_HEAD(struct list_head *list)

{

list->next = list;

list->prev = list;

}

static inline void list_del_init(struct list_head *entry)

{

__list_del_entry(entry);

INIT_LIST_HEAD(entry);

}

list_del_init這個函數首先將entry從雙向鏈表中刪除之后,并且將entry初始化為一個空鏈表

移動一個節點到另一個鏈表

/**

* list_move - delete from one list and add as another's head

* @list: the entry to move

* @head: the head that will precede our entry

*/

static inline void list_move(struct list_head *list, struct list_head *head)

{

__list_del_entry(list);

list_add(list, head);

}

/**

* list_move_tail - delete from one list and add as another's tail

* @list: the entry to move

* @head: the head that will follow our entry

*/

static inline void list_move_tail(struct list_head *list,

struct list_head *head)

{

__list_del_entry(list);

list_add_tail(list, head);

}

剩下的函數暫時不看了!!

總結

以上是生活随笔為你收集整理的Linux内核链表访问链表头指针,linux内核——链表结构分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91久久人澡人人添人人爽欧美 | 免费看黄色91 | 97小视频| 国产成人精品a | 一级性av| 日韩网站一区 | 91视频 - v11av | av电影免费在线看 | av福利在线看 | 国产精品久久久电影 | 99热高清| 天天综合区 | 成人精品在线 | 久久激情视频免费观看 | 超碰在线人人草 | 欧美另类色图 | 久久国产影院 | 国产小视频免费观看 | 99国产成+人+综合+亚洲 欧美 | 四虎在线视频免费观看 | 美女视频黄免费 | 黄色片免费电影 | 丁香狠狠 | 国产特级毛片aaaaaaa高清 | 1024手机基地在线观看 | 久久国语 | 日韩免费在线观看视频 | 成人欧美一区二区三区黑人麻豆 | 黄色国产高清 | 久久手机免费观看 | 精品少妇一区二区三区在线 | 欧美日韩国产一区二区三区在线观看 | 免费看成人 | 亚洲精品国产第一综合99久久 | 国产小视频在线播放 | 久久精品99国产国产 | 国产精品久久久久三级 | 色综合久久久久久久久五月 | 亚洲激情六月 | 欧美在线视频第一页 | 黄色一级在线视频 | 中文有码在线视频 | 久草手机视频 | 国产不卡毛片 | 精品国产伦一区二区三区 | 欧美日韩一区二区视频在线观看 | 天天干天天弄 | 高清在线一区 | 日韩免费av网址 | 日本精品久久久久 | www.色婷婷.com| 欧美日韩中 | 麻豆影视网 | 在线国产片 | 欧美最猛性xxxxx亚洲精品 | 免费欧美高清视频 | 久久免费99精品久久久久久 | 中文字幕av一区二区三区四区 | 国产精品激情在线观看 | 国产中文字幕大全 | 国偷自产视频一区二区久 | 九九精品毛片 | 最近中文字幕视频网 | 人人爽人人爽人人爽人人爽 | 色婷婷激情综合 | 日韩亚洲精品电影 | 欧美极品少妇xbxb性爽爽视频 | 色妞色视频一区二区三区四区 | 特级xxxxx欧美 | 国产精品3 | 一本一道波多野毛片中文在线 | 久草在线最新 | 亚洲h视频在线 | 久久免费国产精品1 | 成人丁香花 | 日韩中文字幕免费视频 | 一区二区三区四区久久 | 国产裸体视频bbbbb | 91成人精品一区在线播放69 | 久久精品福利 | 狠狠成人 | 日韩二区三区 | 色视频在线 | 国产精品免费麻豆入口 | 人人看黄色 | 福利网在线 | 97视频人人免费看 | 中文久久精品 | 黄色中文字幕在线 | 激情五月综合 | 97国产精品一区二区 | 在线观看国产日韩欧美 | 一级成人在线 | 五月开心激情 | 最新日韩精品 | 久草在线视频新 | 激情视频在线观看网址 | 天天操比 | 久草视频手机在线 | 日本在线观看中文字幕 | 视频福利在线观看 | 中文字幕九九 | 欧美精品你懂的 | 亚洲区精品 | 免费看片在线观看 | 久草a视频 | 午夜视频在线瓜伦 | 日日夜夜精品网站 | 国产亚洲精品综合一区91 | 日韩欧美高清视频在线观看 | 中文字幕网址 | 久久精品视频播放 | 免费在线观看成人小视频 | 偷拍视频一区 | 三级av在线免费观看 | 免费情趣视频 | 黄色一级在线免费观看 | 久久久久国产精品午夜一区 | 中文字幕一区二区三区在线观看 | 999精品在线 | 特级毛片在线 | 精品欧美在线视频 | 久久久亚洲麻豆日韩精品一区三区 | 麻豆一精品传二传媒短视频 | 性色大片在线观看 | 日韩丝袜 | 日韩理论片在线观看 | 亚洲黄色免费 | 亚洲精品乱码白浆高清久久久久久 | 免费婷婷 | 日韩欧美视频免费观看 | 国产亚洲精品av | 人人看人人做人人澡 | 精品久久久成人 | 香蕉久久久久久av成人 | 天天插天天狠 | 国产精品色 | 亚洲 欧洲 国产 精品 | 成人黄色在线 | 九九视频免费观看视频精品 | 中文字幕在线观看完整版 | 五月婷婷一区二区三区 | 国产一级片直播 | 国产午夜一区 | 在线播放第一页 | 国产日韩在线播放 | 不卡的av在线| 欧美日韩在线免费观看视频 | 精品国产欧美一区二区 | 日韩在线观看视频中文字幕 | 黄色国产高清 | 成人一级片视频 | av观看免费在线 | .国产精品成人自产拍在线观看6 | 又紧又大又爽精品一区二区 | bbb搡bbb爽爽爽 | 国产成人777777 | 亚洲视频专区在线 | 免费在线国产 | 97网在线观看 | 精品国产精品国产偷麻豆 | 中文字幕在线观看视频一区二区三区 | av网在线观看 | 日韩欧美精品在线观看视频 | 精品视频免费 | 久久久午夜精品福利内容 | 国产91综合一区在线观看 | 99精品一级欧美片免费播放 | 天天干天天碰 | 日韩精品视频第一页 | 黄色毛片一级片 | 婷婷伊人五月 | 久久一级电影 | 日本精品一区二区三区在线观看 | 亚洲精品在线免费看 | 欧美另类交在线观看 | 五月天六月丁香 | 国产一区视频在线播放 | 少妇bbb好爽 | 91亚洲精品国偷拍 | 午夜精品久久久久 | 色视频网站免费观看 | 狠狠的操狠狠的干 | 国产视频中文字幕在线观看 | 欧美福利精品 | 成人国产精品 | 日韩av电影免费在线观看 | 美女视频久久黄 | 日韩成人精品在线观看 | 午夜精品久久久久久久99 | 色在线观看网站 | 亚洲国产经典视频 | 日韩区视频 | 天天干天天弄 | 成人影音在线 | 91免费在线看片 | 欧美国产日韩在线观看 | 久久免费视频精品 | 日韩视频一区二区 | 亚洲精品一区中文字幕乱码 | 欧美精品在线观看免费 | 444av| 欧美网址在线观看 | 日韩在线 一区二区 | 日本爱爱免费视频 | 久久国产精品精品国产色婷婷 | 色五婷婷| 国产高清视频免费最新在线 | 国产精品美女网站 | 精品在线免费视频 | 成人一区电影 | 69国产精品视频免费观看 | 不卡的av片 | 99免在线观看免费视频高清 | 亚洲综合色丁香婷婷六月图片 | 在线国产福利 | 就要干b| 亚洲精品777 | 国产精品theporn | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 韩国av一区二区 | 99久久综合精品五月天 | 五月激情av | 亚洲精品国产精品国自产 | 亚洲国产成人在线观看 | 手机版av在线| 久久精品一区二区三 | 在线天堂中文在线资源网 | 操操操干干干 | 欧美成人xxx | 九九在线播放 | 夜添久久精品亚洲国产精品 | 日日添夜夜添 | 中文高清av | av高清在线 | 在线观看午夜av | 国产精品乱码久久久久久1区2区 | 五月婷婷婷婷婷 | 日韩在线二区 | 国产手机在线视频 | 国产裸体bbb视频 | 2021国产精品视频 | 久久国产免费看 | 久久久av免费 | 亚洲五月婷 | 久久综合九色综合欧美就去吻 | 国产99久久久欧美黑人 | 久久爱资源网 | 国产精品久久久久久久7电影 | 午夜精品导航 | 亚洲综合视频在线 | 91免费高清在线观看 | 97视频资源 | 日本精品免费看 | 日韩黄色一级电影 | 2021国产在线视频 | 亚洲视频久久久久 | 久久久久久黄色 | 国产一区欧美二区 | 国产精品视频久久久 | 91在线视频免费观看 | 射久久久 | 综合色中文 | 手机版av在线 | 亚洲精品97 | 久久精品视 | 中文字幕在线播放日韩 | 日韩电影中文 | 亚洲精品视频在线观看免费视频 | 青青河边草免费 | 视频精品一区二区三区 | 天天插夜夜操 | 91精品一区二区三区久久久久久 | 久久久久久蜜av免费网站 | 久久婷婷五月综合色丁香 | 91精品免费在线视频 | 99成人在线视频 | 亚洲九九| 国产成人中文字幕 | 九九精品久久 | 丁香婷婷色综合亚洲电影 | 丝袜制服综合网 | 国产高清不卡一区二区三区 | 午夜久久| 国产精品亚洲精品 | 国产精品久久影院 | 久久免费视频国产 | 久久久久久久久久久影院 | 免费在线观看中文字幕 | 黄av免费在线观看 | www.黄色片网站 | 日本三级不卡 | 久久久久亚洲精品男人的天堂 | 波多野结衣网址 | 久久高清免费视频 | av在线免费观看黄 | 国产精品你懂的在线观看 | 国产精品一区二区av麻豆 | 日日操夜夜操狠狠操 | 久久av免费观看 | 久久香蕉电影网 | 欧美 另类 交 | 高清av网| 毛片永久免费 | 超碰在线网 | 日韩精品视频免费看 | 国产不卡在线视频 | 欧美日产一区 | 日本性动态图 | 日韩精品久久久久久久电影竹菊 | 一级成人网 | 久久伊人国产精品 | 在线天堂日本 | 97国产在线 | 日韩在线免费看 | 日韩高清二区 | 中文超碰字幕 | 久久视频这里有精品 | 夜夜骑日日 | 午夜电影久久久 | 91精品国产91久久久久久三级 | 超碰97人| 黄污在线观看 | 一级片色播影院 | 91在线看免费 | 四虎影视成人精品 | 亚洲精品www | 国产精品免费视频一区二区 | 香蕉手机在线 | 欧美尹人 | 成人小视频在线免费观看 | 国产精品一区二区三区99 | 狂野欧美激情性xxxx | 五月天免费网站 | 99一级片 | 欧美不卡视频在线 | 激情大尺度视频 | av天天澡天天爽天天av | 日韩在线免费观看视频 | 亚洲禁18久人片 | 在线观看网站av | 91丨九色丨蝌蚪丨老版 | 久久不色| 国产精品一区二区久久精品爱涩 | 国产精品国产三级在线专区 | 日韩电影在线视频 | 成人毛片在线视频 | 久久久久综合视频 | 欧洲精品视频一区二区 | 欧美精彩视频 | 午夜视频在线观看一区二区三区 | 97超碰国产精品女人人人爽 | 亚洲欧洲精品一区二区精品久久久 | 亚洲国产日韩一区 | 国产伦精品一区二区三区无广告 | 色天天综合久久久久综合片 | 久久久久久综合网天天 | 日韩av影视 | 国产福利91精品一区 | 在线一级片 | 久久久久国产一区二区三区四区 | 91在线观看视频 | 91成人免费| 欧美作爱视频 | 国产午夜影院 | 中文字幕精品视频 | 91视频网址入口 | 色伊人网| 久久热亚洲 | 99久久激情| 欧美日韩不卡在线观看 | 久久国产精品视频 | 国产91电影在线观看 | 全久久久久久久久久久电影 | 国产精品亚洲片在线播放 | 国产在线p | 精品1区二区 | 99久久99久国产黄毛片 | 日韩精品一区二区三区水蜜桃 | 91av蜜桃| 天天碰天天操视频 | 色av色av色av | 日韩一区精品 | 国产成人一区二区三区电影 | 五月激情在线 | 在线看av的网址 | 国产艹b视频 | 欧美 亚洲 另类 激情 另类 | 91丨九色丨蝌蚪丨老版 | 久久精品亚洲一区二区三区观看模式 | 欧美一区二区精品在线 | 欧美日韩啪啪 | 人人干97| av不卡中文 | 女人高潮特级毛片 | a资源在线| 91av原创| 午夜精品福利影院 | 国产成人免费高清 | 精品国产一区二区三区四区在线观看 | 国产精品18久久久久久不卡孕妇 | 久久公开免费视频 | 在线看岛国av | 碰超在线观看 | 久久久久久久久影院 | 丁香激情网 | 91精彩在线视频 | 九九热re | 久久视频在线免费观看 | 99视频在线精品免费观看2 | 国产区免费在线 | 天天玩天天干 | 91网址在线观看 | 国产精品久久久久久久久久久不卡 | 亚洲精品一区中文字幕乱码 | 日韩啪啪小视频 | 国产精品va最新国产精品视频 | 欧美日韩高清国产 | 亚洲一级国产 | 日日干天天 | 一本一本久久a久久精品综合妖精 | 国产91综合一区在线观看 | 一区中文字幕在线观看 | 成人av资源网 | 免费看片日韩 | 国产精品亚洲视频 | 69绿帽绿奴3pvideos | 波多野结衣一区二区 | 在线观看日本高清mv视频 | 国产成人一区二区啪在线观看 | 久久久久久国产精品 | 黄色软件在线观看 | 久久久久国产成人免费精品免费 | 欧美性生活久久 | 免费看三级黄色片 | 成人一级黄色片 | 五月开心激情 | 亚洲精品国偷拍自产在线观看蜜桃 | 手机看片久久 | 日韩在线小视频 | 久久97久久 | av在线免费观看网站 | 日本一区二区三区免费观看 | 成人网在线免费视频 | 在线免费国产 | 国产大片黄色 | 夜夜操天天干 | 久久久久久久久影视 | 香蕉视频免费在线播放 | 国产美女精品视频 | 久久精品精品电影网 | 天天操夜夜叫 | 亚洲激情小视频 | 97在线精品国自产拍中文 | 亚洲一区黄色 | 99爱这里只有精品 | 国产1级毛片 | 夜夜躁狠狠躁日日躁视频黑人 | 精品夜夜嗨av一区二区三区 | 一区二区三区四区久久 | 天天综合在线观看 | 六月丁香在线观看 | 国产日产欧美在线观看 | 在线91播放| 成人在线免费视频观看 | 亚洲一本视频 | 日韩手机视频 | 98超碰在线 | 欧美色综合天天久久综合精品 | 免费h漫在线观看 | 激情网婷婷 | 天天色成人网 | 久久午夜免费视频 | 亚洲精品视频在线观看免费视频 | 国产麻豆精品一区二区 | www.狠狠色.com| 色网站中文字幕 | 日韩电影在线视频 | 欧美色就是色 | 91福利区一区二区三区 | 国产精品综合在线观看 | 久久永久免费视频 | 国产亚洲精品久久久久久电影 | 亚洲精品中文字幕在线观看 | 99r在线观看 | 欧美极品一区二区三区 | 国产精品日韩在线播放 | 亚洲爱视频 | 奇米影视8888在线观看大全免费 | 免费一级片在线 | 激情视频久久 | 中文字幕久久精品亚洲乱码 | 九色视频网站 | 婷婷av网| 国产麻豆视频免费观看 | 久久久久久国产精品美女 | 国产精品理论片在线播放 | www.五月婷 | 国产精品美女www爽爽爽视频 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 精品主播网红福利资源观看 | 操操操操网 | 久久久午夜精品福利内容 | 91亚洲视频在线观看 | 婷婷丁香激情网 | 天天色天天射天天综合网 | 97色狠狠 | 国产69精品久久久久9999apgf | 天天做天天爱夜夜爽 | 精品一区二区在线看 | 久久激情视频 久久 | 久久久久国产a免费观看rela | 狠狠搞,com | 色婷婷免费视频 | 国产亚州av | 国产精品免费观看在线 | 亚洲一二三在线 | 综合av在线 | 97视频网站 | 青青河边草免费直播 | 国产原创在线 | 最近日本mv字幕免费观看 | 免费视频99 | 久久国产经典 | 国产破处精品 | 亚洲精品视频一二三 | 在线播放精品一区二区三区 | 高清av网站 | 91精品婷婷国产综合久久蝌蚪 | 久久成年人| 欧美日韩国产一区二区三区在线观看 | 久久成电影 | 99tvdz@gmail.com | 日日操网站 | 久久免费电影网 | 日韩专区在线播放 | 午夜精品久久久久久久久久 | 国产一区二区在线免费播放 | 色播六月天 | 久草在线视频精品 | 亚洲精品视频偷拍 | 中文在线资源 | 日韩电影在线一区二区 | 91av视频免费观看 | 丝袜av一区 | 2022国产精品视频 | 亚洲国产精彩中文乱码av | 91在线视频导航 | 午夜久久网 | 日韩城人在线 | 91看片淫黄大片在线播放 | 中国一级片在线播放 | 欧美一级视频免费 | 久久天天躁夜夜躁狠狠躁2022 | 97爱爱爱 | 国产特黄色片 | 夜夜嗨av色一区二区不卡 | 天天爱天天操天天射 | 国产精品久久久久久久久久久杏吧 | 日本在线中文在线 | 99热这里只有精品免费 | 日韩欧美精品在线观看视频 | 一级国产视频 | 国产精品永久免费视频 | 国模吧一区| 日韩免费看视频 | 不卡的av在线 | 日韩大片在线播放 | 青草草在线| 999成人网 | 日韩一区二区三区观看 | 亚洲欧美国产精品久久久久 | 日本女人b | 日日干美女| 视频在线99| 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久精品欧美 | 超碰97免费观看 | 成人亚洲欧美 | 99精品免费在线 | 亚洲最大av网站 | 97视频免费在线看 | 亚洲免费色 | 五月天网页 | 99精品欧美一区二区三区 | 免费a视频| 国产美女黄网站免费 | 天天色天天射天天操 | 欧美日韩视频观看 | 99色在线| 成人在线观看影院 | 最近日本韩国中文字幕 | freejavvideo日本免费 | 五月婷婷丁香在线观看 | 成年人免费在线观看 | 亚洲精品乱码久久久久久 | 免费观看一区 | 国产精品久久一区二区三区, | 欧美 日韩 国产 中文字幕 | 91精品久久久久久综合乱菊 | 狠狠天天 | 天天操天天射天天添 | 91综合色 | 国产高清精品在线观看 | 国产成人精品网站 | av电影在线免费观看 | 亚洲理论电影网 | 中文字幕在线免费观看 | 欧美美女视频在线观看 | 成人在线观看资源 | 日韩久久片| 欧美一区二区三区特黄 | 色婷婷激情电影 | 蜜臀久久99精品久久久无需会员 | 免费在线黄色av | 国产一区欧美二区 | 国产精品成人av在线 | 国产99视频在线观看 | 天天射天天射 | 欧美一区二区精美视频 | 日韩理论视频 | 欧美性脚交 | 美女国产精品 | 国产黑丝一区二区三区 | 国产亚洲激情视频在线 | 狠狠狠色丁香综合久久天下网 | 中文字幕网址 | 香蕉看片| 亚洲成a人片在线观看网站口工 | 一区二区丝袜 | 91在线免费播放视频 | 天天操天天射天天操 | 亚洲视频精品在线 | 亚洲九九精品 | 久久香蕉国产精品麻豆粉嫩av | 最近免费观看的电影完整版 | 亚洲精品色视频 | 96看片| www.婷婷com | 四虎影视久久久 | 欧美综合色在线图区 | 99久久精品久久久久久动态片 | 色吊丝在线永久观看最新版本 | 国产精品一区二区三区四区在线观看 | 美女网色| 欧美国产日韩一区二区三区 | 欧美日韩精品免费观看视频 | 国产视频首页 | 日韩精品视频免费在线观看 | 成人黄色免费在线观看 | 97精品国自产拍在线观看 | 日韩中文字幕在线看 | 国产一二三区在线观看 | 国产99久久久精品 | 久久99精品久久久久久三级 | 久久女同性恋中文字幕 | 在线免费黄色av | 精品久久久久久久久久久久久久久久久久 | 午夜影院一级 | 亚洲精品午夜久久久久久久 | 香蕉视频在线网站 | 久久综合色8888 | 久久免费公开视频 | 久久夜色精品国产欧美乱极品 | av免费片| 999电影免费在线观看2020 | 国产精品久久久久久久久久久杏吧 | 欧洲一区二区三区精品 | 国产精品第10页 | 亚洲天堂网站视频 | 91亚色免费视频 | 激情丁香综合五月 | 久久久久国产精品www | 丰满少妇一级 | 亚洲一级片在线观看 | 国产一区二区在线视频观看 | 国产高清视频色在线www | 人人草人人草 | 日韩手机在线观看 | www黄| 久久不射网站 | 操操操夜夜操 | 亚洲成av人片在线观看香蕉 | 免费黄色a网站 | av电影免费在线播放 | 91网站在线视频 | 18岁免费看片 | 国产精品成人一区二区三区 | 欧美激情综合五月 | 成人精品99 | 欧美电影在线观看 | 香蕉日日 | 毛片网站免费在线观看 | 免费观看全黄做爰大片国产 | 婷婷色综 | 18久久久| 中文字幕色播 | 久久综合九色综合网站 | 中文字幕2021| 亚州免费视频 | 亚洲国产精品999 | 亚洲第五色综合网 | 激情综合中文娱乐网 | 九月婷婷色 | 日韩成片 | 成年人视频在线免费播放 | 91av观看| 日本在线观看黄色 | 欧美日韩一区二区在线观看 | 免费在线色视频 | 91久久在线观看 | 香蕉免费在线 | 99精品一区二区三区 | 99草视频 | 亚洲成人二区 | 国产精品淫片 | 亚洲精品视频大全 | 国产精品久久亚洲 | 99色婷婷| 天堂av一区二区 | 成人欧美一区二区三区在线观看 | 亚洲精品综合在线观看 | 亚洲va欧美 | 色婷婷综合在线 | 久久综合99| 日韩理论片 | 欧美日韩不卡在线视频 | 99在线免费视频观看 | 可以免费观看的av片 | av看片网址 | 国产精品久久久久久久久久新婚 | 五月网婷婷 | 91丨精品丨蝌蚪丨白丝jk | 91超碰在线播放 | 日本中文字幕免费观看 | 在线观看中文字幕网站 | av中文电影 | 国产91在线免费视频 | 亚洲精品免费观看视频 | 久草网视频 | 精品日韩在线 | 精品久久久久一区二区国产 | 久久精品九色 | 国产午夜三级 | 天天做天天干 | 97热久久免费频精品99 | 五月婷婷一区二区三区 | av大全在线观看 | 最新日韩电影 | 日韩欧美高清在线观看 | 爱情影院aqdy鲁丝片二区 | 天天射天天添 | 国产成人专区 | 亚洲成a人片在线观看网站口工 | 91在线免费观看国产 | 综合网欧美 | 国产中文字幕视频 | 夜夜嗨av色一区二区不卡 | 国产三级香港三韩国三级 | 四虎成人网| 午夜免费福利视频 | 国产1区2区 | 国产九色在线播放九色 | 91久久国产综合精品女同国语 | 8090yy亚洲精品久久 | 国产美女被啪进深处喷白浆视频 | 日韩综合一区二区 | 精品国产网址 | 欧美日韩在线视频观看 | 日韩亚洲在线观看 | 久久久久久久国产精品 | 人人玩人人添人人 | 九九九免费视频 | 免费看成人片 | 亚洲黄色三级 | 一区二区成人国产精品 | 国产精品日韩在线播放 | 探花视频在线观看免费 | 日韩电影一区二区在线 | 中文字幕日韩国产 | 国产精品美女久久久久久2018 | 久久久观看 | 亚洲国产剧情 | 少妇按摩av | 久久伦理网 | 在线电影中文字幕 | av五月婷婷 | 中文字幕日本特黄aa毛片 | 亚洲免费av网站 | 欧美日韩久久久 | 成年人黄色av | 亚洲精品免费在线 | 在线免费黄色片 | 亚洲久草在线 | 国产黄色片一级 | 我要看黄色一级片 | 美女免费av | 一区二区三区www | 国产精品亚洲a | 国产在线综合视频 | 日韩激情视频在线观看 | 成人黄色电影在线播放 | 中文字幕在线免费 | 国产精品淫 | 91视频啪| 久久精品美女视频 | av三级在线看| 国产成人av一区二区三区在线观看 | av久久久 | av 一区 二区 久久 | 成年人电影免费在线观看 | 高清av免费看 | 精品国产大片 | 久草在线资源网 | 成年人免费电影 | 亚洲人成在 | 黄色av免费 | 一区二区三区电影在线播 | 综合久久一本 | 国产精品欧美久久 | 97超碰在线久草超碰在线观看 | 亚洲精品电影在线 | 亚洲国产成人久久 | 国产精品久久久久一区二区国产 | 欧美日韩视频在线 | 欧美日韩一区二区三区在线观看视频 | 欧美综合久久久 | 中中文字幕av在线 | 亚洲午夜精品一区二区三区电影院 | 激情欧美在线观看 | 91麻豆精品国产 | 精品自拍sae8—视频 | 亚洲97在线 | 免费精品在线 | 亚洲精品黄色片 | 日韩高清在线一区二区三区 | 在线观看 国产 | 日韩在线视频在线观看 | 日韩av在线小说 | 日韩特级黄色片 | 免费网站观看www在线观看 | 亚洲欧美日韩在线看 | 国产亚洲精品美女久久 | 激情综合网婷婷 | 天堂黄色片| 国产日韩一区在线 | 手机av在线不卡 | 国产精品久久久区三区天天噜 | 久久久精品国产免费观看同学 | 国产亚洲va综合人人澡精品 | 日本一区二区三区免费观看 | 麻豆视传媒官网免费观看 | 久久视影| 999久久久免费精品国产 | 激情综合网五月婷婷 | 色婷婷综合视频在线观看 | 最新日韩在线 | 中文字幕免费高清在线观看 | 综合激情网... | 久久久综合精品 | 免费av免费观看 | 伊人丁香 | 国产91在| 欧美va在线观看 | 成人免费视频免费观看 | 国产69精品久久99的直播节目 | 中文字幕在线看 | 免费成人在线观看视频 | 久久一区二| 中文字幕在线影院 | 亚洲一级在线观看 | 偷拍精偷拍精品欧洲亚洲网站 | 伊人网综合在线观看 | a视频在线 | 99re久久精品国产 | 免费毛片一区二区三区久久久 | 国产亚洲高清视频 | 中文字幕二区在线观看 | 国产黄色片免费看 | 欧美日韩视频网站 | 狠狠综合 | 久久久久成人精品亚洲国产 | 中文字幕第 | 亚洲成人国产 | 国产一区二区三区免费视频 | 国产一级二级在线观看 | 伊人五月天| 国产69精品久久app免费版 | 中文在线免费观看 | 91干干干 | 久久超 | 91成人免费看片 | 亚洲国产黄色 | 中文字幕九九 | 国产精品中文字幕在线 | 日韩在线观看高清 | 久久久午夜精品理论片中文字幕 | 亚洲综合色av | 99久久精品电影 | www五月天com| 日本黄色免费在线观看 | 日韩精品第一区 | 欧美电影在线观看 | 婷婷丁香激情综合 | 日韩午夜在线观看 | 国产精品密入口果冻 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 97人人添人澡人人爽超碰动图 | 国产精品国产三级国产aⅴ9色 | 久久tv| 久久免费资源 | 久久综合九色综合久99 | 色综合天天射 | 亚洲精品国产精品乱码不99热 | 欧美另类tv | 国产精品99久久久精品免费观看 | 久久久国产成人 | 九色精品免费永久在线 | 欧美精品中文字幕亚洲专区 | 一二区精品 | 色婷婷综合激情 | 4438全国亚洲精品在线观看视频 | 久久夜色网 | 亚洲欧洲一区二区在线观看 | 天天搞天天干 | 黄污在线看 | 欧美日韩大片在线观看 | 日本精品在线 | 久久超碰在线 | 视频在线一区二区三区 | 久久久久这里只有精品 | 伊人狠狠色丁香婷婷综合 | 丁香导航| 午夜91视频 | 国产在线国偷精品产拍免费yy | 91亚洲精品国产 | 国产手机av | 99精品国产福利在线观看免费 | 婷婷精品进入 | 亚洲欧美视频在线播放 | 91天天视频| 日韩最新av | 亚洲精品中文字幕视频 | 黄影院| 日韩欧美区| 精品一区二区免费在线观看 | 一级黄色片在线免费看 | 国产69精品久久久久99尤 | 69国产精品视频 | 欧美91在线 | 又黄又爽的视频在线观看网站 | 欧美精品一区二区在线观看 | 99热精品国产一区二区在线观看 | 国产一区二区在线播放视频 | 久久专区 | 国产精品igao视频网入口 | 大片网站久久 | 精品久久影院 | 久久香蕉国产精品麻豆粉嫩av | 99视频| 久久精品一区二区三区四区 | 狠狠操狠狠操 | 免费看的av片 | 17婷婷久久www | 人人澡人摸人人添学生av | 欧美天堂久久 | 日韩精品aaa | 国产91免费看 | 天天操天天摸天天爽 | 91资源在线视频 | 国产乱码精品一区二区三区介绍 | 亚洲午夜av | 五月婷婷综合久久 | 成人免费观看大片 | 婷婷伊人综合亚洲综合网 | 色国产视频 | 四虎永久视频 | 午夜在线国产 | 岛国av在线不卡 | 成人精品一区二区三区中文字幕 | 香蕉久草在线 | 亚洲最新视频在线播放 | 久久刺激视频 | www久 | 亚洲精品国产精品久久99热 | 久久久网址 | 亚洲国产97在线精品一区 | 四虎成人av | 中文字幕免费久久 | 91视频久久久 | 久久久久久美女 | 国产精品va | 日韩在线字幕 | 亚洲天天看 | 久久蜜臀一区二区三区av | 婷婷久久婷婷 | 欧美日韩天堂 | 久久综合色天天久久综合图片 |