3.2.1 Thiết kế Modul cho giao thức
3.2.1.3 Thiết kế lớp đối tượng[5]
Hình 3.14 Lớp đối tượng
1. Đối tượng Oid (Object Indentifier Class): Lớp nhận biết đối tượng Oid có chức năng phân tích và thực hiện những tương tác xử lý đối với cấu trúc thông tin quản lý SMI. Bao gồm:
Khởi tạo đối tượng từ 1 xâu chuỗi đầu vào (VD: 1.3.6.1.2.1.4.20) theo cấu trúc quy định của hệ thống bảng MIB.
Thực hiện các tương tác đối với các đối tượng Oid theo quy định của cấu trúc thông tin quản lý SMI. Như đã trình bày ở trên, cấu trúc thông tin quản lý SMI có những đặc thù riêng biệt, vì vậy việc tương tác giữa các kiểu cấu trúc này phục vụ quá trình phân tích và tính toán là cần thiết và là 1 phần trong nhiệm vụ của đối tượng Oid.
Thực hiện các chức năng tiện ích hỗ trợ việc phân tích cú pháp của đối tượng Oid.
2. Đối tượng Vb (Variable Binding): Thể hiện lớp đối tượng Object Value, danh sách trường Variable Binding trong giao thức SNMP được thể hiện như 1 mảng của những đối tượng Object
được. Như vậy Vb Object thể hiện đầy đủ 1 cấu trúc địa chỉ đi kèm với thông số giá trị của địa chỉ đó trên 1 thiết bị cụ thể. Bao gồm các thuộc tính và tương tác sau:
Thuộc tính:
Oid: Thuộc lớp Oid
Value: Con trỏ đối tượng Tương tác:
Vb() và ~Vb(): Khởi tạo và hủy lớp đối tượng
Các tương tác cập nhật giá trị thuộc tính
3. Đối tượng Pdu: Thể hiện lớp đối tượng PDU trong gói giao thức SNMP. Chịu trách nhiệm quản lý các thông số cấu hình phần PDU của giao thức SNMP trong quá trình tương tác yêu cầu và phúc đáp thông tin.
Thuộc tính:
Pdu_Type: Thể hiện trường PduType trong cấu trúc.
Request_ID: Thể hiện trường RequestID trong cấu trúc.
Error_Index: Thể hiện trường ErrorIndex trong cấu trúc.
Error_Status: Thể hiện trường ErrorStatus trong cấu trúc.
Vbs: Con trỏ trỏ tời địa chỉ của mảng Vb (Variable Binding)
Vb_Count: Số lượng đơn vị Variable Object trong mảng Vb.
Vbs_Size: Kích cỡ của mảng Vb.
Tương tác:
Pdu() và ~Pdu(): Khởi tạo và hủy lớp đối tượng
Các tương tác cập nhật giá trị thuộc tính
4. Đối tượng Udp: Thiết lập các thông số cho giao thức UDP chuẩn bị thực hiện quá trình gửi nhận dữ liệu. Bao gồm:
Thuộc tính:
IP: Địa chỉ IP của thiết bị tiếp nhận yêu cầu
Port: Thông số cổng gửi, nhận gói dữ liệu. Giao thức UDP sử dụng 2 cổng 161 và 162.
Tương tác:
Udp() và ~Udp(): Khởi tạo và hủy lớp đối tượng
Các tương tác cập nhật giá trị thuộc tính
5. Đối tượng Target: Thể hiện lớp đối tượng Header của giao thức SNMP. Chịu trách nhiệm quản lý các thông số cấu hình phần Header của giao thức SNMP trong quá trình tương tác yêu cầu và phúc đáp thông tin.
Thuộc tính:
Read_Community: Thiết lập tên cộng đồng cho giao tiếp đọc dữ liệu
Write_Community: Thiết lập tên cộng đồng cho giao tiếp ghi dữ liệu
TimeOut: Xác định khoảng thời gian ngừng thiết lập kết nối khi kết nối không thành công.
Retries: Xác định số lần thử thiết lập kết nối
Version: Xác định Version của giao thức SNMP (version1 hoặc 2 hoặc 3)
UDP: Lớp đối tượng xác định địa chỉ theo giao thức UDP.
Tương tác:
Target() và ~Target(): Khởi tạo và hủy lớp đối tượng
Các tương tác cập nhật giá trị thuộc tính
6. Đối tượng Snmp: Đối tượng quản trị giao thức, thực hiện các tương tác dựa trên các lớp đối tượng PDU và Target để trao đổi thông tin giữa các thiết bị. Bao gồm các tương tác sau:
Thuộc tính:
PDU: Trường PDU trong cấu trúc giao thức SNMP thuộc lớp đối tượng PDU.
Target: Trường Header trong cấu trúc giao thức SNMP kèm theo cấu trúc địa chỉ UDP thuộc lớp đối tượng Target.
Như vậy Cấu trúc của giao thức SNMP được kết hợp từ đối tượng PDU và phần Header thuộc đối tượng Target, phần UDP của đối tượng Target mang thông số địa chỉ phục vụ quá trình vận chuyển gói dữ liệu của giao thức UDP.
Tương tác:
Snmp() và ~Snmp(): Khởi tạo và hủy lớp đối tượng.
Invoke(): Hàm thực hiện chức năng chính trong việc gửi và nhận gói dữ liệu của giao thức SNMP. Với 2 đối tượng PDU và Target được thiết lập ở trên, hàm Invoke() sẽ sử dụng các thông số của 2 đối tượng này gắn trong 1 buffer kết hợp cùng hàm socket SendTo(....) và RecvFrom(...) trong thư viện Winsock.h của NetFrameWork để thực hiện gửi và nhận gói tin theo giao thức UDP.
Get(): Thực hiện tương tác Get trong giao thức SNMP để nhận thông số cấu hình của địa chỉ thông tin kèm theo. Điều chỉnh trường PDU_Type trong đối tượng PDU (PDU_Type=Get), sau đó gọi hàm snmp_engine().
Get_Next(): Thực hiện tương tác Get_Next trong giao thức SNMP để nhận thông số cấu hình của địa chỉ thông tin kèm theo. Điều chỉnh trường PDU_Type trong đối tượng PDU (PDU_Type=Get_Next), sau đó gọi hàm snmp_engine().
Set(): Thực hiện tương tác Set trong giao thức SNMP để nhận thông số cấu hình của địa chỉ thông tin kèm theo. Điều chỉnh trường PDU_Type trong đối tượng PDU (PDU_Type=Set), sau đó gọi hàm snmp_engine().
Response(): Thực hiện tương tác Response trong giao thức SNMP để phúc đáp yêu cầu.
Điều chỉnh trường PDU_Type trong đối tượng PDU (PDU_Type=Response), sau đó gọi hàm snmp_engine().
Trap(): Thực hiện tương tác Trap trong giao thức SNMP để thông báo điều chỉnh đặc biệt cho thiết bị quản lý. Lệnh Trap trong chương trình này về bản chất không giống lệnh Trap thực tế khi thiết bị Agent muốn gửi thông báo đến thiết bị Manager, vì phương thức Trap với các vấn đề phân tích thông số khi thiết bị Manager nhận được dữ liệu là đặc thù theo từng thiết bị, nhà sản xuất đưa ra các quy định cho việc phân tích đó vì vậy chúng ta sẽ không nghiên cứu chức năng đó trong chương trình này. Lệnh Trap trong chương trình này hiện tại mang tính gửi thông tin thông báo của thiết bị Agent đến thiết bị Manager. Điều chỉnh trường PDU_Type trong đối tượng PDU (PDU_Type=Trap), sau đó gọi hàm snmp_engine().