1 poin oleh GN⁺ 2024-07-05 | 1 komentar | Bagikan ke WhatsApp
  • Untuk mereplikasi struktur seperti di dalam router konsumen, di mana chip switch dikendalikan langsung oleh Linux, penulis merancang PCB switch gigabit berbasis RTL8367S dan menghubungkannya ke DSA/switchdev
  • RTL8367S yang dipilih adalah chip switch gigabit 7 port dengan PHY terintegrasi pada 5 port; alih-alih port CPU khusus, port 0 dihubungkan ke Ethernet board Linux menggunakan kabel jaringan
  • Dalam proses pembuatan hardware, rail daya disederhanakan menjadi 3.3V dan 1.1V, lalu berbagai jalur konfigurasi seperti pin pengaturan boot, EEPROM, SPI flash, dan port serial diuji
  • Koneksi ke Linux memerlukan board PINE64 A64-lts, opsi kernel kustom, dan modifikasi Device Tree; setelah boot, lan1 hingga lan4 muncul di bawah eth0 seperti antarmuka jaringan lokal
  • Pendekatan ini cocok dengan alat yang sudah ada seperti Linux bridge dan ethtool, tetapi sulit langsung digunakan pada PC/server umum atau antarmuka jaringan USB karena batasan Device Tree dan GPIO

Switch Terkelola dan Struktur DSA Linux

  • Switch terkelola pada umumnya memungkinkan perubahan konfigurasi dan pemeriksaan status port melalui antarmuka web, sementara perangkat yang lebih mahal juga menyediakan antarmuka tambahan seperti telnet atau konsol serial
  • Switch di dalam router konsumen juga dapat dilihat sebagai kategori tersendiri dari switch terkelola
    • Router adalah perangkat Linux kecil yang memiliki chip switch di dalamnya
    • Satu atau lebih port terhubung secara internal ke CPU, sedangkan sisanya diekspos ke luar sebagai port fisik
  • Dengan menggunakan subsistem DSA dan switchdev di Linux, port yang terhubung ke switch dapat bertindak seperti port jaringan “lokal” sungguhan
  • Antara SoC router dan switch diperlukan koneksi seperti SGMII atau RGMII serta bus manajemen seperti SMI atau MDIO
  • Switch siap pakai biasa sulit dikendalikan dengan cara ini karena koneksi chip yang diperlukan tidak diekspos ke luar

Pembuatan Board Switch Berbasis RTL8367S

  • Switch gigabit buatan sendiri ini menggunakan chip Realtek RTL8367S
    • Ini adalah chip switch gigabit 5 port yang banyak digunakan
    • Secara internal strukturnya sebenarnya 7 port; 5 port memiliki PHY terintegrasi dan 2 port ditujukan untuk koneksi CPU
  • Datasheet hanya menyediakan informasi minimal, sehingga penulis juga merujuk skematik perangkat yang memakai chip Realtek serupa dan dokumen desain Ethernet
  • Awalnya tampak diperlukan sekitar 7 net daya, tetapi dengan menggabungkan net yang rentang tegangannya tumpang tindih, konfigurasi yang hanya memakai regulator 3.3V dan 1.1V ternyata memungkinkan
  • Karena Linux switchdev tidak mengharuskan koneksi CPU memakai port CPU khusus, desain ini menghubungkan port 0 ke board Linux menggunakan kabel
    • Dari sudut pandang driver switchdev, seolah-olah tidak ada Ethernet PHY di tengahnya

Konfigurasi Chip Switch dan Trial-and-Error PCB

  • RTL8367S memiliki beberapa jalur konfigurasi, tetapi hanya dari datasheet sulit memahami konfigurasi minimum agar berfungsi sebagai dumb switch biasa
    • 8 pin yang dibaca saat start dibagi pakai dengan pin LED port
    • Bus i2c dapat digunakan untuk menghubungkan chip EEPROM, tetapi berbagi pin dengan bus SMI yang diperlukan
    • Bus SPI dapat menghubungkan NOR flash untuk menyimpan register konfigurasi atau firmware inti 8051 bawaan
    • Port serial dinilai tidak akan berfungsi tanpa firmware 8051
  • Board pertama dipesan sendiri, lalu pendekatannya adalah mencari kondisi operasi dengan mengubah koneksi solder
    • Footprint chip flash dimasukkan, tetapi akhirnya tidak diperlukan
    • Solder jumper dipasang pada pin konfigurasi
    • LED dikecualikan karena sulit dibuat agar dapat dikonfigurasi
  • Dokumen desain Ethernet gigabit menekankan kontrol impedansi dan pencocokan panjang yang presisi, tetapi desain fisik switch murah tampaknya tidak seketat itu
  • Bagian yang dianggap lebih penting adalah pencocokan skew antar-pair jaringan
    • Mencocokkan panjang total keempat pair jaringan satu sama lain dinilai tidak berguna
    • Di dalam kabel jaringan pun rasio puntiran keempat pair berbeda, sehingga panjangnya memang sudah cukup berbeda
  • Pada revisi board awal, Ethernet tidak bekerja karena penanganan kapasitor untuk mereferensikan center tap transformator sisi switch ke ground keliru
    • Dalam pengujian, trace kecil dipotong untuk memutus short ke ground
    • Pada konfigurasi pengujian, sistem tetap bekerja meskipun center tap dibiarkan floating
    • Pada desain final, kapasitor tersebut ditambahkan

Switch Jadi dan Koneksi ke Linux

  • Board yang selesai dibuat adalah switch gigabit dengan bentuk yang agak tidak biasa
    • 4 port menghadap ke satu arah
    • 1 port menghadap ke arah berlawanan dan digunakan untuk koneksi ke board Linux
    • Daya disuplai melalui pin header 2.54mm
    • Footprint konektor USB Type-C juga ditambahkan agar daya dapat diberikan tanpa kabel DuPont
  • Board Linux untuk pengujian yang dipilih adalah PINE64 A64-lts
    • Posisi konektornya kurang lebih sesuai dengan tata letak yang diinginkan
    • Karena perubahan Device Tree diperlukan, platform non-x86 menjadi penting
  • Kernel dibangun ulang karena modul terkait switch biasanya tidak diaktifkan
    • CONFIG_NET_DSA: Distributed Switch Architecture
    • CONFIG_NET_DSA_TAG_RTL8_4: penandaan port untuk chip switch Realtek
    • CONFIG_NET_SWITCHDEV: sistem driver switch jaringan
    • CONFIG_NET_DSA_REALTEK, CONFIG_NET_DSA_REALTEK_SMI, CONFIG_NET_DSA_REALTEK_RTL8365MB: driver chip switch aktual
  • Alih-alih memuat Device Tree overlay melalui U-Boot, Device Tree board A64-lts dipatch langsung
    • Driver dimuat dengan string kompatibel realtek,rtl8365rb
    • Driver ini mendukung beberapa chip switch Realtek, termasuk RTL8367S yang digunakan
    • Definisi port CPU dari contoh dokumentasi dihapus, lalu 5 port switch biasa didefinisikan
  • port@0 adalah port yang menghadap ke belakang dan terhubung ke &emac milik A64-lts
    • Port lainnya terhubung ke masing-masing PHY di dalam chip switch
    • Di bagian atas Device Tree didefinisikan 3 GPIO yang terhubung ke SDA/SCL dan Reset

Alat Jaringan Linux dan Batasannya

  • Setelah boot, di Linux muncul antarmuka port switch yang didefinisikan di Device Tree bersama perangkat eth0 biasa
    • lan1@eth0
    • lan2@eth0
    • lan3@eth0
    • lan4@eth0
  • Agar benar-benar berjalan, ip link set eth0 up dan masing-masing antarmuka lan harus dinaikkan
  • Integrasinya dengan alat jaringan Linux standar terasa natural
    • Jika beberapa port lan dimasukkan ke Linux bridge, switchdev menangani bridging port tersebut di dalam chip switch
    • Linux tidak perlu mem-forward traffic tersebut secara langsung
    • Informasi link dapat dilihat dengan ethtool lan3
    • ethtool -S lan3 mengembalikan informasi status standar, termasuk paket yang sepenuhnya ditangani oleh switch
  • Namun ada banyak batasan untuk penggunaan di lingkungan umum
    • Harus membuat switch jaringan sendiri atau membuka switch yang ada untuk menemukan koneksi yang diperlukan
    • PC atau server umum bukan konfigurasi berbasis Device Tree, dan pin GPIO yang dikendalikan kernel biasanya juga tidak tersedia
    • Antarmuka jaringan USB sulit digunakan dengan metode ini karena tidak memiliki handle node Device Tree untuk ditetapkan sebagai port conduit
  • Sebagian batasan mungkin dapat diakali, tetapi dibutuhkan lebih banyak dokumentasi tentang cara mengekspos GPIO melalui perangkat USB khusus atau memuat switchdev di lingkungan selain perangkat ARM

1 komentar

 
GN⁺ 2024-07-05
Komentar Hacker News
  • Orang bisa saja melihatnya seperti, “switch jaringan itu perangkat sederhana yang hanya memasukkan dan mengeluarkan paket, untungnya orang-orang menemukan cara untuk membuatnya rumit lalu menciptakan managed switch,” tetapi switch mahal biasanya berisi ASIC yang cukup canggih
    Misalnya, sepasang switch Dell OS9 lama adalah perangkat stackable lawas dengan 48 port 10Gb/s dan 4 port optik QSFP+ 40Gb/s, dan satu switch dapat menangani hingga 1,28Tb/s
    Sekarang bisa didapat sekitar £1800 termasuk VAT dan bisa dipakai nyaris selamanya
    Upaya seperti ini bagus, tetapi perlu juga mempertimbangkan bahwa vendor seperti Netgear menjual switch 8-port 1Gb dengan PoE di semua port sekitar £125
    Dari sisi keekonomian proyek, jika waktu dihitung £20–50 per jam, produk jadi mungkin lebih masuk akal, tetapi jika tujuannya adalah proyek itu sendiri, harga tidak perlu terlalu dipikirkan
    (1) https://i.dell.com/sites/doccontent/shared-content/data-shee...
    (2) https://www.etb-tech.com/dell-force10-s4820t-10gbe-switch-os...
    • Saya pernah menangani switch ASIC Broadcom semacam ini; bukan kelas 40Gb, melainkan kira-kira 4x10Gbps + 24x1Gbps + PCIe untuk CPU
      Harga ASIC-nya masih di kisaran yang bisa diperkirakan, dan meski saya tidak tahu angka pastinya, mungkin sekitar beberapa ratus dolar
      Dokumentasi antarmuka perangkat lunaknya sangat buruk, dan karena pustakanya mendukung semua switch ASIC Broadcom, file .a berukuran ratusan MB itu penuh dengan fungsi yang hanya mengembalikan error “tidak didukung pada perangkat ini”; kita tidak bisa tahu sebelum benar-benar memanggilnya
  • Proyek yang menarik
    Untuk penggunaan yang lebih sederhana, Anda bisa mendapatkan router yang didukung OpenWRT dan kebanyakan memakai chip managed switch, lalu OpenWRT menyediakan antarmuka yang bagus untuk mengatur VLAN dan berbagai opsi
    • Sekarang OpenWRT juga bisa dipasang di beberapa switch, seperti seri Zyxel GS1900
      Namun dukungan untuk fitur seperti PoE atau port 10Gb/SFP+ bisa terbatas, dan saya tidak yakin kondisi saat ini
  • Pertama kali saya melihat penggunaan kreatif switch seri RTL83 adalah di https://spritesmods.com/?art=rtl8366sb, dan setelah itu ada juga contoh serupa
    Namun proyek ini lebih mendekati managed switch buatan sendiri yang saya lihat pertama kali, bukan sekadar “menempelkan otak eksternal pada unmanaged switch”
    • Benar, itu sprite_tm yang legendaris; saya pernah melihat tulisan itu saat menulis sendiri firmware Raspberry Pi untuk mengelola switch lewat USB
  • Saya penasaran apa kelebihannya dibanding menancapkan beberapa adapter gigabit ke mesin Linux lalu memasukkan semuanya ke bridge
    Saya menduga performa sisi hardware akan lebih baik, tetapi tidak tahu apakah ada pengujian yang menunjukkan perbedaan nyatanya
    • Perbedaannya kira-kira kombinasi throughput, latensi, konsumsi daya, dan fitur
      Jika memakai adapter USB, USB adalah bus bersama dalam banyak aspek sehingga cepat mentok di bandwidth maksimum, apalagi data harus masuk ke CPU lalu keluar lagi
      Switching secara software menambah waktu untuk memproses tiap paket dan mengirimkannya kembali ke tujuan yang benar, ditambah latensi dari antarmuka itu sendiri
      Setiap adapter memiliki PHY jaringan dan hardware sendiri sehingga konsumsi daya naik, dan jika digabung dengan pemrosesan tambahan, penggunaan dayanya makin besar
      Offloading hardware atau peningkatan performa lain juga kurang termanfaatkan, sehingga seluruh sistem lebih banyak terlibat dalam memindahkan paket
      Dari sisi fitur, ini bergantung pada hardware yang dipilih; beberapa adapter USB gigabit murah tidak menjalankan fitur seperti VLAN dengan benar
      Sebaliknya, jika memakai beberapa kartu PCIe, fiturnya bisa jauh lebih baik, tetapi mulai titik itu lebih mirip routing daripada switching
    • Jika sebagian besar trafik adalah switching, pendekatan ini lebih efisien; jika sebagian besar membutuhkan routing, beberapa adapter terpisah lebih efisien
    • Seperti jawaban lain, pendekatan ini kemungkinan besar memakai daya lebih rendah, dan latensi lewat switch juga seharusnya lebih rendah daripada bridge software
      Switching tetap bisa berjalan meski OS host mati, dan jika digabung dengan watchdog serta pemulihan, kita bisa membuat sistem dengan ketersediaan lebih baik daripada bridge software, walaupun beberapa fungsi sempat tidak tersedia
      Namun ini mengasumsikan chip switch itu sendiri tidak mati atau hang
      Tergantung tujuannya, jika ingin memeriksa semua trafik yang melewati switch, 4 antarmuka jelas lebih baik
      Jika switch berbasis host juga banyak berkomunikasi, 4 antarmuka menyediakan 4Gbps ke host, lebih menguntungkan daripada satu 1Gbps
      Kartu quad 1G enterprise bekas bisa dibeli di eBay di bawah $15, dan saya lebih suka Silicom quad bypass 1g PEG4BPI-SD
      Fitur bypass-nya menarik dan tidak umum sehingga lebih murah, tetapi umumnya setelah sekali disetel seperti “NIC standar”, kartu itu bisa dipasang di tempat lain tanpa masalah besar
      Produk awal lebih sulit dipakai karena vendor dan sub-vendor PCI ID terdeteksi sebagai Silicom, sedangkan kartu -SD memiliki Intel sebagai vendor ID dan Silicom sebagai sub-vendor, sehingga driver umum bisa menempel
      Port 4x10G punya lebih banyak hal untuk dikelola, dan tergantung sistem host, throughput software bridging mungkin tidak mencukupi
      Kartu 10G quad-port sulit didapat, tetapi 2x10G bisa ditemukan dengan harga masuk akal jika menunggu
    • Pada pendekatan itu, CPU masuk ke jalur data
      Switch melakukan packet switching di ASIC, bukan CPU, jadi hasilnya bergantung pada performa CPU, dan biasanya itu bukan cara yang efisien untuk memakai sumber daya komputasi yang ada
    • Untuk kecepatan serendah ini dan jumlah port yang sedikit, rangkaian switch hardware sebenarnya tidak mutlak diperlukan
      Namun jika mengabaikan usaha desain dan pembuatan, biaya hardware total bisa di bawah $100, dan kemungkinan lebih murah daripada komputer dengan beberapa antarmuka
      Meski begitu, jaringan 1Gb/s sudah cukup tua

Bahkan hanya dengan komponen siap pakai, kita bisa membuat switch jaringan terkelola yang lebih besar dan lebih cepat dengan biaya sedikit di atas $200
Misalnya, dengan Odroid H4+ yang memiliki 2 port dan kartu ekspansi M.2 yang menambahkan 4 port Ethernet, kita bisa membuat switch 6 port 2.5Gb/s
Cara lain adalah memakai komputer kecil dengan CPU N100 dan 4 port 2.5Gb/s, yang bisa dibeli dari beberapa produsen Tiongkok pada kisaran harga ini
Komputer kecil serupa dengan 6 port 2.5Gb/s sedikit lebih mahal dan bisa sedikit di atas $300

  • Saya penasaran apa kabar OpenFlow
    Sepertinya sangat cocok untuk perangkat seperti ini, tetapi saya kehilangan minat karena hampir mustahil menyiapkan lingkungan lab
    • Mungkin saja membuat klien OpenFlow yang memakai chip switch ini sebagai data plane, tetapi mungkin bukan pilihan terbaik karena sebagian besar fungsi yang ingin dipakai OpenFlow kemungkinan besar tidak bisa memanfaatkan hardware fast path yang relatif terbatas
    • OpenFlow adalah solusi yang agak keliru untuk masalahnya; solusi yang lebih tepat adalah switchdev atau SAI
    • Setahu saya, OpenFlow dibuat terlalu generik sehingga tidak terpetakan dengan baik ke hardware nyata, dan pada akhirnya banyak bagian abstraksinya yang bocor
  • Dari yang saya baca, saat membuat switch 10Gbps, produsen chip akselerator tidak mendukung driver terbuka, sehingga sangat sulit untuk tidak bergantung pada beberapa binary blob
    Jika switching dilakukan oleh CPU, bebannya besar, jadi menurut saya chip seperti itu memang diperlukan
    • Marvell 88E6393X berjalan dalam mode “sederhana/dikelola eksternal” tanpa firmware
      Bisa dipakai bersama Linux switchdev seperti perangkat dalam artikel ini
  • Saya penasaran apakah mendukung rSTP
    • Sepertinya tidak, dan tampaknya hanya STP biasa serta mungkin MSTP
  • Bukan bermaksud buruk, dan mungkin saya salah paham
    Diagram blok RouterBoard dipakai sebagai model untuk menunjukkan bagaimana switch hardware terhubung ke bagian lain sistem, tetapi kemudian tampaknya berargumen bahwa perangkat seperti itu mustahil atau sulit ditangani
    Saya penasaran apakah di sini pernah benar-benar mencoba mendapatkan RouterBoard
    OpenWRT mungkin bisa di-build untuk sebagian besar RouterBoard, dan 2011 juga kemungkinan cukup umum di pasar barang bekas
    Pertanyaan yang lebih baik adalah apakah tujuannya sejak awal memang membuat sendiri dari nol, atau apakah ada alasan tertentu untuk menyingkirkan gagasan memakai hardware orang lain
    • Saya punya beberapa perangkat seperti ini, dan perangkat itu sangat bagus untuk tujuan aslinya, tetapi tidak terlalu bagus untuk menjalankan software kustom
      Saya memakai diagram RB2011 karena menurut saya sederhana dan penjelasannya baik
      Secara teknis, RB1100AHx4 yang memakai chip switch yang sama adalah contoh yang lebih baik, tetapi itu justru lebih membingungkan karena memakai dua port CPU bersama-sama dan mengklaim 2 link 1.25Gbps sebagai link 2.5Gbps sambil mengabaikan overhead encoding
      Alasan membuat dari nol adalah biayanya masuk akal, dan perangkat ini harus masuk ke kotak perekaman video FOSDEM
      Ada beberapa masalah khusus desain itu yang harus diselesaikan: harus mengekspos 4 port jaringan di panel depan casing sekaligus tetap terhubung ke SBC internal
      Di dalam casing tidak banyak ruang untuk memasukkan passthrough sampai ke switch tanpa kabel loop eksternal untuk SBC, dan jika memakai switch sederhana, monitoring sistem juga tidak bisa dilakukan
      Karena kami membuat cukup banyak kotak seperti ini, ini menjadi solusi yang masuk akal; jika mengabaikan waktu desain, ini memungkinkan karena merupakan pekerjaan sukarela
    • RouterBoard RB2011 terikat pada rilis OpenWrt 19.07 yang lama: https://openwrt.org/toh/mikrotik/rb2011
      Masalahnya tampaknya ada kaitannya dengan NAND, dan seingat saya berbeda dari RouterBoard lain yang didukung
      Seseorang telah mengusulkan solusi baru untuk masalah ini, tetapi belum digabungkan: https://forum.openwrt.org/t/wiki-cleanup-for-mikrotik-rb2011... serta thread lainnya