Thursday, January 9, 2025

[F-Stack] Công cụ của F-Stack

-

1. Tổng quan.

Tài liệu này hướng dẫn cách biên dịch và cài đặt các công cụ (tools) của F-Stack, một framework cung cấp kiến trúc đa tiến trình (multi-process) với network stack độc lập cho từng tiến trình.

2. Tại sao phải dùng công cụ này thay cho công cụ có sẵn của hệ thống?

Các công cụ có sẵn của hệ thống thường giới hạn ở việc hiển thị thông tin do kernel quản lý, trong khi nhiều tiến trình hoặc hoạt động hiện đại không đi qua kernel mà sử dụng cơ chế bypass ở user space. Vì vậy, các công cụ mới được phát triển để giải quyết những hạn chế này.

3. Cài đặt và biên dịch.

  • Cập nhật pkg-config (nếu phiên bản < 0.28):
    Bạn cần tải và cài đặt thủ công pkg-config nếu phiên bản hiện tại không đủ yêu cầu:
    • Tải file .tar.gz từ trang chính thức.
    • Giải nén và biên dịch bằng lệnh ./configure, makemake install.
    • Thay thế file thực thi cũ bằng cách liên kết (ln -s) phiên bản mới vào /usr/bin/.

Cấu hình PKG_CONFIG_PATH.

Đảm bảo các thư viện cần thiết được tìm thấy:

export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib/pkgconfig

Biên dịch (make):
Chạy lệnh make để biên dịch toàn bộ mã nguồn.

Cài đặt (make install):

Hãy vào thư mục /data/f-stack/tools, bạn thấy các folder chứa các công cụ sẽ nhưng chúng chưa được build. Hệ thống sử dụng Makefile để build các thư mục con như ifconfig, traffic, arp, v.v.

shell> ls -l /data/f-stack/tools
total 100
-rw-r--r--  1 root root  1073 Dec  8 09:11 Makefile
-rw-r--r--  1 root root 13756 Dec  8 09:11 README.md
drwxr-xr-x  2 root root  4096 Dec  8 09:11 arp
drwxr-xr-x  3 root root  4096 Dec  8 09:11 compat
drwxr-xr-x  2 root root  4096 Dec  8 09:11 ifconfig
drwxr-xr-x  2 root root  4096 Dec  8 09:11 ipfw
drwxr-xr-x  2 root root  4096 Dec  8 09:11 knictl
-rw-r--r--  1 root root   792 Dec  8 09:11 lib.mk
drwxr-xr-x  2 root root  4096 Dec  8 09:11 libmemstat
drwxr-xr-x  2 root root  4096 Dec  8 09:11 libnetgraph
drwxr-xr-x  3 root root  4096 Dec  8 09:11 libutil
drwxr-xr-x 11 root root  4096 Dec  8 09:11 libxo
drwxr-xr-x  2 root root  4096 Dec  8 09:11 ndp
drwxr-xr-x  2 root root  4096 Dec  8 09:11 netstat
drwxr-xr-x  2 root root  4096 Dec  8 09:11 ngctl
-rw-r--r--  1 root root   265 Dec  8 09:11 opts.mk
-rw-r--r--  1 root root  1903 Dec  8 09:11 prog.mk
drwxr-xr-x  3 root root  4096 Dec  8 09:11 route
drwxr-xr-x  2 root root  4096 Dec  8 09:11 sbin
drwxr-xr-x  2 root root  4096 Dec  8 09:11 sysctl
drwxr-xr-x  2 root root  4096 Dec  8 09:11 top
drwxr-xr-x  2 root root  4096 Dec  8 09:11 traffic

Đây là ví dụ cấu trúc file và thư mục bộ source code của công cụ ifconfig.

shell> ls -l /data/f-stack/tools/ifconfig/
total 512
-rw-r--r-- 1 root root   2047 Dec  8 09:11 Makefile
-rw-r--r-- 1 root root    317 Dec  8 09:11 Makefile.depend
-rw-r--r-- 1 root root    173 Dec  8 09:11 Makefile.depend.options
-rw-r--r-- 1 root root   7111 Dec  8 09:11 af_inet.c
-rw-r--r-- 1 root root  16781 Dec  8 09:11 af_inet6.c
-rw-r--r-- 1 root root   6274 Dec  8 09:11 af_link.c
-rw-r--r-- 1 root root   5341 Dec  8 09:11 af_nd6.c
-rw-r--r-- 1 root root   6668 Dec  8 09:11 carp.c
-rw-r--r-- 1 root root  18842 Dec  8 09:11 ifbridge.c
-rw-r--r-- 1 root root   6413 Dec  8 09:11 ifclone.c
-rw-r--r-- 1 root root  97720 Dec  8 09:11 ifconfig.8
-rw-r--r-- 1 root root  44504 Dec  8 09:11 ifconfig.c
-rw-r--r-- 1 root root   5994 Dec  8 09:11 ifconfig.h
-rw-r--r-- 1 root root   3392 Dec  8 09:11 iffib.c
-rw-r--r-- 1 root root   3351 Dec  8 09:11 ifgif.c
-rw-r--r-- 1 root root   5074 Dec  8 09:11 ifgre.c
-rw-r--r-- 1 root root   5650 Dec  8 09:11 ifgroup.c
-rw-r--r-- 1 root root 158490 Dec  8 09:11 ifieee80211.c
-rw-r--r-- 1 root root   3053 Dec  8 09:11 ifipsec.c
-rw-r--r-- 1 root root   9467 Dec  8 09:11 iflagg.c
-rw-r--r-- 1 root root   3369 Dec  8 09:11 ifmac.c
-rw-r--r-- 1 root root  21556 Dec  8 09:11 ifmedia.c
-rw-r--r-- 1 root root   6926 Dec  8 09:11 ifpfsync.c
-rw-r--r-- 1 root root   9210 Dec  8 09:11 ifvlan.c
-rw-r--r-- 1 root root  16663 Dec  8 09:11 ifvxlan.c
-rw-r--r-- 1 root root   4516 Dec  8 09:11 sfp.c

Vì chúng chưa được build nên thư mục /usr/local/bin/f-stack/ cũng chưa được tạo.

shell> ls /usr/local/bin/f-stack/
ls: cannot access '/usr/local/bin/f-stack/': No such file or directory

Bạn có thể build tất cả các công cụ bằng lệnh make trong thư mục /data/f-stack/tools.

make

Hoặc chọn và build một công cụ cụ thể (Tùy chọn).

cd ifconfig
make

Sau khi build, kiểm tra xem các binary đã được tạo ra chưa. Ví dụ, trong thư mục ifconfig, bạn nên thấy một file binary (thường tên là ifconfig hoặc tương tự).

ls -l ifconfig/

Nếu bạn muốn cài đặt các công cụ sau khi build, sử dụng lệnh:

shell> make install
rm -rf /usr/local/bin/f-stack
cp -rf sbin/ /usr/local/bin/f-stack
ln -sf /usr/local/bin/f-stack/arp /usr/local/bin/ff_arp
ln -sf /usr/local/bin/f-stack/ndp /usr/local/bin/ff_ndp
ln -sf /usr/local/bin/f-stack/ifconfig /usr/local/bin/ff_ifconfig
ln -sf /usr/local/bin/f-stack/ipfw /usr/local/bin/ff_ipfw
ln -sf /usr/local/bin/f-stack/netstat /usr/local/bin/ff_netstat
ln -sf /usr/local/bin/f-stack/ngctl /usr/local/bin/ff_ngctl
ln -sf /usr/local/bin/f-stack/route /usr/local/bin/ff_route
ln -sf /usr/local/bin/f-stack/sysctl /usr/local/bin/ff_sysctl
ln -sf /usr/local/bin/f-stack/top /usr/local/bin/ff_top
ln -sf /usr/local/bin/f-stack/traffic /usr/local/bin/ff_traffic
ln -sf /usr/local/bin/f-stack/knictl /usr/local/bin/ff_knictl
  • Điều này sẽ:
    • Copy các binary vào thư mục /usr/local/bin/f-stack.
    • Tạo các liên kết (symlink) tới thư mục chính, ví dụ: /usr/local/bin/ff_ifconfig.

Làm Sạch (Clean) Build

Nếu bạn gặp lỗi hoặc muốn làm sạch các file build cũ, chạy:

make clean

Điều này sẽ xóa các file tạm thời do quá trình build tạo ra.

Xác minh cài đặt.

Các công cụ sẽ được cài vào thư mục /usr/local/bin/f-stack/.

shell> ls -l /usr/local/bin/f-stack/
total 358000
-rwxr-xr-x 1 root root 33408792 Dec  9 04:03 arp
-rwxr-xr-x 1 root root 33377736 Dec  9 04:03 ifconfig
-rwxr-xr-x 1 root root 33514952 Dec  9 04:03 ipfw
-rwxr-xr-x 1 root root 33188112 Dec  9 04:03 knictl
-rwxr-xr-x 1 root root 33225968 Dec  9 04:03 ndp
-rwxr-xr-x 1 root root 33743048 Dec  9 04:03 netstat
-rwxr-xr-x 1 root root 33282904 Dec  9 04:03 ngctl
-rwxr-xr-x 1 root root 33227480 Dec  9 04:03 route
-rwxr-xr-x 1 root root 33215832 Dec  9 04:03 sysctl
-rwxr-xr-x 1 root root 33191904 Dec  9 04:03 top
-rwxr-xr-x 1 root root 33191952 Dec  9 04:03 traffic

Các lệnh như ff_top, ff_traffic sẽ có liên kết mềm trong /usr/local/bin/.

shell> ls -l /usr/local/bin/ | grep 'ff_top\|ff_traffic'
lrwxrwxrwx 1 root root       26 Dec  9 04:03 ff_top -> /usr/local/bin/f-stack/top
lrwxrwxrwx 1 root root       30 Dec  9 04:03 ff_traffic -> /usr/local/bin/f-stack/traffic

Ví dụ cách sử dụng

Nếu bạn sử dụng ifconfig như bình thường bạn sẽ chỉ thấy hiển thị các thông tin về interface do kernel quản lý.

shell> ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.237.7.78  netmask 255.255.255.0  broadcast 10.237.7.255
        inet6 fe80::250:56ff:fe80:d038  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:80:d0:38  txqueuelen 1000  (Ethernet)
        RX packets 444861  bytes 581785682 (581.7 MB)
        RX errors 0  dropped 121  overruns 0  frame 0
        TX packets 263095  bytes 20250992 (20.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 112788  bytes 9191117 (9.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 112788  bytes 9191117 (9.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Giờ bạn vào thư mục /usr/local/bin/f-stack/ bạn sẽ thấy công cụ ifconfig mà chúng ta đã build ở bước trên đã có sẵn trong đó. Hãy sử dụng nó bằng lệnh ./ifconfig bạn sẽ thấy được thông tin các interface do f-stack quản lý.

shell> cd /usr/local/bin/f-stack/
shell> ./ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1 prefixlen 64 scopeid 0x1
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
f-stack-0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 0:50:56:80:87:de
        inet 10.237.7.79 netmask 0xffffff00 broadcast 10.237.7.255
        inet6 fe80::250:56ff:fe80:87de prefixlen 64 scopeid 0x2
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

4. Các công cụ đi kèm.

F-Stack cung cấp các công cụ như sysctl, ifconfig, route, top, netstatipfw. Những công cụ này đều hỗ trợ giao tiếp với từng tiến trình của F-Stack thông qua tham số -p (xác định ID của tiến trình F-Stack).

sysctl.

  • Quản lý các thông số hệ thống cho từng tiến trình F-Stack.
  • Ví dụ:
sysctl -p <proc_id> -a       # Hiển thị toàn bộ tham số
sysctl -p <proc_id> name=value # Thay đổi giá trị tham số

ifconfig

  • Cấu hình mạng cho tiến trình F-Stack, bao gồm IPv6.
  • Ví dụ:
    Cấu hình IPv6 tự động:
ifconfig -p <proc_id> interface inet6 <ipv6_address> autoconf

route

  • Quản lý bảng định tuyến.
  • Ví dụ:

Thêm route mặc định:

./sbin/route -p 0 add default 192.168.1.1

Xóa route:

./sbin/route -p 0 delete -net 172.16.10.0/24 172.16.1.2

Hiển thị routing tables.

./sbin/route -p 0 -d -v flush

top

Giám sát hiệu suất CPU của từng tiến trình F-Stack.
Ví dụ:

./sbin/top -p 0 -P 3

Bảng hiển thị hiệu suất của từng tiến trình với thông số CPU nhàn rỗi (idle), hệ thống (sys), người dùng (usr) và vòng lặp (loop).

netstat

Hiển thị thông tin mạng, bao gồm kết nối hiện tại, interface và bảng định tuyến.

Ví dụ:

netstat -t <proc_id> -r # Hiển thị bảng định tuyến
netstat -t <proc_id> -i # Hiển thị trạng thái giao diện mạng

ipfw

  • Quản lý firewall.
  • Ví dụ:

Thêm firewall rule.

ipfw -P <proc_id> add allow ip from any to any

Xóa tất cả firewall rule:

ipfw -P <proc_id> flush

arp

  • Quản lý bảng ARP.
  • Ví dụ:
    • Hiển thị bảng ARP:
arp -p <proc_id> -a

Thêm địa chỉ ARP tĩnh:

arp -p <proc_id> -s hostname ether_addr

ngctl

Đây là công cụ để quản lý và tương tác với Netgraph, một hệ thống module-based trong FreeBSD, sử dụng cho cấu hình và giám sát các thành phần mạng. Trong F-Stack, nó được dùng để kiểm tra và quản lý các tiến trình, cấu hình các node mạng, kiểm tra trạng thái, hoặc thực hiện các thao tác cụ thể như thêm/xóa liên kết mạng.

Cách dùng:

ngctl -p <f-stack proc_id> [-d] [-f file] [-n name] [command ...]
  • -p <f-stack proc_id>: Chỉ định ID của tiến trình F-Stack.
  • -f file: Đọc các lệnh từ một file cấu hình.
  • -n name: Đặt tên hoặc tham chiếu node trong Netgraph.
  • Interactive mode: Nếu bật libedit, bạn có thể chỉnh sửa dòng lệnh hoặc sử dụng lịch sử lệnh, giúp thao tác thuận tiện hơn.

traffic

Đây là công cụ giám sát lưu lượng mạng trong F-Stack. Nó hiển thị số liệu thống kê về gói tin nhận được (rx)gửi đi (tx), giúp kiểm tra hiệu suất của các tiến trình mạng.

Cách dùng:

traffic [-p <f-stack proc_id>] [-P <max proc_id>] [-d <secs>] [-n <num>]
  • -p <f-stack proc_id>: Chỉ định tiến trình F-Stack mà bạn muốn theo dõi.
  • -P <max proc_id>: Giám sát một nhóm tiến trình, từ ID 0 đến <max proc_id>.
  • -d <secs>: Khoảng thời gian (tính bằng giây) giữa các lần hiển thị số liệu.
  • -n <num>: Số lần lặp (số chu kỳ hiển thị).

Ví dụ:

./sbin/traffic -p 0 -P 3

Hiển thị số liệu mạng từ 4 tiến trình F-Stack (proc_id từ 0 đến 3).

Kết quả: Bảng hiển thị:

  • rx packets: Số gói nhận được.
  • rx bytes: Tổng số byte nhận được.
  • tx packets: Số gói gửi đi.
  • tx bytes: Tổng số byte gửi đi.

Ứng dụng:

  • Phân tích lưu lượng dữ liệu trên các tiến trình.
  • Đánh giá hiệu suất ứng dụng sử dụng F-Stack.

ndp

Neighbor Discovery Protocol là công cụ quản lý các bảng thông tin liên quan đến Neighbor Cache (tương tự ARP trên IPv4) trong mạng IPv6. Trong F-Stack, nó được sử dụng để:

  • Kiểm tra thông tin về các node mạng lân cận.
  • Thêm, xóa hoặc sửa các mục trong Neighbor Cache.

Cách dùng:

ndp -C <f-stack proc_id> [-nt] [lệnh]
  • -C <f-stack proc_id>: Xác định tiến trình F-Stack.
  • -nt: Chế độ im lặng (silent mode).
  • Các lệnh:
    • hostname: Lấy thông tin của node mạng lân cận theo tên.
    • -a: Hiển thị tất cả các mục trong Neighbor Cache.
    • -c: Xóa toàn bộ bảng.
    • -s nodename etheraddr: Thêm mục mới với nodenameetheraddr.
    • -r: Làm mới cache.
    • -i interface: Quản lý theo interface mạng.

Ví dụ:

Thêm một node mạng:

ndp -C 0 -s node1 00:11:22:33:44:55

Hiển thị toàn bộ Neighbor Cache:

ndp -C 0 -a

Ứng dụng:

  • Quản lý bảng Neighbor Cache cho các tiến trình mạng sử dụng F-Stack.
  • Hỗ trợ khắc phục sự cố kết nối liên quan đến IPv6.

5. Lưu ý.

  • Các công cụ này phải được thực thi tuần tự (serially) để tránh lỗi khi giao tiếp với các tiến trình F-Stack.
  • Một số tính năng như cấu hình SFP/SFP+, LAGG hoặc WiFi không được hỗ trợ.

6. Ứng dụng

  • Các công cụ của F-Stack thường được sử dụng để tối ưu hóa hệ thống mạng với yêu cầu hiệu suất cao, chẳng hạn như trong các môi trường SDN/NFV hoặc các hệ thống mạng đa tiến trình.
  • Người dùng có thể linh hoạt cấu hình và giám sát từng tiến trình riêng lẻ, đảm bảo tính độc lập giữa các thành phần trong hệ thống.

Tham khảo https://github.com/F-Stack/f-stack/tree/dev/tools

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories