Lewati ke isi

Arsitektur

Arsitektur CID Router

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.boot dan hanya diubah lewat CLI (set → commit → save). File seperti /etc/vpp/startup.conf atau /etc/frr/frr.conf dibuat 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.