Báo cáo thực tập chuyên ngành

145 14 0
Báo cáo thực tập chuyên ngành

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Báo cáo thực tập chuyên ngành

OMNet++ Báo cáo th c tập chuyên ngành PH N I - T NG QUAN V OMNET++ .5 GI I THI U 1.1 OMNeT++ gì? 1.2 Các thành ph n c a OMNeT++ 1.3 ng d ng 1.4 Mơ hình OMNeT++ T NG QUAN 2.1 Khái ni m mơ hình hố 2.1.1 C u trúc phân c p c a module 2.1.2 Kiểu module 2.1.3 Message, c ng, liên k t 2.1.4 Mơ hình truy n gói tin .9 2.1.5 Tham s 10 2.1.6 Ph ng pháp mô t topology 10 2.2 Lập trình thuật toán .10 2.3 S d ng OMNeT++ 11 2.3.1 Xây d ng ch y th mơ hình mơ ph ng 11 2.3.2 H th ng file 12 NGÔN NG NED .14 3.1 T ng quan v NED 14 3.1.1 Các thành ph n c a ngôn ng mô t NED 14 3.1.2 Các từ khoá 14 3.1.3 Đặt tên 14 3.1.4 Chú thích 15 3.2 Các dẫn import 15 3.3 Khai báo kênh .15 3.4 Khai báo module đ n gi n 16 3.4.1 Các tham s c a module đ n gi n 16 3.4.2 Các c ng c a module đ n gi n 17 3.5 Khai báo module k t h p 18 3.5.1 Các tham s c ng c a module k t h p 19 3.5.2 Các module 19 3.5.3 Tham s tên kiểu module 20 3.5.4 Gán giá trị cho tham s c a module 22 3.5.5 Khai báo kích th c c a vector c ng c a module 23 3.5.6 Khai báo gatesizes tham s có u ki n 23 3.5.7 K t n i 24 3.6 Khai báo m ng 27 3.7 Các biểu th c 27 3.7.1 Hằng s 28 3.7.2 Tham chi u 28 3.7.3 Các toán t .29 3.7.4 Toán t sizeof() index .30 3.7.5 Toán t xmldoc() 30 3.7.6 XML XPath .31 3.7.7 Hàm 31 3.7.8 Giá trị ngẫu nhiên 32 3.7.9 Khai báo m t hàm m i 33 GI I THI U GNED 35 4.1 Giao di n .35 Trang OMNet++ Báo cáo th c tập chuyên ngành 4.2 M t s thao tác c b n 38 4.3 Làm vi c v i nhi u file NED - Các ch c chỉnh s a nâng cao .43 MODULE Đ N GI N 50 5.1 Module đ n gi n OMNeT++ 50 5.2 Các s ki n OMNeT++ 50 5.3 Mô hình hố ho t đ ng truy n gói tin 50 5.4 Khai báo kiểu module đ n gi n .51 5.4.1 T ng quan .51 5.4.2 Đăng ký kiểu module 52 5.5 Xây d ng hàm cho Module 52 5.5.1 Hàm handleMessage() 52 5.5.2 Hàm activity() 53 5.5.3 Hàm initialize() finish() 54 5.6 G i nhận message .54 5.6.1 G i message .54 5.6.2 Broadcasts .54 5.6.3 G i có đ tr (Delayed sending) .55 5.6.4 G i tr c ti p message .55 5.6.5 G i định kỳ .55 5.7 Truy nhập c ng k t n i .55 5.7.1 Đ i t ng c ng (gate object) 55 5.7.2 Các tham s k t n i .56 5.8 T đ ng t o module .56 MESSAGE 58 6.1 Message Packet 58 6.1.1 L p cMessage 58 6.1.2 Self-Message 59 6.1.3 Mơ hình hố gói tin 60 6.1.4 Đóng gói (Encapsulation) 62 6.1.5 Thêm đ i t ng tham s 63 6.2 Định nghĩa message 64 6.2.1 Gi i thi u .64 6.2.2 S d ng enum 66 6.2.3 Kh i t o cho m t message .66 6.2.4 Quan h k thừa h p thành .69 6.2.5 S d ng kiểu có sẵn c a C++ 71 6.2.6 Thay đ i file C++ 72 6.2.7 S d ng STL l p message .75 CH Y CÁC NG D NG OMNeT++ .78 7.1 S d ng gcc 79 7.2 S d ng Microsoft Visual C++ 79 MƠ HÌNH Đ N GI N - TICTOC 80 Ph n II – T NG QUAN V WLAN 86 GI I THI U 86 1.1 u điểm c a m ng LAN không dây 86 1.2 M t s ng d ng th c t c a WLAN t i Vi t Nam .88 1.2.1 ng d ng Wireless LAN Telemedicine 88 1.2.2 H th ng WiFi VNN .90 CÁC MƠ HÌNH M NG C B N 91 2.1 Mơ hình c s (Infrastructure network) .91 Trang OMNet++ Báo cáo th c tập chuyên ngành 2.1.1 Tập h p dịch v c b n (BSS - Basic Service Set) .92 2.1.2 Tập h p dịch v m r ng (ESS Extended Service Set) 92 2.2 Mô hình Adhoc đ c lập (Independent network) 96 HO T Đ NG C A CÁC CHU N LIÊN QUAN .97 3.1 Các băng t n ISM 97 3.1.1 Băng t n ISM (ISM bands) .97 3.1.2 Băng t n UNII (UNII bands) 98 3.2 Các chu n 802.11 (IEEE 802.11 family) .99 3.2.1 IEEE 802.11 99 3.2.2 IEEE 802.11b 99 3.2.3 IEEE 802.11a 99 3.2.4 IEEE 802.11g 99 3.2.5 M t s chu n khác h IEEE 802.11 100 MƠ HÌNH C U TRÚC C A M NG WLAN 103 4.1 T ng vật lý (PHY layer) .103 4.1.1 Các kỹ thuật tr i ph .104 4.1.2 C u trúc khung PLCP (General PLCP Frame Format) .108 4.1.3 PLCP d i ph dịch t n FHSS 109 4.1.4 PLCP cho DSSS HR/DSSS 109 4.1.5 PLCP OFDM .110 4.1.6 Th t c truy n PLCP 110 4.1.7 Th t c nhận PLCP .111 4.1.8 T ng PMD ( PMD sublayer) 112 4.2 T ng kiểm soát truy nhập đ ng truy n – MAC 113 4.2.1 DCF - Distributed Coordination Function 113 4.2.2 PCF – Point Coordination Function 116 4.2.3 Phân tích ho t đ ng c b n 116 4.3 T ng m ng giao th c dẫn đ ng WLAN 121 4.3.1 Các giao th c tìm đ ng m ng Ad-hoc 122 4.3.2 Các giao th c m r ng cho MANET 123 4.3.3 Mô t chi ti t giao th c AODV 125 PH N III – PHÂN TÍCH THI T K NG D NG MƠ PH NG M NG ADHOC 130 MƠ HÌNH CHUNG 130 C U TRÚC H TH NG 131 2.1 T ng vật lý (Physical model) .131 2.2 T ng u khiển truy nhập (Mac Layer) 131 2.3 T ng m ng (Routing model) 133 2.4 Mobility models 136 2.5 T ng ng d ng .137 2.6 Liên k t gi a t ng 138 2.7 Thi t lập thông s cho h mô ph ng 138 2.7.1 Thông s c a Map Hosts 138 2.7.2 Physical Layer .139 2.7.3 Mac Layer .139 2.7.4 Routing 139 2.7.5 Application 140 K T QU TH C HI N 141 3.1 Topo .141 3.2 G i gói tin Hello 142 Trang OMNet++ Báo cáo th c tập chuyên ngành 3.3 G i gói tin RREQ 142 Ph n IV - PH L C 143 SO SÁNH OMNET++ VÀ NS/2 .143 2.TÀI LI U THAM KH O 145 Trang OMNet++ Báo cáo th c tập chuyên ngành PH N I - T NG QUAN V OMNET++ GI I THI U 1.1 OMNeT++ gì? OMNeT++ vi t tắt c a c m từ Objective Modular Network Testbed in C++ OMNeT++ m t ng d ng cung c p cho ng i s d ng môi tr ng để ti n hành mô ph ng ho t đ ng c a m ng M c đích c a ng d ng mô ph ng ho t đ ng m ng thơng tin, nhiên tính ph cập linh ho t c a nó, OMNeT++ cịn đ c s d ng nhi u lĩnh v c khác nh mô ph ng h th ng thông tin ph c t p, m ng kiểu hàng đ i (queueing networks) hay ki n trúc ph n c ng OMNeT++ cung c p sẵn thành ph n t ng ng v i mơ hình th c t Các thành ph n (còn đ c g i module) đ c lập trình theo ngơn ng C++, sau đ c tập h p l i thành nh ng thành ph n hay nh ng mơ hình l n h n m t ngôn ng bậc cao (NED) OMNeT++ h tr giao di n đ ho , t ng ng v i mơ hình c u trúc c a đ ng th i ph n nhân mô ph ng (simulation kernel) module c a OMNeT++ r t d dàng nhúng vào ng d ng khác 1.2 Các thành ph n c a OMNeT++ • • • • • • • • • • 1.3 Th vi n ph n nhân mô ph ng (simulation kernel) Trình biên dịch cho ngơn ng mơ t hình tr ng (topology description language) - NED (nedc) Trình biên tập đ ho (graphical network editor) cho file NED (GNED) Giao di n đ ho th c hi n mô ph ng, liên k t bên file th c hi n mô ph ng (Tkenv) Giao di n dịng l nh th c hi n mơ ph ng (Cmdenv) Công c (giao di n đ ho ) v đ thị k t qu vector đ u (Plove) Công c (giao di n đ ho ) mô t k t qu vô h đ u (Scalars) ng Cơng c tài li u hố mơ hình Các ti n ích khác Các tài li u h ng dẫn, ví d mơ ph ng ng d ng OMNeT++ m t công c mô ph ng ho t đ ng m ng module đ c thi t k h ng đ i t ng OMNeT++ th ng đ c s d ng ng d ng ch y u nh : • Mơ hình ho t đ ng c a m ng thơng tin Trang OMNet++ • • • • • Báo cáo th c tập chuyên ngành Mơ hình giao th c Mơ hình hố m ng kiểu hàng đ i Mơ hình hố h th ng đa b vi x lý (multiprocesser) h th ng ph n c ng theo mơ hình phân tán khác (distributed hardware systems) Đánh giá ki n trúc ph n c ng Đánh giá hi u qu ho t đ ng c a h th ng ph c t p 1.4 Mơ hình OMNeT++ M t mơ hình OMNeT++ bao g m module l ng có c u trúc phân c p Đ sâu c a c a module l ng không gi i h n, u cho phép ng i s d ng biểu di n c u trúc logic c a h th ng th c t c u trúc mơ hình Các module trao đ i thông tin v i thông qua vi c g i message (message) Các message có c u trúc ph c t p tuỳ ý Các module g i message theo hai cách, m t g i tr c ti p t i địa nhận, hai g i theo m t đ ng dẫn đ c định sẵn, thông qua c ng k t n i Các module có tham s c a riêng Các tham s đ c s d ng để chỉnh s a thu c tính c a module để biểu di n cho topology c a mơ hình Các module m c th p nh t c u trúc phân c p đóng gói thu c tính Các module đ c coi module đ n gi n, chúng đ c lập trình ngơn ng C++ cách s d ng th vi n mô ph ng Trang OMNet++ Báo cáo th c tập chuyên ngành T NG QUAN 2.1 Khái ni m mơ hình hố OMNeT++ cung c p cho ng c a h th ng th c t i s d ng nh ng công c hi u qu để mô t c u trúc Các module l ng có c u trúc phân c p Các module đ i t ng c thể c a kiểu module Các module trao đ i thông tin message qua kênh Các tham s c a module linh ho t Ngôn ng mô t topology 2.1.1 Cấu trúc phân cấp c a module M t mơ hình OMNeT++ ch a module l ng có c u trúc phân c p, trao đ i thông tin v i cách g i message M i mơ hình th ng biểu di n cho m t h th ng m ng Module m c cao nh t c u trúc phân c p đ c g i module h th ng Module ch a module con, module ch a module c a riêng Đ sâu phân c p đ i v i module không gi i h n, u cho phép ng i s d ng d dàng biểu di n m t c u trúc logic c a m t h th ng th c t c u trúc phân c p c a OMNeT++ C u trúc c a mơ hình đ module h th ng c mô t ngôn ng NED c a OMNeT++ module đ n gi n module k t h p Hình I-2.1 - Các module đơn giản kết hợp Các module ch a nhi u module đ c g i module k t h p Các module đ n gi n module có c p th p nh t c u trúc phân c p Các module đ n gi n ch a thuật tốn c a mơ hình Ng i s d ng triển khai module đ n gi n ngôn ng C++, s d ng th vi n mô ph ng c a OMNeT++ 2.1.2 Kiểu module T t c module dù đ n gi n hay ph c t p đ u đ i t ng c thể c a kiểu module Trong mô t mơ hình, ng i s d ng định nghĩa kiểu Trang OMNet++ Báo cáo th c tập chuyên ngành module; đ i t ng c thể c a kiểu module đ c s d ng nh thành ph n c a kiểu module ph c t p h n Cu i cùng, ng i s d ng t o module h th ng nh m t đ i t ng c thể c a kiểu module đ c định nghĩa tr c đó, t t c module c a m ng đ u module (hoặc c a module con) c a module h th ng Khi m t kiểu module đ c s d ng nh m t kh i d ng sẵn (building block), s khơng thể phân bi t m t module đ n gi n hay ph c t p Đi u cho phép ng i s d ng tách module đ n gi n thành nhi u module đ n gi n đ c nhúng m t module k t h p, ng c l i tập h p ch c c a m t module k t h p m t module đ n gi n mà khơng nh h ng đ n kiểu module đ c ng i s d ng định nghĩa Kiểu module đ c l u tr m t file riêng r Đi u cho phép ng d ng nhóm kiểu module l i t o m t th vi n thành ph n is 2.1.3 Message, cổng, liên kết Các module trao đ i thông tin vi c g i message Trong th c t , message có d ng khung (frame) gói tin (packet) đ c truy n m ng Các message có c u trúc ph c t p tuỳ ý Các module đ n gi n g i message m t cách tr c ti p đ n vị trí nhận g i theo m t đ ng dẫn định sẵn thông qua c ng liên k t “Th i gian mô ph ng địa ph ng” (local simulation time) c a m t module tăng lên module nhận đ c m t message Message đ n từ m t module khác đ n từ m t module (message c a b n thân module - self-message đ c dùng để th c hi n b định th i) C ng (gate) giao ti p vào c a module Message đ đ c nhận vào thông qua c ng vào c g i qua c ng M i k t n i (connection) hay g i liên k t (link) đ c t o bên m t m c đ n c u trúc phân c p c a module: bên m t module k t h p, m t k t n i đ c t o gi a c ng t ng ng c a hai module con, gi a c ng c a module v i c ng c a module k t h p module cha S1 module cha S2 module k t n i v i S1 S2 module k t n i v i module cha Hình I-2.2 - Các kết nối T ng ng v i c u trúc phân c p c a m t mơ hình, message th ng di chuyển qua m t lo t k t n i v i điểm bắt đ u k t thúc module đ n gi n Tập k t n i từ m t module đ n gi n đ n m t module đ n gi n đ c g i route Các module k t h p ho t đ ng gi ng nh “cardboard box” mơ hình, “trong su t” vi c chuyển ti p message gi a thành ph n bên th gi i bên Trang OMNet++ Báo cáo th c tập chun ngành 2.1.4 Mơ hình truyền gói tin M t k t n i có ba tham s đặc tr ng Nh ng tham s r t thuận ti n cho mơ hình mơ ph ng m ng thông tin nh ng không h u d ng cho kiểu mơ hình khác Ba tham s bao g m: • • • Đ tr đ ng truy n (propagation delay) tính s - giây Tỉ s l i bit, đ c tính s l i/bit Tỉ s d li u, đ c tính s bit/s Các tham s tuỳ ch n Giá trị c a tham s khác k t n i, ph thu c vào kiểu c a liên k t (hay g i kiểu c a kênh truy n - channel type) Đ tr đ ng truy n t ng th i gian đ n c a message bị tr truy n qua kênh Tỉ s l i bit nh h ng đ n trình truy n message qua kênh Tỉ s xác su t bit bị truy n sai Do xác su t để m t message đ dài n bit truy n xác là: P(message g i đ c nhận xác) = (1 - ber)n ber tỉ s l i bit n s bit c a message Các message truy n đ u có m t c l i, c s đ message có l i c thi t lập vi c truy n Tỉ s d li u đ c tính theo đ n vị bit/s, đ c s d ng để tính th i gian để truy n m t gói tin Khi tỉ s đ c s d ng, q trình g i message mơ hình s t ng ng v i vi c truy n bit đ u tiên message đ c tính đ n n i sau bên nhận nhận đ c bit cu i A tA B tB Message g i truy n bị tr Đ tr đ ng truy n Message nhận đ c Hình I-2.3 - Truyền message Trang OMNet++ Báo cáo th c tập chuyên ngành 2.1.5 Tham số Các module tham s Các tham s đ NED file c u hình ompnetpp.ini c đặt giá trị file Các tham s đ c dùng để thay đ i thu c tính c a module đ n gi n dùng để biểu di n cho topology c a mô hình Các tham s có kiểu chu i, s h c, giá trị logic ch a d li u XML (XML data tree) Các bi n kiểu s biểu th c nhận giá trị từ tham s khác, g i hàm, s d ng bi n ngẫu nhiên từ ngu n phân tán nhận giá trị tr c ti p đ c nhập vào b i ng i s d ng Các tham s có kiểu s đ c dùng để c u hình topology r t d dàng Nằm module k t h p, tham s đ c dùng để s module con, s c ng giao ti p cách k t n i n i b đ c t o 2.1.6 Phương pháp mô tả topology Ng i s d ng dùng ngôn ng NED (Network Description) để mô t c u trúc c a mơ hình 2.2 Lập trình thuật tốn Các module đ n gi n ch a thuật tốn nh hàm c a C++ S linh ho t s c m nh c a C++, k t h p v i th vi n mô ph ng c a OMNeT++ t o u ki n d dàng cho ng i s d ng Các lập trình viên mơ ph ng ch n l a vi c mô t theo s ki n hay theo ti n trình, d dàng s d ng nh ng khái ni m c a lập trình h ng đ i t ng (nh đa hình, k thừa) thi t k mẫu th (pattern) để m r ng ch c c a q trình mơ ph ng Các đ i t ng mô ph ng (message, module, queue ) đ c thể hi n qua l p c a C++ M t s l p c b n th vi n mô ph ng c a OMNeT++: • • • • • Module, c ng, liên k t Các tham s Message Các l p Container (m ng, hàng đ i ) Các l p Data Collection Các l p đ c s d ng nh nh ng công c cho phép ng i s d ng t qua t t c đ i t ng ch y th mơ hình đ ng th i hiển thị thông tin v chúng nh tên c a đ i t ng, tên l p, bi n tr ng thái n i dung bên Đặc điểm cho phép t o mơ hình mơ ph ng có giao di n đ ho (GUI) v i ph n c u trúc bên đ c che Trang 10 OMNet++ Báo cáo th c tập chuyên ngành C U TRÚC H TH NG 2.1 T ng vật lý (Physical model) Để th c hi n ch c c a t ng vật lý m i nút m ng, ta ch y u quan tâm đ n vi c t o c ng phép trao đ i gói tin gi a nút m ng M i nút m ng di chuyển ti n l i đ g n (tùy thu c vào l ng truy n dẫn – transmission power) t i m t nút m ng lân cận, s x y ho t đ ng sau: T o m t c ng m i cho module k t h p - compound module (bao g m nút m ng) S d ng hàm: int Physic::addNewGate(cModule *mod, char* gname, char type) T o c ng m i physic module ch a mobile host module T o liên k t gi a c ng m i c a module đ n gi n (simple module) vừa đ t o c ng m i c a module k t h p c void Physic::setUpConn(char kind,int& a,int& b) T o liên k t gi a module c a nút m ng Đây lo i liên k t s d ng kênh “etere” Kênh đ c định nghĩa để mô ph ng môi tr ng truy n vô n, v i đ tr , tỉ l l i … Chi ti t tham s c ng c a m t module kiểu Physic nh sau: Mô ph ng ho t đ ng c a PHY hàm sau: • • • • void Physic::initialize() void Physic::handleMessage(cMessage* msg) void Physic::detectNeighbours() void Physic::updateConnections() 2.2 T ng u khiển truy nhập (Mac Layer) AdhocSim triển khai t ng MAC nh sau: Trang 131 OMNet++ Báo cáo th c tập chuyên ngành Giao th c đ c mơ ph ng CSMA/CA T ng u n truy nhập cho phép message g i nh ng đ i v i message nhận vào s kiểm tra tr ng thái c a t ng N u t ng bận message s đ c đặt b đ m Trong tr ng h p b đ m đ y message s bị h y b if(!buffer->empty()) { cMessage* m = buffer->pop(); send(m, "toRoute"); scheduleAt(elabTime() ,endService); } else { d("no messages waiting"); routerBusy = false; } else { if(buffer->canStore(msg->length())) { d("host busy, will put the msg in the buffer!"); buffer->insert(msg); } else { d("input buffer full!!! discarding pkts"); bufferFullDiscard++; delete msg; } } T ng MAC s kiểm tra địa MAC c a gói tin đ n Và cho qua gói tin địa MAC phù h p gói tin d ng broadcast if( ( (int)msg->par("mac") != parentModule()->id() ) && ( (int)msg->par("mac") != BROADCAST ) && ( ! promisqueMode) ) { d("message not for this node, discarding"); Trang 132 OMNet++ Báo cáo th c tập chuyên ngành delete msg; } else { //this node can handle the message d("got message from "empty()) ) { routerBusy = true; //this->takeOwnership(false) send(msg,"toRoute"); //this->takeOwnership(true); scheduleAt( elabTime(), endService); } 2.3 T ng m ng (Routing model) Mơ hình dẫn đ ng coi ph n tr ng tâm nh t mơ hình Adhoc kèm theo báo cáo H mô ph ng kèm báo cáo th c hi n đ c ch c sau t ng m ng • • • • Trao đ i gói tin HELLO gi a nút m ng lân cận Tìm ki m theo vòng m r ng (expanding ring search) Truy n t i gói tin báo nhận (ACK message) T o m t “black list” để tránh nút m ng không đáng tin cậy T c gi s m t nút X đ a nút lân cận Y black list, có nghĩa X g i gói tin RREQ m y l n t i Y, nh ng X không nhận đ c b t kỳ tín hi u ACK từ Y Khi đó, X s khơng ti p nhận b t kỳ gói tin RREQ từ Y n a Tuy nhiên x lý gói tin Hello từ Y T t c gói tin u khiển (Control message) c a AODV ng d ng đ u có đ dài 512 byte Trong gói tin d li u (Data message) có kích th c tùy theo tham s thi t lập t ng ng d ng D i danh sách tên lo i message đ c s d ng mơ hình minh h a HELLO Hello message RREQ Route Request message (gói tin u c u tìm đ ng) RREP Route Reply message (gói tin ph n h i tìm đ ng) RERR Route Error, ch a danh sách nút đích khơng t i đ c Trang 133 OMNet++ Báo cáo th c tập chuyên ngành DATA Data message RREP ACK RREP acknowledgment message (gói tin báo nhận RREP) DELETE Gói tin c a b n thân nút m ng (self message) để kích ho t trigger s ki n m t đ ng h t h n s d ng FLUSH Gói tin th c hi n RREP time out SEND HELLO Gói tin c a b n thân nút m ng (self message) để kích ho t nút m ng g i gói tin Hello BLK LIST Gói tin c a b n thân nút m ng (self message) để kích ho t s ki n rút m t nút m ng lân cận kh i “black list” M i lo i message đ u có tham s để trao đ i thông tin u khiển gi a nút m ng Ch ng trình mơ ph ng AdhocSim ch a h u h t tham s gói tin c a m t m ng Adhoc chu n Nh là: dest, seqNumS, seqNumD, Source, mac, ttl, hopNum … Mô t topo t ng m ng Q trình x lý lo i gói tin b ng switch(msg->kind()) { case SEND_HELLO: d("sendHello"); reply = generateHELLOmsg(); broadcast(reply); break; case DELETE: d("delete"); reply = handleDelete(msg); broadcast(reply); Trang 134 OMNet++ Báo cáo th c tập chuyên ngành break; case HELLO: d("hello"); handleHELLO(msg); delete msg; break; case FLUSH: d("flush"); reply = handleFlush(msg); broadcast(reply); break; case RREQ: d("rreq "

Ngày đăng: 06/02/2023, 10:48

Tài liệu cùng người dùng

Tài liệu liên quan