Arsitektur¶
Tiga prinsip¶
- 1. VPP adalah data plane.
- Semua NIC dataplane (
eth1,eth2, …) dipegang VPP (Vector Packet Processing, fd.io) lewat DPDK. Paket pelanggan diproses VPP dalam vector (batch hingga 256 paket) di user-space, tanpa melewati kernel Linux. Hasilnya throughput jauh lebih tinggi dibanding forwarding kernel. - 2. Linux adalah control plane.
- Plugin linux-cp membuat interface cermin di Linux untuk setiap port VPP, dengan nama yang sama (
eth1,eth1.100,irb.20,lo0). Karena itu program Linux biasa tetap jalan: FRR (routing), SSH, ping, dan tcpdump. Plugin linux-nl mendengarkan netlink Linux dan menyalin alamat IP, route, dan neighbor ke VPP. - 3. Satu sumber kebenaran.
- Semua konfigurasi ada di
/config/config.bootdan hanya diubah lewat CLI (set→commit→save). File seperti/etc/vpp/startup.confatau/etc/frr/frr.confdibuat ulang otomatis, jadi jangan diedit manual.
Siapa mengerjakan apa¶
| Konfigurasi | Diterapkan lewat | Alasan |
|---|---|---|
interfaces X unit N family inet/inet6 address |
ip addr di interface cermin Linux |
linux-nl menyalinnya ke VPP, dan Linux ikut tahu alamatnya (untuk FRR, SSH, ping) |
interfaces X unit N vlan-id V |
vppctl create sub-interfaces … dot1q V exact-match + lcp create |
VPP 26.x tidak membuat VLAN dari sisi Linux. Port induk diset promiscuous supaya frame ber-tag diterima |
mtu, disable |
vppctl + ip link |
Port fisik dikontrol VPP, dan cermin Linux disamakan |
vlans <nama> + ethernet-switching |
vppctl create bridge-domain V + set interface l2 bridge … (trunk: sub-interface + l2 tag-rewrite pop 1) |
Switching antar-port dikerjakan VPP sepenuhnya |
interfaces irb unit N |
vppctl bvi create + BVI di bridge domain + lcp create → irb.N |
Gateway L3 VLAN; alamatnya disalin linux-nl seperti interface lain |
interfaces lo0 unit N |
vppctl create loopback + lcp create |
Loopback dibuat di VPP lalu dicerminkan sebagai lo0 |
protocols static route |
FRR staticd → kernel → linux-nl → FIB VPP |
Jalur yang sama nanti dipakai BGP dan OSPF |
nat masquerade interface X |
vppctl nat44 … (NAT44-ED, output-feature) |
NAT hanya ada di VPP |
system host-name / name-server / time-zone |
/etc/hostname, /etc/resolv.conf, timedatectl |
|
system login, root-authentication |
useradd, usermod, /etc/cidr/ssh-keys/<user> |
User router adalah akun Linux dengan shell CLI |
service ssh |
/etc/ssh/sshd_config.d/50-cidr.conf |
Komponen perangkat lunak¶
| Komponen | Versi (lab) | Peran |
|---|---|---|
| Debian | 12 (bookworm) | Sistem dasar |
| VPP + plugin core + DPDK | 26.10 | Data plane, NAT, linux-cp, linux-nl |
| DPDK | 26.07 | Driver NIC user-space (di dalam VPP) |
| FRRouting | 8.4 | Control plane routing |
| Python | 3.11 | CLI dan mesin konfigurasi (/usr/lib/cidr) |
Versi yang sedang berjalan bisa dilihat dengan show version.
Port management¶
Satu NIC tidak diserahkan ke VPP dan tetap di Linux. NIC ini dipakai untuk SSH dan akses ke router, sehingga router tetap bisa dijangkau walaupun konfigurasi dataplane sedang bermasalah.
Keterbatasan v0.1
Port management masih memakai tabel routing utama Linux. Kalau sebuah tujuan tidak punya route di dataplane, paket yang berasal dari router bisa keluar lewat default route management. Trafik pelanggan tidak terpengaruh. Isolasi dengan VRF management direncanakan di v0.2.
Kode program¶
| Modul | Fungsi |
|---|---|
cidr/schema.py, cidr/vtypes.py |
Skema konfigurasi: node, tipe nilai, validasi, teks bantuan |
cidr/configtree.py |
Parser/serializer config.boot, set/delete, diff, completion, display set |
cidr/validate.py |
Validasi lintas-node sebelum commit |
cidr/backend.py |
Mengubah diff menjadi aksi (vppctl, ip, FRR, file) dan menjalankannya |
cidr/store.py |
Running, saved, arsip; transaksi commit + rollback |
cidr/dataplane.py |
dataplane.conf, perencanaan core/buffer, startup.conf, persiapan NIC, pembagian koneksi |
cidr/auth.py |
User, password hash, SSH key, kelas login |
cidr/stats.py |
Statistik worker dan interface |
cidr/cli.py, cidr/version.py |
CLI interaktif, show version |
cidr/apply.py |
Penerapan saat boot (cidr-apply) |
Detail pengembangan ada di Pengembangan.