Ingress flexibil
Recepționează UDP simplu prin IPv4 sau IPv6 și trafic UDPSEC autentificat și criptat. Payload-urile ingress care nu sunt șiruri sunt ignorate înainte de rutare și extragere.
Platformă de procesare și rutare a fluxurilor AIS
Normalizează · Deduplică · Etichetează · Rutează · Redirecționează
Recepționați fluxuri AIS, transformați traficul receptoarelor într-un singur flux logic controlat și livrați-l către destinațiile UDP egress care au nevoie de el.
Procesarea fluxurilor AIS
AISMixer reunește transportul, asamblarea NMEA, metadatele, deduplicarea și livrarea într-un singur traseu de procesare aproape în timp real.
Recepționează UDP simplu prin IPv4 sau IPv6 și trafic UDPSEC autentificat și criptat. Payload-urile ingress care nu sunt șiruri sunt ignorate înainte de rutare și extragere.
Extrage atât !AIVDM, cât și !AIVDO din ieșirile reale ale receptoarelor și aplicațiilor.
Asamblează mesajele multipart într-o ordine complet arbitrară. Un fragment duplicat exact este idempotent, iar conținutul diferit la un ordinal deja ocupat invalidează generația activă.
Suprimă mesajele AIS logice repetate global în modul broadcast sau separat pentru fiecare destinație în modul de rutare. Pentru multipart, decizia este atomică la nivelul grupului.
Gestionează determinist metadatele NMEA TAG s, c și g în limitele ciclului de viață, fără a confunda metadatele cu identitatea de rutare.
Pentru fiecare IngressEvent acceptat al cărui payload este un șir, folosește un singur snapshot imuabil de rutare și redirecționează fluxul logic către toate ieșirile configurate sau numai către destinațiile UDP egress selectate.
Comportament de referință verificat
Implementarea Python este referința testată pentru comportamentul AISMixer la limita de ingress, pe durata asamblării multipart și în timpul rutării.
Evenimentele cu payload de tip șir, inclusiv subclasele str, sunt procesate normal; payload-urile care nu sunt șiruri sunt ignorate înainte de rutare și extragere.
Fragmentele pot sosi în orice ordine. Duplicatele exacte sunt idempotente, conflictele invalidează generația activă, iar expirarea și finalizarea închid starea grupului.
Deduplicarea multipart este atomică la nivelul grupului, starea TAG s/c/g respectă ciclul de viață, iar fiecare eveniment acceptat folosește un singur snapshot imuabil de rutare.
Contractul complet fixează baza verificată pentru implementarea Python și pentru viitoarele verificări diferențiale ale unei implementări native. Citiți contractul comportamental.
Rutare și zone logice
Rutarea logică statică leagă surse ingress denumite de destinații UDP egress denumite, prin seturi de surse reutilizabile și rute ordonate.
Definiți zone cu include, union, intersection și difference.
Zonele sunt seturi de identități interne ale surselor, nu regiuni pe hartă, filtre MMSI, filtre pentru nave sau reguli aplicate payload-ului.
Modul de rutare aplică deduplicarea separat pentru fiecare target_id logic, astfel încât un traseu de livrare să nu suprime altul.
source_id este o identitate internă de rutare. Este separată de valoarea NMEA TAG s emisă în aval.
Controlul rutării la runtime
Un plan de control local opțional, printr-un socket din domeniul Unix, expune operații concise de rutare prin comanda aismixerctl instalată global.
Consultați generația activă, starea de activare, zonele logice, rutele ordonate și identitățile destinațiilor.
Validează candidatul complet înainte de a înlocui snapshot-ul imuabil de rutare sau de a reveni la modul legacy broadcast.
Verificările opționale ale generației împiedică operatorul să suprascrie neintenționat o modificare de rutare mai nouă.
În mod intenționat local și limitat la proces. Rutele modificate la runtime nu persistă după repornire, fișierele de configurare nu sunt rescrise, iar adaptoarele ingress sau egress nu sunt create dinamic. Permisiunile socketului Unix reprezintă limita actuală de autorizare; nu există un token de control la nivelul aplicației.
Controlul punctelor terminale de rețea
Controalele simple la nivelul aplicației facilitează integrarea punctelor terminale IPv4 și IPv6 în politica mai largă de firewall și rutare a operatorului.
Limitați listener-ele UDP și UDPSEC la adrese IP literale sau rețele CIDR, inclusiv printr-o regulă explicită de blocare totală.
Asociați un socket egress cu o adresă-sursă IPv4 sau IPv6 literală și limitați rezolvarea destinației la aceeași familie de adrese.
Aceste politici completează regulile de firewall și rutare ale sistemului de operare; nu le înlocuiesc.
source_ip reprezintă asocierea unei adrese-sursă, nu selectarea interfeței, a tabelei de rutare, marcarea socketului sau SDN.
nmea_sproxy și receptoare AIS fizice
nmea_sproxy este proxy-ul de la stație care conectează o singură sursă AIS locală la o singură destinație AISMixer configurată.
O intrare locală este asociată unei singure ieșiri configurate. nmea_sproxy nu mixează, nu distribuie către mai multe ieșiri, nu rutează, nu deduplică, nu asamblează AIS multipart și nu rescrie metadatele TAG.
Un receptor de rețea poate trimite UDP local către nmea_sproxy sau direct către AISMixer, în funcție de instalare. Procesul principal AISMixer nu citește direct porturi seriale. UDP-ul simplu de încredere nu oferă criptare UDPSEC, autentificare, protecție împotriva reluării sau protocol de verificare a activității.
Instalare și operare
Instalarea gestionată din depozit menține aliniate fișierele runtime, starea operatorului, integrarea systemd și controlul local al rutării.
Serviciul nativ creează /run/aismixer cât timp AISMixer rulează și acceptă socketul local opțional de control.
Scripturile pentru ciclul de viață gestionează rularea ca root sau prin sudo și întrețin fișierele runtime și unitățile de serviciu instalate.
Fluxurile normale de instalare, actualizare și dezinstalare păstrează configurația operatorului și cheile criptografice.
Fluxul de instalare plasează aismixerctl în /usr/local/bin pentru operații locale de rutare.
Documentație și starea proiectului
Wiki-ul este ghidul detaliat pentru arhitectură, configurare, rutare, securitate și operare. Roadmap-ul urmărește activitatea viitoare fără a promite termene.
Implementat acum
Planificat în continuare