Skip to content

Instantly share code, notes, and snippets.

@bbaranoff
Last active April 8, 2026 18:24
Show Gist options
  • Select an option

  • Save bbaranoff/50e7cffe31cc0f0e8b2aad27678ec596 to your computer and use it in GitHub Desktop.

Select an option

Save bbaranoff/50e7cffe31cc0f0e8b2aad27678ec596 to your computer and use it in GitHub Desktop.

Oui. Pour GitHub, le plus simple est de le passer en Mermaid, parce que GitHub le rend nativement, contrairement à PlantUML.

Voici une version GitHub-friendly avec couleurs par phase :

%%{init: {
  "theme": "base",
  "themeVariables": {
    "background": "#0d1117",
    "primaryColor": "#1f2937",
    "primaryTextColor": "#e5e7eb",
    "primaryBorderColor": "#60a5fa",
    "lineColor": "#93c5fd",
    "secondaryColor": "#111827",
    "tertiaryColor": "#0f172a",
    "actorBkg": "#1e293b",
    "actorBorder": "#38bdf8",
    "actorTextColor": "#e5e7eb",
    "signalColor": "#cbd5e1",
    "signalTextColor": "#e5e7eb",
    "labelBoxBkgColor": "#111827",
    "labelBoxBorderColor": "#60a5fa",
    "labelTextColor": "#e5e7eb",
    "loopTextColor": "#fde68a",
    "noteBkgColor": "#1f2937",
    "noteBorderColor": "#f59e0b",
    "noteTextColor": "#fef3c7",
    "activationBorderColor": "#22c55e",
    "activationBkgColor": "#14532d",
    "sequenceNumberColor": "#94a3b8"
  }
}}%%

sequenceDiagram
    autonumber
    title Diagramme de Séquence Complet - Boucle Fermée GSM (IMSI, Authentification, Chiffrement, ACK)

    actor Utilisateur
    participant Virtuel as Stack Virtuelle<br/>(osmo-qemu / fake BTS)
    participant BTS as BTS<br/>(virtuelle)
    participant Air as Air<br/>(interface radio)
    participant MS as MS<br/>(Mobile Station)
    participant RTL as RTL-SDR<br/>(réception)
    participant Decodeur as Décodeur<br/>(gr-gsm / virtphy)

    rect rgb(20, 40, 80)
        Note over Utilisateur,Decodeur: PHASE 1 — Établissement du lien (Downlink)
        Utilisateur->>Virtuel: Démarre la stack
        Virtuel->>Virtuel: Active DLCI 5 (SDCCH)
        Virtuel->>BTS: Configuration canal SDCCH
        BTS->>BTS: Génère bursts DL (SYNC)
        BTS->>Air: Burst DL : CHANNEL REQUEST<br/>(tn, fn, bits)
        Air->>MS: Signal GMSK modulé
        MS->>MS: Démodulation GMSK
        MS->>MS: Détection burst
        MS->>MS: Extrait message
    end

    rect rgb(20, 70, 60)
        Note over Utilisateur,Decodeur: PHASE 2 — Réponse MS (Uplink)
        MS->>Air: Burst UL : IMMEDIATE ASSIGN REQUEST<br/>(contient TMSI ou IMSI)
        Air->>RTL: Signal capté
        RTL->>RTL: Échantillonnage IQ
        RTL->>Decodeur: Flux IQ
        Decodeur->>Decodeur: Démodulation GMSK
        Decodeur->>Decodeur: Extraction bits
        Decodeur->>Virtuel: Injection UL (virtphy)
        Virtuel->>Virtuel: Décode IMMEDIATE ASSIGN

        alt TMSI inconnu
            Virtuel->>BTS: Demande IMSI
            BTS->>Air: Burst DL : IDENTITY REQUEST<br/>(type = IMSI)
            Air->>MS: Signal
            MS->>MS: Traite IDENTITY REQUEST
            MS->>Air: Burst UL : IDENTITY RESPONSE<br/>(IMSI = 00101XXXXXXXXX)
            Air->>RTL: Signal
            RTL->>Decodeur: IQ
            Decodeur->>Virtuel: IMSI reçu
        end
    end

    rect rgb(80, 50, 20)
        Note over Utilisateur,Decodeur: PHASE 3 — Authentification GSM
        Virtuel->>Virtuel: Génère RAND (128 bits)
        Virtuel->>Virtuel: Calcule SRES avec Ki
        Virtuel->>BTS: AUTH REQUEST (RAND)
        BTS->>Air: Burst DL : AUTH REQUEST<br/>(RAND)
        Air->>MS: Signal
        MS->>MS: Calcule SRES avec sa Ki
        MS->>Air: Burst UL : AUTH RESPONSE<br/>(SRES)
        Air->>RTL: Signal
        RTL->>Decodeur: IQ
        Decodeur->>Virtuel: SRES reçu

        alt SRES = attendu
            Virtuel->>Virtuel: Authentification OK
            Virtuel->>BTS: AUTH PASS
        else SRES != attendu
            Virtuel->>Virtuel: Authentification FAIL
            Virtuel->>BTS: REJECT
            BTS->>Air: Burst DL : AUTH REJECT
            Note right of BTS: Fin de procédure
        end
    end

    rect rgb(70, 30, 80)
        Note over Utilisateur,Decodeur: PHASE 4 — Chiffrement (A5/x)
        Virtuel->>Virtuel: Active chiffrement A5/1
        Virtuel->>BTS: CIPHER MODE COMMAND
        BTS->>Air: Burst DL : CIPHER MODE COMMAND
        Air->>MS: Signal
        MS->>MS: Active chiffrement
        MS->>Air: Burst UL : CIPHER MODE COMPLETE<br/>(message chiffré)
        Air->>RTL: Signal
        RTL->>Decodeur: IQ
        Decodeur->>Decodeur: Déchiffre A5/1
        Decodeur->>Virtuel: CIPHER MODE COMPLETE
        Virtuel->>Virtuel: Vérifie chiffrement OK
    end

    rect rgb(50, 60, 20)
        Note over Utilisateur,Decodeur: PHASE 5 — Mise à jour de localisation (Location Update)
        Virtuel->>BTS: LOCATION UPDATE REQUEST
        BTS->>Air: Burst DL (chiffré) : LU REQUEST
        Air->>MS: Signal
        MS->>MS: Traite LU
        MS->>Air: Burst UL (chiffré) : LU ACCEPT
        Air->>RTL: Signal
        RTL->>Decodeur: IQ
        Decodeur->>Decodeur: Déchiffre
        Decodeur->>Virtuel: LU ACCEPT

        Virtuel->>Virtuel: TMSI réalloué
        Virtuel->>BTS: TMSI REALLOCATION
        BTS->>Air: TMSI REALLOCATION COMPLETE
        Air->>MS: Signal
        MS->>Air: Burst UL : TMSI ACK
        Air->>RTL: Signal
        RTL->>Decodeur: IQ
        Decodeur->>Virtuel: TMSI ACK
    end

    rect rgb(70, 20, 20)
        Note over Utilisateur,Decodeur: PHASE 6 — Établissement d'appel (si requis)
        Utilisateur->>Virtuel: Déclenche appel
        Virtuel->>BTS: SETUP
        BTS->>Air: Burst DL : SETUP<br/>(numéro appelé)
        Air->>MS: Signal
        MS->>MS: Affiche appel entrant
        MS->>Air: Burst UL : CALL CONFIRMED
        Air->>RTL: Signal
        RTL->>Decodeur: IQ
        Decodeur->>Virtuel: CALL CONFIRMED

        Virtuel->>BTS: ALERTING
        BTS->>Air: ALERTING
        Air->>MS: Signal
        MS->>MS: Sonnerie
        MS->>Air: CONNECT
        Air->>RTL: Signal
        RTL->>Decodeur: IQ
        Decodeur->>Virtuel: CONNECT

        Virtuel->>BTS: CONNECT ACK
        BTS->>Air: CONNECT ACK
        Air->>MS: Signal

        Note over Virtuel,Decodeur: APPEL ÉTABLI — COMMUNICATION ACTIVE
    end

    rect rgb(80, 80, 20)
        Note over Utilisateur,Decodeur: PHASE 7 — Gestion des ACK et boucle de réémission
        loop Chaque burst DL
            Virtuel->>BTS: Envoi burst DL #n
            BTS->>Air: Burst DL
            Air->>MS: Signal

            alt Burst reçu correctement
                MS->>Air: Burst UL : ACK (RR)
                Air->>RTL: Signal
                RTL->>Decodeur: IQ
                Decodeur->>Virtuel: ACK reçu
                Virtuel->>Virtuel: Passe burst #n+1
            else Burst non reçu
                MS-->>Air: (silence)
                Virtuel->>Virtuel: Timeout (200 ms)
                Virtuel->>BTS: Réémission burst #n
                BTS->>Air: Burst DL (réémission)
                Note right of BTS: max 4 réémissions
            end
        end
    end

    rect rgb(30, 30, 30)
        Note over Utilisateur,Decodeur: PHASE 8 — Finalisation
        Utilisateur->>Virtuel: Fin communication
        Virtuel->>BTS: DISCONNECT
        BTS->>Air: Burst DL : DISCONNECT
        Air->>MS: Signal
        MS->>Air: RELEASE
        Air->>RTL: Signal
        RTL->>Decodeur: IQ
        Decodeur->>Virtuel: RELEASE

        Virtuel->>BTS: RELEASE COMPLETE
        BTS->>Air: CHANNEL RELEASE
        Air->>MS: Signal
        MS->>MS: Libère canal

        Virtuel->>Virtuel: Retour en IDLE
        Virtuel-->>Utilisateur: Logs complets
    end

    Note over Virtuel,Decodeur: BOUCLE FERMÉE COMPLÈTE<br/>IMSI → Authentification → Chiffrement → Location Update<br/>→ Établissement appel → ACK → Réémission → Libération
Loading

Deux points utiles :

  • GitHub ne rend pas PlantUML nativement, donc Mermaid est le bon format.
  • Les couleurs par phase sont faites ici avec rect rgb(...).

Je peux aussi te faire une version plus propre visuellement et plus compacte, parce que celle-ci est fidèle mais assez massive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment