2015-05-21 12 views
12

Làm cách nào để bạn có được thông tin VLAN như thêm và xóa giao diện phụ VLAN từ hạt nhân sang không gian người dùng bằng cách sử dụng ổ cắm NETLINK trong C?Thông tin VLAN bằng cách sử dụng NETLINK

Tôi đã học rất ít trong NETLINK người đàn ông như được đề xuất trong nhận xét. Tôi đã thêm và xóa giao diện phụ VLAN và được giám sát bằng chương trình ổ cắm netlink. Để thêm &, mỗi lần nhận 3 tin nhắn. Bổ sung gửi 3 tin nhắn NEWLINK và xóa sẽ gửi 2 tin nhắn NEWLINK & 1 DELLINK. Tại sao vậy?

Đối với việc bổ sung các mới giao diện VLAN eth1.75:

RTM_NEWLINK Link eth2.75 Down 
RTM_NEWLINK Link eth2 Up 
RTM_NEWLINK Link eth2.75 Up 

Đối Xóa VLAN giao diện eth2.75:

RTM_NEWLINK Link eth2 Up 
RTM_NEWLINK Link eth2.75 Down 
RTM_DELLINK eth2.75 
+0

sửa lỗi ngữ pháp nhỏ. –

+2

Đọc các trang hướng dẫn sử dụng và quay trở lại khi bạn bị kẹt trong một câu hỏi cụ thể. Bắt đầu với 'man 7 netlink' và sau đó là' man 7 rtnetlink'. Tôi * nghĩ * bạn sẽ nhận được 'RTM_NEWLINK' để thêm và' RTM_DELINK' để xóa. Hãy tìm trong mã nguồn của [Trình quản lý mạng] (https://download.gnome.org/sources/NetworkManager/1.0/) để biết ví dụ. –

Trả lời

4

Trong khi tạo một socket netlink, nó tạo ra 3 thiết bị. Đây là lý do tại sao bạn nhận được 3 sự kiện. Đây là 3 thiết bị mà nó tạo ra trong khi sự kiện add.

  • Hệ thống phụ mạng.
  • Gửi hệ thống con Hàng đợi.
  • Đang nhận hệ thống con Hàng đợi.

net hệ thống phụ là thiết bị điều khiển cấp cao hơn. Hai số khác là queues để chuyển dữ liệu. Bạn có thể xác minh nó như dưới đây.

Khi tôi làm một udevadm monitor --env và tạo ra một vlan tôi nhận được các sự kiện sau đây từ hạt nhân:

UDEV [305215.045416] add  /devices/virtual/net/vpn0 (net) 
ACTION=add 
DEVPATH=/devices/virtual/net/vpn0 
ID_MM_CANDIDATE=1 
IFINDEX=10 
INTERFACE=vpn0 
SEQNUM=3665 
SUBSYSTEM=net 
USEC_INITIALIZED=5215023319 

UDEV [305215.046658] add  /devices/virtual/net/vpn0/queues/rx-0 (queues) 
ACTION=add 
DEVPATH=/devices/virtual/net/vpn0/queues/rx-0 
SEQNUM=3666 
SUBSYSTEM=queues 
USEC_INITIALIZED=15044665 

UDEV [305215.047628] add  /devices/virtual/net/vpn0/queues/tx-0 (queues) 
ACTION=add 
DEVPATH=/devices/virtual/net/vpn0/queues/tx-0 
SEQNUM=3667 
SUBSYSTEM=queues 
USEC_INITIALIZED=5215044729 
1

điệp RTM_NEWLINK được gửi cho tất cả các thay đổi trong trạng thái giao diện, thông thường là từ netdev_state_change (xem: http://lxr.free-electrons.com/source/net/core/dev.c#L1226).

Về cơ bản, hãy nghĩ về RTM_NEWLINK là "trạng thái thay đổi giao diện", thay vì chỉ là "giao diện mới được tạo".

Ví dụ, đối với việc bổ sung các giao diện VLAN bạn nhận được:

  1. Thông báo về việc một eth2.75 giao diện mới trong trạng thái XUỐNG
  2. Thông báo về tình trạng của giao diện vật lý eth2 cơ bản (nó bây giờ có một "subordinate" giao diện mà nó không có trước đây - ví dụ một số thẻ NIC có tải trọng HW để lọc các thẻ VLAN không mong muốn. Giao diện hiện có thể cần cập nhật NIC , v.v.). eth2 đang ở trạng thái LÊN và vẫn như vậy - nhưng trạng thái nội bộ của nó đã thay đổi.
  3. Thông báo rằng eth2.75 chuyển từ XUỐNG sang trạng thái LÊN.

Trong một thời trang tương tự cho xóa bạn thấy:

  1. Thông báo về việc thay đổi eth2 nhà nước (tách khỏi eth2.75 và VLAN)
  2. Thông báo về việc eth2.75 đi từ trên xuống dưới tiểu bang
  3. Thông báo xóa eth2.75 giao diện
Các vấn đề liên quan