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ôngpkg-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
,make
vàmake 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/
.
- Tải file
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
.
- Copy các binary vào thư mục
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
, netstat
và ipfw
. 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) và 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ớinodename
vàetheraddr
.-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.