XENOPT aplikacija za delo s SFP
XENOPT aplikacija za delo s SFP
SFP (Small Form-factor Pluggable) je kompakten hardverski modul, ki se uporablja v telekomunikacijah kot vmesnik med mrežno opremo in optično ali bakreno povezavo. SFP so dobavljivi z različnimi specifikacijami, predvsem preneseno količino podatkov in ciljno razdaljo. Lahko se menjajo med delovanjem in tako uporabnikom omogočajo hitro spremembo ali nadgradnjo mrežne infrastrukture. Čeprav so SFP mehansko in električno standardizirani, zaradi količine različnih tipov in dodatnih zaščit proizvajalcev, je ta sprememba zahtevna. Naredili smo aplikacijo, ki omogoča avtomatizirano nadgradnjo in spreminjanje parametrov.
SFP
SFP (Small Form-factor Pluggable) je kompakten hardverski modul, ki se uporablja v telekomunikacijah kot vmesnik med mrežno opremo (zlasti stikala, tudi usmerjevalniki ali mrežne kartice) in optično ali bakreno povezavo. Uporabniki zahtevajo čedalje višje prenosne hitrosti in temu sledi razvoj SFP modulov:
- SFP, 2001, do 1Gb/s
- QSFP, 2006, 4Gb/s
- SFP+, 2009, 10 Gb/s
- QSFP+, 2012, 40Gb/s
- SFP28, 2014, 25Gb/s
- QSFP28, 2014, 100Gb/s
- QSFP56, 2015, 200Gb/s
- QSFP-DD, 2016, 400Gb/s
- QSFP800, 2021, 800Gb/s
Največja razdalja je odvisna od vrste optičnega kabla, vrste modulacije in uporabljene frekvence. Enomodna optična vlakna imajo doseg med 500m in 3km, večmodna pa od 10km do 80km. Za doseg večjih razdalj, npr. podmorski kabel, je med posamezne dele kabla potrebno vgraditi repetitor.
a povečanje prenosne hitrosti je v uporabi večpasovnost (multilane), poslednji standard omogoča do osem pasov. Začetna črka Q v imenu modula pomeni štiripasovnost, za kar ima QSFP štiri dodatne pine na priključnem konektorju. Trenutni razvojni rezultat prenosni hitrosti je 1.84 petabitov na sekundo, kar je več prometa kot ga je trenutno na celotni internetni hrbtenici. Višja prenosna hitrost seveda pomeni tudi vse večjo porabo, pri sodobnih modulih preko 14W.
SFP so mehansko in električno standardizirani z MSA (Multi-Source Agreement) standardi, ki omogočajo izmenljivost med različnimi proizvajalci in s tem odprti trg. Vendar nekateri proizvajalci mrežne opreme, kjer se SFP priklopijo, z različnimi tehnikami poizkušajo vezati uporabo le njihovih modulov. Za ta namen uporabljajo zlasti specifične vsebine v stalnem pomnilniku in dodatna stikala ter zahtevane nastavitve programske opreme. Ob priklopu SFP na njihovo opremo, preverijo te nastavitve in zavrnejo modul, ki jim ne ustreza. Tu so ostali proizvajalci odgovorili s precejšnjo mero kreativnosti in omogočajo preprogramiranje SFP na tak način, da postane kompatibilen z originalom. Zaradi količine različnih modulov in metod doseganja kompatibilnosti, je ta postopek postal nepregleden in zahteven za končnega uporabnika. Naš cilj je avtomatizirati doseganje kompatibilnosti SFP, tudi na lokaciji končnega uporabnika in s tem pohitriti spremembo režima delovanja modula.

Nadzorna komunikacija z moduli poteka s preko I2C vodila. Prvi SFP so se pojavljali na dveh I2C naslovih (0xA0 in 0xA2). Vsaka enota na I2C vodilu lahko vsebuje do 256 zlogov in skupno 512 zlogov pomnilnika je kmalu postalo premalo. Sodobni SFP se zato na I2C pojavljajo z več stranmi (page). Spodnjih 128 zlogov, ki vsebuje najpomembnejše nastavitve in obvestila, je na vseh straneh enaka, vpis v zadnji zlog (na naslovu 127) pa izbere, katera stran je dosegljiva v zgornji polovici strani. Dostop tako poteka v dveh korakih, najprej izberemo stran z vpisom na lokacijo 127 in nato dosegamo na želeno stran. Ko tudi to ni zadostovalo, so proizvajalci dodali klopi (bank), ki se jih v okviru posamezne strani izbira na naslovu 126. I2C vodilo že samo po sebi ni preveč hitro, tak dostop do podatkov zadevo še dodatno upočasni.
Pomemben je CMIS (Common Management Interface Specification) MSA standard, ki pri modernejših SFP standardizira dostop do nadzornih funkcij , diagnostičnih funkcij in nastavitev. V njem je specificirana množica ukazov, ki se prenašajo preko 0x9f strani, večja količina parametrov pa preko 0xa0 strani. Cel prenos je polno zaščiten s CRC kodo.
Aplikacija XENOPT
XENOPT je spletna aplikacija namenjena pregledu in preprogamiranju SFP modulov, s ciljem spremembe parametrov in doseganja kompatibilnosti. Sestavljena je iz 3 delov:
- strežnik, tu se nahaja glavnina pameti aplikacije. Akcije, ki jih sproži klient se izvršujejo s pomočjo procesnega programa (skripte), ki ga spiše skrbnik aplikacije.
- klient je centralni del aplikacije, kajti tu sedi uporabnik, ki jo s pomočjo brkljalnika uporablja.
- flasher komunicira s SFP z uporabo I2C preko vmesnega USB modula. Obvlada le nekaj osnovnih funkcij: branje in vpis vsebine SFP ter branje meta podatkov.

Vsi trije deli aplikacije so med seboj IP povezani, torej so lahko fizično ločeni. Vendar je v praksi težko pridobiti naslov flasherja ali klienta, zato se ta del aplikacije tipično nahaja na uporabnikovem PC. Možna je tudi povezava flasher / strežnik, vendar trenutno ni potrebna.
Skratka, uporabnik v brkskalniku vpiše URL naslov spletne aplikacije. Po nalaganju spletnega dela se brkskalnik v ozadju poveže s strežnikom (po Websocket protokolu) in flasherjem. Ti dve povezavi in seveda tudi priključen programator uporabniku nato omogočajo izdajanje ukazov. Uporabnikov ukaz (pritisk na gumb na spletni strani) na strežniku sproži aktivacijo procesne skripte, ki komunicira s flasherjem (programatorjem) in prej ali slej izvrši zahtevano funkcijo (branje, vpis, preprogramiranje, pripravo datotek, itd). Končno procesna skripta rezultat izpiše na spletni strani.
Strežniški del
Strežnik implementira glavnino pameti spletne aplikacije in je pisan v Pythonu. Klientu se navzven kaže kot spletni strežnik, v ozadju pa ima proti njemu odprt Websocket vtič. Ukazi, ki jih sproži klient preko Websocket vtiča, se izvršujejo s pomočjo uporabniške skripte, ki jo spiše skrbnik aplikacije, rezultati pa se vrnejo preko istega vtiča.
V uporabniški skripti so na razpolago ukazi za procesiranje (EXEC, IF, NEXT, SUB, RET, NOP, SLEEP, NAMESPACE, IMPORT), za delo s klientom (FILL, STATUS, HEX, HEXEX, ALERT, CONFIRM, PROMPT) in delo s flasherjem (I2CREAD, I2CWRITE, I2CWRITEX, I2CTRACE). Skripta se interpretira v Python okolju, ki je lokalno in nima skupnih funkcij in spremenljivk s strežniškim Python okoljem. Pomemben je ukaz EXEC, ki dobesedno izvede Python kodo. Kot argument ima lahko tudi ime datoteke, ki kodo vsebuje. To omogoča izvedbo tudi programsko zahtevnejših opravil, npr. izračun CRC zaščitne kode.
Klient
Kot klient nastopa spletna aplikacija, ki jo krmili strežnik. Ko uporabnik uporabi kako kontrolo, klient o tem obvesti strežnik, ki informacijo obdela in klientu vrne navodilo, katere kontrole in kako se naj spremenijo. Tak pristop omogoča različen grafični vmesnik za različne tipe uporabe. Izdelana sta bila dva tipa vmesnika: proizvodnja in podpora imata svoj vmesnik, končni uporabnik pa drugega, enostavnejšega za uporabo.

Proizvodnja aplikacijo uporablja za posodobitev programske opreme SFP. Postopek je odvisen od proizvajalca SFP in v nekaterih primerih zaradi počasnosti I2C in izbire strani / klopi traja do dve uri.
V primeru nedelujočega oz. slabo delujočega SFP podpora poizkuša najti vzrok težave, tako da opazuje parametre med delovanjem.
Drugi tip uporabe je optimizacija kompatibilnosti SFP. Temu je namenjen poseben zavihek, ki je horizontalno razdeljen v dva enaka dela. Predhodno je potrebno na pasivno priključenem I2C vodilu posneti tok podatkov z originalnim SFP in drugega s problematičnim kompatibilnim SFP. Nato se prvi tok podatkov prečita v levi del, drugi v desni del. Vmesnik omogoča predvajanje I2C transakcij korak po korak in hkrati spremljanje nastavitve/spremembe obeh zapisov. Morebitne razlike se jasno označijo, kar omogoča hitrejšo diagnozo težave.

Druga vrsta uporabniškega vmesnika (klienta) je namenjena končnemu uporabniku. Zanj je postopek enostaven. Ko vtakne SFP v programer, flasher to zazna in o tem obvesti strežnik. Skripta na strežniku iz SFP prebere osnovne informacije in na podlagi tega uporabniku omogoči:
- če je modul poznan, se zgradi tabela možnih kompatibilnosti in ta v zavihku da uporabniku na izbor.
- če modul ni poznan, se odpre zavihek, kjer lahko uporabnik SFP klonira ali prepiše z vsebino datoteke.
- če ima uporabnik posebno zahtevo, ima v tretjem zavihku možnost to sporočiti podpori, ki bo zahtevo obdelala lokalno.
Vsi postopki, ki so bili opravljeni, se arhivirajo. V primeru, da kaka sprememba ne da želenih rezultatov, je tako vedno možno storiti korak nazaj.
Flasher
Komunikacija s SFP moduli poteka preko I2C vodila, ki ga osebni računalniki običajno ne podpirajo. Za priključitev se uporabljajo USB pretvorniki, ki računalniku omogoča I2C komunikacijo s pomočjo API, ki pa se od priozvajalca do proizvajalca razlikuje.
Program, ki smo ga poimenovali flasher, te razlike skrije. Na eni strani preko I2C vodila komunicira s SFP na drugi strani pa s strežniškim delom aplikacije, ki poteka na enak način, ne glede na tip priključenega USB pretvornika.
Flasher zazna priklop SFP vtiča v konektor pretvornika in samostojno odpošlje strežniku paket o dogodku z nekaj osnovnimi informacijami. Vso ostalo komunikacijo prične strežnik z minimalnim naborom ukazov: preveri, vpiši, poslušaj in nastavi SFP kontrolne linije.
Sklep
Razvili smo spletno aplikacijo XENOPT za delo s SFP telekomunikacijskim modulom. Sestavljen je iz treh programov, strežnika, klienta in flasherja, ki so med seboj IP povezani. Taka konfiguracija omogoča uporabo za različne namene. Izgled klienta je lahko prilagojen uporabi v proizvodnji, servisu ali končnemu uporabniku za prilagoditev kompatibilnosti. Flasher v dveh oblikah, odvisno od namena, podpira aktivno ali pasivno priključitev na I2C vodilo SFP modula. V prihodnosti nameravamo omogočiti zapis v podatkovno bazo za lažjo sledljivost in možnost servisiranja na CMIS nivoju.
Dodatne informacije:
- SFP standardi: https: https://www.snia.org/technology-communities/sff/specifications
- CMIS Common Management Interface Specification 5.0 standard: http://www.qsfp-dd.com/wp-content/uploads/2021/05/CMIS5p0.pdf
- Petabit na sekundo: https://www.nature.com/articles/s41566-022-01082-z