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

OHOS標準系統的IPC和RPC代碼解讀(一)

系統 OpenHarmony
在Linux命令行下進入 //foundation/communication/ipc/ 目錄,通過tree命令將目錄樹結構打印出來并重定向到文本文件中。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

本想接著前文《OHOS標準系統的SAMGR代碼解讀》繼續分析dmsfwk組件的實現細節,但發現涉及太多的IPC/RPC的內容了,如果對OHOS的IPC/RPC沒有足夠的理解,很難把dmsfwk組件理解透徹,因此我花了點時間,先整理了一下IPC/RPC相關的代碼和部分流程,作為理解SAMGR相關組件的預備知識。

IPC/RPC的代碼倉庫,在OHOS 3.1分支上,分為ipc和ipc_lite兩個倉庫,在master分支上,ipc_lite倉庫已經合并到ipc倉庫中,因此本文在整理ipc倉庫代碼目錄樹結構時,是以當前的master分支代碼為準整理的。

但由于我當前工作主要還是在OHOS 3.1分支上,所以在后面整理相關的流程圖或數據結構關系圖時,還是基于3.1分支代碼進行的(待930版本發布后再確認是否更新到930版本)。

1、整理代碼目錄樹結構(基于master分支)

在Linux命令行下進入 //foundation/communication/ipc/ 目錄,通過tree命令將目錄樹結構打印出來并重定向到文本文件中。為減少干擾,直接去除test相關的目錄和文件,再酌情微調一下部分目錄和文件的位置。重點閱讀剩下的幾個BUILD.gn文件,結合幾類系統分別整理BUILD.gn中的編譯目標,盡可能地挖掘有用信息(后繼在深入理解代碼時也可以對該目錄樹結構補充新的信息)。

目前我整理出來的信息大概如下:

# 系統類型:Lite類型系統(a-LiteM、b-LiteA、c-LiteL)、STD系統
# Lite類型系統的編譯目標:
#【0】shared_library("rpc_log"),LiteM系統該文件直接編譯進2.1中。
# 【Lite類型系統:LOG_DOMAIN 0xD001518,LOG_TAG "IPCRPC"】
# 【 STD類型系統:ipc_debug.h、log_tags.h】
#【1】靜態或動態library("rpc_adapter")【簡單:RpcGetPid()/RpcGetUid()的適配】
# 【1.1】static_library("rpc_adapter"),LiteM系統依賴該庫
# 【1.2】shared_library("rpc_adapter"),LiteA+LiteL小型系統依賴該庫
#【2】靜態或動態library("rpc_manager")
# 【2.1】static_library("rpc_manager"),LiteM系統依賴該庫
# 【2.2】shared_library("rpc_manager"),LiteA編譯該庫為空實際不依賴,LiteL小型系統依賴該庫
#【3】靜態或動態library("dbinder")
# 【3.1】static_library("dbinder"),LiteM系統依賴該庫
# 【3.2】shared_library("dbinder"),LiteA小型系統不依賴該庫,LiteL小型系統依賴該庫
#【4】shared_library("ipc_single"),LiteM系統不依賴該庫,LiteA和LiteL小型系統依賴該庫
# STD系統的編譯目標:
#【10】ohos_shared_library("ipc_core") 【包含本地設備內的IPC,以及與dbinder相關的基礎功能】
#【11】ohos_shared_library("ipc_single")【有定義CONFIG_IPC_SINGLE,完全是本地設備內的IPC】
#【12】ohos_shared_library("libdbinder")【dbinder,與RPC相關的功能實現】
#【13】ohos_shared_library("rpc") 【rpc_js接口】
# 依賴關系:
#LiteM:依賴【 1.1+2.1+3.1 】(0-直接編譯到2.1中)
#LiteA:依賴【0+1.2+ 4】(2-編譯為空實際不依賴,3-不依賴)
#LiteL:依賴【0+1.2+2.2+3.2+4】
#STD :依賴【10+11+12】+【13】
# 目錄樹結構
//foundation/communication/ipc/
├── bundle.json
├── BUILD.gn #定義ipc_components:STD系統依賴【10+11+12】,Lite系統依賴【interfaces/innerkits/c:rpc】
├── interfaces #接口部分,整理編譯目標和依賴關系
│ ├── innerkits
│ │ │ # Lite類型系統組件
│ │ ├── c
│ │ │ ├── BUILD.gn #Lite系統專用的組件【lite_component("rpc")】
│ │ │ │ #LiteM:依賴【 1.1+2.1+3.1 】(0-直接編譯到2.1中)
│ │ │ │ #LiteA:依賴【0+1.2+ 4】(2-編譯為空實際不依賴,3-不依賴)
│ │ │ │ #LiteL:依賴【0+1.2+2.2+3.2+4】
│ │ │ ├── dbinder #distributed binder for Lite
│ │ │ │ ├── BUILD.gn #【3.1】和【3.2】
│ │ │ │ └── include/dbinder_service.h
│ │ │ └── ipc
│ │ │ ├── BUILD.gn #【2.1】和【2.2】
│ │ │ └── include
│ │ │ ├── ipc_skeleton.h
│ │ │ ├── rpc_errno.h
│ │ │ └── serializer.h
│ │ │
│ │ │ # STD系統專用的組件【10】【11】【12】【13】
│ │ ├── ipc_core
│ │ │ ├── BUILD.gn #【10】ohos_shared_library("ipc_core")
│ │ │ └── include
│ │ │ ├── ipc_file_descriptor.h
│ │ │ ├── ipc_object_proxy.h
│ │ │ ├── ipc_object_stub.h
│ │ │ ├── ipc_skeleton.h
│ │ │ ├── ipc_types.h
│ │ │ ├── iremote_broker.h
│ │ │ ├── iremote_object.h
│ │ │ ├── iremote_proxy.h
│ │ │ ├── iremote_stub.h
│ │ │ ├── jni_help.h
│ │ │ ├── message_option.h
│ │ │ ├── message_parcel.h
│ │ │ └── peer_holder.h
│ │ ├── ipc_single/BUILD.gn #【11】ohos_shared_library("ipc_single") + CONFIG_IPC_SINGLE
│ │ └── libdbinder # distributed binder for STD
│ │ ├── BUILD.gn #【12】ohos_shared_library("libdbinder")依賴【10】
│ │ └── include
│ │ ├── dbinder_service.h
│ │ ├── dbinder_service_stub.h
│ │ └── rpc_system_ability_callback.h
│ └── kits
│ ├── bundle.json # RPC napi for js
│ └── js/napi/BUILD.gn #【13】ohos_shared_library("rpc") 依賴【10】

│ #工具部分【Lite類型系統在用,STD系統不用】
├── utils
│ ├── include
│ │ ├── log_tags.h # LOG_ID_COMMUNICATION 以及子模塊的LOG_ID定義
│ │ └── rpc_session_handle.h
│ └── src/rpc_session_handle.c #【a+c】

│ # IPC/RPC的框架實現代碼
├── ipc
│ └── native
│ │ #Lite類型系統的IPC框架代碼
│ ├── c
│ │ ├── adapter
│ │ │ ├── access_token
│ │ │ │ ├── include/access_token_adapter.h
│ │ │ │ └── src/access_token_adapter.c #【STD】【只有STD系統的[10][11]編譯該文件,Lite類型系統不編譯】
│ │ │ ├── BUILD.gn #【1】單獨編譯 rpc_os_adapter.c 源文件
│ │ │ ├── include
│ │ │ │ ├── rpc_bytrace.h
│ │ │ │ └── rpc_os_adapter.h
│ │ │ ├── Linux/rpc_os_adapter.c #【1.2】【b+c】
│ │ │ └── Liteos_m/rpc_os_adapter.c #【1.1】【a】
│ │ ├── ipc
│ │ │ ├── include
│ │ │ │ ├── ipc_invoker.h
│ │ │ │ └── ipc_types.h
│ │ │ └── src
│ │ │ ├── linux
│ │ │ │ ├── include/sys_binder.h
│ │ │ │ ├── ipc_invoker.c #【c】
│ │ │ │ └── serializer_inner.c #【c】
│ │ │ ├── liteos_a
│ │ │ │ ├── include/lite_ipc.h
│ │ │ │ ├── ipc_invoker.c #【b】
│ │ │ │ └── serializer_inner.c #【b】
│ │ │ └── liteos_m
│ │ │ ├── ipc_invoker.c #【a】
│ │ │ └── serializer_inner.c #【a】
│ │ ├── manager
│ │ │ ├── include
│ │ │ │ ├── ipc_process_skeleton.h
│ │ │ │ ├── ipc_skeleton_pri.h
│ │ │ │ ├── ipc_thread_pool.h
│ │ │ │ ├── iremote_invoker.h
│ │ │ │ ├── rpc_log.h
│ │ │ │ ├── rpc_types.h
│ │ │ │ └── serializer_inner.h
│ │ │ └── src
│ │ │ ├── ipc_process_skeleton.c #【a+b+c】公共部分5個文件
│ │ │ ├── ipc_skeleton.c #【a+b+c】公共部分5個文件
│ │ │ ├── ipc_thread_pool.c #【a+b+c】公共部分5個文件
│ │ │ ├── iremote_invoker.c #【a+b+c】公共部分5個文件
│ │ │ ├── serializer.c #【a+b+c】公共部分5個文件
│ │ │ └── rpc_log.c #【a】編譯在【2.1】,【b+c】LiteA+LiteL單獨編譯出【0】
│ │ └── rpc
│ │ ├── include
│ │ │ ├── dbinder_invoker.h
│ │ │ ├── rpc_feature_set.h
│ │ │ ├── rpc_process_skeleton.h
│ │ │ └── rpc_trans_callback.h
│ │ ├── ipc_adapter
│ │ │ ├── include
│ │ │ │ ├── ipc_proxy_inner.h
│ │ │ │ └── ipc_stub_inner.h
│ │ │ ├── mini
│ │ │ │ ├── ipc_proxy_inner.c #【a】
│ │ │ │ └── ipc_stub_inner.c #【a】
│ │ │ └── small
│ │ │ ├── ipc_proxy_inner.c #【c】
│ │ │ └── ipc_stub_inner.c #【c】
│ │ ├── src
│ │ │ ├── dbinder_invoker.c #【a+c】
│ │ │ ├── rpc_feature_set.c #【STD】【只有STD系統的[10]編譯該文件,Lite類型系統不編譯】
│ │ │ ├── rpc_process_skeleton.c #【a+c】
│ │ │ ├── rpc_process_skeleton_virtual.c #【b+c】
│ │ │ └── rpc_trans_callback.c #【a+c】
│ │ └── trans_adapter
│ │ ├── include
│ │ │ ├── rpc_softbus_trans.h
│ │ │ └── rpc_trans.h
│ │ └── src
./ipc/test/rpc/socket_trans/src/rpc_socket_trans.c #【c】因為enable_socket_trans[true]用socket而不用softbus
│ │ ├── rpc_softbus_trans.c #【a】如果enable_socket_trans[false],則這里【+c】用softbus而不用socket
│ │ └── rpc_trans.c #【a+c】
│ │
│ │ # STD系統的IPC框架代碼
│ └── src
│ ├── core
│ │ ├── include
│ │ │ ├── buffer_object.h
│ │ │ ├── comm_auth_info.h
│ │ │ ├── databus_session_callback.h
│ │ │ ├── dbinder_callback_stub.h
│ │ │ ├── dbinder_error_code.h
│ │ │ ├── dbinder_session_object.h
│ │ │ ├── ipc_debug.h
│ │ │ ├── ipc_process_skeleton.h
│ │ │ ├── ipc_thread_pool.h
│ │ │ ├── ipc_thread_skeleton.h
│ │ │ ├── ipc_workthread.h
│ │ │ └── stub_refcount_object.h
│ │ └── source
│ │ ├── buffer_object.cpp
│ │ ├── comm_auth_info.cpp
│ │ ├── databus_session_callback.cpp
│ │ ├── dbinder_callback_stub.cpp
│ │ ├── dbinder_session_object.cpp
│ │ ├── ipc_file_descriptor.cpp
│ │ ├── ipc_object_proxy.cpp
│ │ ├── ipc_object_stub.cpp
│ │ ├── ipc_process_skeleton.cpp
│ │ ├── ipc_skeleton.cpp
│ │ ├── ipc_thread_pool.cpp
│ │ ├── ipc_thread_skeleton.cpp
│ │ ├── ipc_workthread.cpp
│ │ ├── iremote_broker.cpp
│ │ ├── iremote_object.cpp
│ │ ├── message_option.cpp
│ │ ├── message_parcel.cpp
│ │ ├── peer_holder.cpp
│ │ └── stub_refcount_object.cpp
│ ├── mock
│ │ ├── include
│ │ │ ├── binder_connector.h
│ │ │ ├── binder_debug.h
│ │ │ ├── binder_invoker.h
│ │ │ ├── dbinder_base_invoker.h
│ │ │ ├── dbinder_databus_invoker.h
│ │ │ ├── hitrace_invoker.h
│ │ │ ├── invoker_factory.h
│ │ │ ├── invoker_rawdata.h
│ │ │ ├── iremote_invoker.h
│ │ │ └── sys_binder.h
│ │ └── source
│ │ ├── binder_connector.cpp
│ │ ├── binder_debug.cpp
│ │ ├── binder_invoker.cpp
│ │ ├── hitrace_invoker.cpp
│ │ ├── invoker_factory.cpp
│ │ ├── nvoker_rawdata.cpp
│ │ └── idbinder_databus_invoker.cpp
│ ├── jni
│ │ ├── include
│ │ │ ├── jni_helper.h
│ │ │ ├── jni_remote_object.h
│ │ │ ├── ohos_rpc_message_option.h
│ │ │ ├── ohos_rpc_message_parcel.h
│ │ │ └── ohos_rpc_remote_object.h
│ │ └── source
│ │ ├── jni_helper.cpp
│ │ ├── ohos_rpc_message_option.cpp
│ │ ├── ohos_rpc_message_parcel.cpp
│ │ └── ohos_rpc_remote_object.cpp
│ └── napi
│ ├── include
│ │ ├── napi_ashmem.h
│ │ ├── napi_message_option.h
│ │ ├── napi_message_parcel.h
│ │ └── napi_remote_object.h
│ └── src
│ ├── napi_ashmem.cpp
│ ├── napi_message_option.cpp
│ ├── napi_message_parcel.cpp
│ ├── napi_remote_object.cpp
│ └── napi_rpc_native_module.cpp

│ # dbinder服務的實現代碼【又分Lite類型系統和STD系統】
└── services
└── dbinder
│ # Lite類型系統的dbinder服務的實現代碼【LiteA系統不走dbinder】
├── c
│ ├── include
│ │ ├── dbinder_service_inner.h
│ │ ├── dbinder_stub.h
│ │ ├── dbinder_trans_callback.h
│ │ └── dbinder_types.h
│ ├── ipc_adapter
│ │ ├── include/dbinder_ipc_adapter.h
│ │ ├── mini/dbinder_ipc_adapter.c #【a】
│ │ └── small/dbinder_ipc_adapter.c #【c】
│ └── src
│ ├── dbinder_service.c #【a+c】
│ ├── dbinder_stub.c #【a+c】
│ └── dbinder_trans_callback.c #【a+c】

│ # STD系統的dbinder服務的實現代碼
└── dbinder_service #【12】ohos_shared_library("libdbinder")
├── include
│ ├── dbinder_death_recipient.h
│ ├── dbinder_log.h
│ ├── dbinder_remote_listener.h
│ └── dbinder_sa_death_recipient.h
└── src
├── dbinder_death_recipient.cpp
├── dbinder_sa_death_recipient.cpp
├── dbinder_service.cpp
├── dbinder_service_stub.cpp
└── socket/dbinder_remote_listener.cpp

從上面的整理可以看出,Lite類型系統和STD系統,各有一套自己的IPC/RPC的實現代碼。因為當前目標是要研究標準系統的dmsfwk組件(和samgr等其他組件),所以我們當前的重點是上文中的編譯目標【10】【11】【12】。

通過對比【10-ipc_core】和【11-ipc_single】兩個編譯目標的BUILD.gn文件,可以認為【11】是【10】的子集,因為:

  1. 目標【10】沒有定義CONFIG_IPC_SINGLE,目標【11】是有定義的。在部分共用的源代碼文件中,有使用 #ifndef CONFIG_IPC_SINGLE 控制的代碼,是目標【10】專用的。
  2. 目標【10】比目標【11】多編譯幾個文件,是與DBinder、DataBus相關的,用于RPC。

目前還沒有非常確定【10】【11】各自的應用場景有多大的差別,但我的理解偏向于Stub/Server端多依賴【10】,而Proxy/Client端多依賴【11】,或者分布式SA多依賴【10】,普通SA多依賴【11】(有待后面有更多的理解后確認)。

不管怎樣,【10】和【11】兩個目標的代碼是共用的,都屬于IPC范疇,可以一并閱讀理解。【12】則屬于RPC范圍,再單獨閱讀理解。至于Lite類型系統的編譯目標,待以后有空研究的時候再補充相關總結。

2、基于Binder驅動的IPC(基于3.1 Release分支)

ipc組件根目錄下的README.md文件中有提到:

IPC(Inter-Process Communication)與RPC(Remote Procedure Call)機制用于實現跨進程通信,不同的是前者使用Binder驅動,用于設備內的跨進程通信,而后者使用軟總線驅動,用于跨設備跨進程通信。IPC和RPC通常采用客戶端-服務器(Client-Server)模型,服務請求方(Client)可獲取提供服務提供方(Server)的代理 (Proxy),并通過此代理讀寫數據來實現進程間的數據通信。通常,系統能力(System Ability)Server側會先注冊到系統能力管理者(System Ability Manager,縮寫SAMgr)中,SAMgr負責管理這些SA并向Client提供相關的接口。Client要和某個具體的SA通信,必須先從SAMgr中獲取該SA的代理,然后使用代理和SA通信。

熟悉Android系統或者做過OHOS系統移植的小伙伴,即使沒有非常深入理解過Binder,但估計也會經常聽到基于Binder驅動的IPC機制。

內核態的Binder驅動實現代碼,在 //kernel/linux/linux-5.10/drivers/android/ 目錄下。在編譯Linux內核時,通過 //kernel/linux/config/linux-5.10/arch/arm(arm64)/configs/ 目錄下的 xxxx_defconfig 文件中的如下配置,將Binder驅動模塊編譯進內核:

#
# Android
#
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# CONFIG_DAX is not set
CONFIG_NVMEM=y

Binder驅動在內核向用戶態進程提供服務;用戶態進程通過 open(“/dev/binder”) 和 ioctl() 來使用Binder服務實現IPC。

這中間其實要經歷一些非常復雜的過程,建議小伙伴們自行搜索和理解Binder在內核中實現IPC的原理和細節,我現在還無法保證未來會做這方面的總結。

但本系列文章的下一篇,將會以全景圖的形式展示和講解OHOS的用戶態IPC框架的實現流程和細節。

3、基于DBinder驅動的RPC(待定)

DBinder應該是Distributed Binder的縮寫。

DBinder將會涉及軟總線的一些實現細節,我先看看能理解得多深入,待有所理解后再寫總結。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2022-09-13 15:54:41

samgr鴻蒙

2022-09-08 15:27:11

OHOSSafwk組件

2022-06-10 14:37:24

鴻蒙操作系統

2021-11-23 15:35:05

鴻蒙HarmonyOS應用

2021-09-26 10:22:41

鴻蒙HarmonyOS應用

2022-04-02 20:45:04

Hi3516開發板操作系統鴻蒙

2022-09-06 15:46:52

speexdsp鴻蒙

2022-10-12 15:14:08

開機動畫鴻蒙

2021-09-16 15:04:28

鴻蒙HarmonyOS應用

2023-06-27 15:12:46

C++三方庫移植

2023-03-20 16:21:26

ADC數字轉換器

2023-02-01 16:28:30

Linux內核鴻蒙

2022-09-15 14:56:12

GDB調試鴻蒙

2022-02-16 16:01:02

Hi3516開發板鴻蒙

2021-11-08 07:19:45

鴻蒙HarmonyOS應用

2023-12-29 08:45:40

Python3.8鴻蒙解釋器

2022-09-13 16:10:15

鴻蒙操作系統

2022-09-07 15:08:58

操作系統鴻蒙

2022-09-16 15:01:37

操作系統技術鴻蒙

2023-02-01 16:38:53

點贊
收藏

51CTO技術棧公眾號

国产精品毛片一区二区在线看| 中文字幕色婷婷在线视频| 激情五月播播久久久精品| 久久久精品在线| 91精品人妻一区二区三区蜜桃2| 丁香花在线影院| wwwwww.欧美系列| 国产精品扒开腿爽爽爽视频| 任你操精品视频| 国产劲爆久久| 日韩欧美国产黄色| 日本不卡一区二区三区四区| 日韩一级免费毛片| 日韩综合小视频| 九九精品视频在线| 色一情一交一乱一区二区三区| 不卡的国产精品| 偷拍亚洲欧洲综合| 亚洲第一综合网站| 国产在线视频你懂得| 国产成人免费视频网站| 国产va免费精品高清在线观看| 日韩一区二区不卡视频| 奇米亚洲欧美| 精品国产伦理网| 午夜精品久久久内射近拍高清| 国产在线观看免费麻豆| 久久精品夜夜夜夜久久| 成人国产1314www色视频| 日本一区二区三区久久| 99综合精品| 欧美极品第一页| 91狠狠综合久久久| 精品免费av| 亚洲毛片在线免费观看| 国产精久久久久| 国产精品va视频| 欧美三级蜜桃2在线观看| 男女高潮又爽又黄又无遮挡| 五月天激情在线| 亚洲私人黄色宅男| 一区二区三区久久网| 欧美理论在线观看| 91麻豆精品秘密| 国产视频精品网| 国产精品日韩无码| 久草中文综合在线| 国产精品久久久久久久久久新婚| 91美女免费看| 在线看片成人| 久久欧美在线电影| 久久久美女视频| 亚洲欧美亚洲| 九九久久久久久久久激情| 亚洲 欧美 国产 另类| 色琪琪久久se色| 中文欧美在线视频| 亚洲激情图片网| 久久人人88| 这里只有精品久久| 久久精品在线观看视频| 外国成人激情视频| 蜜臀久久99精品久久久无需会员 | 日韩中文在线中文网在线观看| 偷偷色噜狠狠狠狠的777米奇| 成人福利一区| 亚洲国产精品va在线观看黑人| 在线观看免费视频国产| 国产欧美一区二区三区米奇| 精品国产乱码久久久久久图片 | 99热精品国产| 久久精品国产99精品国产亚洲性色| 少妇高潮一区二区三区69| 99久久久久免费精品国产| 久久久com| 精品美女视频在线观看免费软件| 久久久91精品国产一区二区三区| 午夜久久资源| 国产色在线观看| 亚洲精品老司机| 日韩av中文字幕第一页| 婷婷电影在线观看| 欧美在线免费观看视频| 爱豆国产剧免费观看大全剧苏畅| 免费一级欧美片在线观看网站| 欧美不卡视频一区| 一区二区三区免费在线观看视频| 国产亚洲第一伦理第一区| 中文字幕亚洲一区| 欧美日韩在线国产| 午夜在线视频观看日韩17c| 国产精品网站视频| 亚洲av无码乱码国产精品| 91在线国内视频| 亚洲欧美日韩国产yyy| 伊人影院在线视频| 色综合婷婷久久| 岛国av免费在线| 欧美有码在线| 久久久国产精品一区| 色网站在线播放| 青娱乐精品视频| 国产精品麻豆免费版| 国产黄色免费在线观看| 亚洲精品成人少妇| 可以免费在线看黄的网站| 精品三级国产| 国产亚洲精品综合一区91| 久久精品视频免费在线观看| 裸体一区二区| 成人3d动漫一区二区三区91| 国产在线观看精品一区| 亚洲国产成人精品视频| 国产一区二区在线免费播放| 精品日产乱码久久久久久仙踪林| 色悠悠国产精品| 毛片基地在线观看| 国产成人亚洲精品青草天美| 天天综合色天天综合色hd| 丁香花在线影院| 911精品国产一区二区在线| 法国伦理少妇愉情| 国内精品久久久久久久97牛牛 | 亚洲精品无码久久久久| 不卡影院免费观看| 在线观看成人av电影| av日韩亚洲| 亚洲精品一区在线观看| 91麻豆精品成人一区二区| 日韩高清在线观看| 久久精品99久久| 精品丝袜在线| 欧美精品一区二区在线观看| 国产精品国产精品88| 免费视频最近日韩| 欧洲精品码一区二区三区免费看| 国产极品人妖在线观看| 日韩午夜激情av| 少妇人妻丰满做爰xxx| 捆绑紧缚一区二区三区视频| 欧美日韩无遮挡| 色黄视频在线观看| 亚洲国产私拍精品国模在线观看| 欧美激情国产精品免费| 国产在线播放一区三区四| 自拍偷拍一区二区三区| 日韩精品一级毛片在线播放| 中文字幕精品视频| 亚洲综合久久网| 久久久激情视频| 欧美韩国日本在线| 亚洲免费福利一区| 欧美一级视频一区二区| 四虎影院在线域名免费观看| 五月婷婷色综合| 久久久久亚洲AV成人无码国产| 在线不卡亚洲| 韩国成人av| 日韩激情电影免费看| 亚洲欧美日韩网| 黄色一级视频免费看| 国产无人区一区二区三区| 999精品网站| 成人综合久久| 亚洲www在线观看| 视频在线这里都是精品| 精品国产凹凸成av人网站| 日韩欧美激情视频| 2024国产精品视频| 一区二区三区韩国| 99久久婷婷| 99porn视频在线| av中文字幕在线观看第一页| 亚洲欧美在线一区| 亚洲天堂999| 亚洲综合激情网| 少妇饥渴放荡91麻豆| 日韩精品一级中文字幕精品视频免费观看 | 欧美国产视频一区二区| 人妻少妇精品无码专区| 色悠久久久久综合欧美99| 欧美xxxx精品| 粉嫩嫩av羞羞动漫久久久| 无码人妻丰满熟妇区96| 欧美影院三区| 99高清视频有精品视频| 天堂在线中文网官网| 日韩视频在线一区| 亚洲老妇色熟女老太| 欧美性猛交xxxx乱大交3| 精品视频第一页| 成人午夜看片网址| 亚洲成色www.777999| 欧美/亚洲一区| 欧美精品一区在线| 亚洲欧洲一二区| 97av视频在线| 国产精品扒开做爽爽爽的视频| 欧美成人一区二区三区片免费 | 波多野结衣在线高清| 精品视频在线导航| 国产强被迫伦姧在线观看无码| 欧美日韩国产专区| 91麻豆精品成人一区二区| 91麻豆福利精品推荐| 国产性生活一级片| 男人的天堂亚洲在线| 91成人在线视频观看| 国产一区国产二区国产三区| 粉嫩av免费一区二区三区| 日韩成人影音| 69**夜色精品国产69乱| 很黄的网站在线观看| 一区二区三区视频在线| 欧美一级一区二区三区| 欧美蜜桃一区二区三区| 精品国产乱子伦| 欧美日韩免费看| 国产亚洲第一页| 亚洲三级小视频| 欧洲性xxxx| 久久久美女艺术照精彩视频福利播放| 女同性αv亚洲女同志| 久久草av在线| 国产精品99久久免费黑人人妻| 在线成人h网| 日本成人在线不卡| 国产精品久久久久久麻豆一区软件| 免费国产一区二区| 精品亚洲自拍| 国产91亚洲精品一区二区三区| 少妇精品视频在线观看| 国产精品久久久91| 欧美xnxx| 国产精品久久久久免费a∨大胸| 最新日韩精品| 国产91精品久久久久久久| 蜜臀av国内免费精品久久久夜夜| 欧美成人亚洲成人| 草莓福利社区在线| 久热精品视频在线观看| aaa大片在线观看| 欧美精品免费播放| av小次郎在线| 欧美精品一区二区三区国产精品 | 伊人夜夜躁av伊人久久| 91麻豆精品成人一区二区| 综合欧美亚洲日本| 影音先锋男人在线| 久久久久国产精品免费免费搜索| 亚洲精品综合在线观看| 狠狠色丁香九九婷婷综合五月| 日本a√在线观看| 麻豆成人av在线| 性chinese极品按摩| 视频一区二区中文字幕| 亚洲一区二区三区四区五区xx| 亚洲欧美视频| 国产美女三级视频| 日本人妖一区二区| 在线免费视频a| 男男视频亚洲欧美| 久久精品久久99| 国产精品一区二区在线播放 | 精品久久久久久久久久久院品网| 香蕉污视频在线观看| 欧美日韩色婷婷| 中文字幕亚洲乱码熟女1区2区| 一本大道久久精品懂色aⅴ| 精品欧美一区二区三区免费观看| 国产亚洲精品超碰| 久久精品欧美视频| 国产日韩成人内射视频| 欧美18hd| 久久国产日韩欧美精品| 日韩欧美精品| 国产欧美日韩综合精品一区二区| 成人黄动漫网站免费| 日韩天堂在线| 国产精品日韩专区| 欧美爱爱视频| 日韩成人网免费视频| 五月天色一区| 我要色综合中文字幕| 精品乱码一区| 福利电影一区| 亚洲 日韩 国产第一| 黑森林av导航| 日本精品一区二区三区在线观看视频| 欧美日韩激情小视频| 欧美日本国产精品| av大全在线免费看| 亚洲人永久免费| 黄色一级大片在线免费看产| 久久久久久久国产精品| 天堂√中文最新版在线| 国产精品国产三级国产aⅴ浪潮 | 久久免费国产视频| 69堂精品视频在线播放| 亚洲aa中文字幕| 粉嫩精品导航导航| 亚洲图色在线| 雨宫琴音一区二区在线| 五月婷婷之婷婷| 成人免费视频国产在线观看| 中文字幕一区二区三区人妻| 亚洲欧洲精品一区二区三区| 国产精品变态另类虐交| 欧洲生活片亚洲生活在线观看| 午夜精品久久久久久久91蜜桃| 精品福利一区二区三区免费视频| 神马久久久久| 色综合伊人色综合网| 免费看男女www网站入口在线| 国产精品视频播放| 亚洲欧洲av| 日韩国产成人无码av毛片| 奇米色一区二区| 中国毛片在线观看| 亚洲综合色噜噜狠狠| 在线观看免费观看在线| 亚洲欧洲成视频免费观看| 黄网av在线| 国产精品三级久久久久久电影| 色老板在线视频一区二区| 少妇精品久久久久久久久久| 国产精品v亚洲精品v日韩精品| 成人在线观看a| 北条麻妃一区二区三区| 日韩av手机在线免费观看| 欧美午夜免费电影| 日韩午夜影院| 久久久久久网站| 成人在线超碰| 波多野结衣激情| 日韩**一区毛片| 一级性生活大片| 性久久久久久久久| 亚洲老妇色熟女老太| 久久网福利资源网站| 日本一道高清亚洲日美韩| 日本一区二区三区视频在线观看| 国产精品毛片在线看| 男插女视频网站| 一区二区在线观看不卡| 国产精品无码白浆高潮| 久久资源免费视频| 只有精品亚洲| 好吊色这里只有精品| 狠狠色丁香久久婷婷综| 国产精品视频一区二区在线观看| 激情懂色av一区av二区av| 天堂а√在线8种子蜜桃视频 | av成人毛片| 欧美精品黑人猛交高潮| 亚洲地区一二三色| 国产91麻豆视频| 欧美一级大片在线观看| 欧美一级全黄| 97视频在线免费| 久久先锋影音av| 免费视频网站在线观看入口| 中文字幕一区二区精品| 国产精品蜜月aⅴ在线| 亚洲欧美日韩精品在线| 国产中文一区二区三区| 久久久久久久久久网站| 欧美精品一区二区三区蜜臀| av在线私库| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 国产一区二区三区精品欧美日韩一区二区三区 | 国产原创精品| 日韩中文字幕1| 懂色av粉嫩av浪潮av| 欧美一级黄色大片| xxxx视频在线| 欧美高清视频一区二区三区在线观看| 日本美女一区二区三区视频| 激情高潮到大叫狂喷水| 欧美日本在线播放| av不卡高清| 欧美在线视频二区| 国产东北露脸精品视频| 久久久久久久久久久久久久av| 亚洲另类xxxx| 国产精品3区| 免费看一级大黄情大片| 国产精品久久一卡二卡| 国产ts变态重口人妖hd| 欧美一区二区视频97| 久久亚洲国产| 中文字幕第九页| 欧美日韩免费不卡视频一区二区三区| 国产婷婷视频在线| 日本精品一区| 国产成人高清视频| 伊人365影院| 日韩最新免费不卡| 欧美性生活一级片| 午夜大片在线观看|