Passa al contenuto principale

Signaling Decisions — Decisioni consolidate v5.16

Stato: Decisioni architetturali signaling/media plane consolidate Owner: Ingegnere TLC Akira Data: 2026-05-13 Riferimento docx: capp. 14 (Kamailio), 15 (RTPengine), 16 (FreeSWITCH), 17 (Routing), 18 (Reliability), 22 (NOC TT)


1. Transcoding G.711 ↔ G.729

Decisione

  • FreeSWITCH B2BUA è l'unico componente abilitato al transcoding.
  • RTPengine opera in pass-through quando codec di A-leg e B-leg coincidono (caso target a regime).
  • NOC TT Quality Verifier (recording) richiede sempre G.711 a-law per semplicità debug → FreeSWITCH ricodifica al volo solo per il leg di recording se il flusso primario è G.729.

Razionale

  • RTPengine non ha transcoding nativo: integrazioni con ffmpeg/SBC libraries sono fragili e CPU-pesanti.
  • FreeSWITCH ha pipeline transcoding mature (G.711, G.729, G.722, Opus, AMR).
  • Centralizzare transcoding in FreeSWITCH semplifica capacity planning.

Capacity planning

  • 1 vCPU FreeSWITCH = ~10 transcoding channel sustained (G.729 ↔ G.711).
  • Target produzione 12.000 channel concorrenti transcoded:
    • 1.200 vCPU dedicati FreeSWITCH = CCX dedicated cluster (Hetzner CCX63 o equivalent baremetal).
    • Staging: solo per validation funzionale (max 50 ch concorrenti).
  • Monitoring: metrica freeswitch_transcoded_channels Prometheus, alert >70% capacity.

2. SRTP / TLS — Roadmap

Decisione MVP (v5.16)

  • Cleartext UDP 5060 (SIP) + RTP cleartext.
  • NO SRTP, NO SIPS/TLS in MVP.

Parking lot v2

  • SRTP/SDES (RFC 4568) e SIPS/TLS abilitati su peer-by-peer basis per carrier che lo richiedono. Lista nota di carrier con requirement:
    • UK BT Wholesale (SIPS richiesto su trunk premium)
    • Alcuni US Tier-1 (Verizon, Lumen — opzionale)
    • Alcuni regulator EU per traffico emergency
  • Implementazione: campo terminators.requires_tls + terminators.requires_srtp boolean; Kamailio + RTPengine config per-peer.

Razionale parking

  • 95% wholesale interconnect è ancora cleartext in 2026.
  • Aggiungere TLS in MVP raddoppia complessità ops (cert mgmt, renewal, cipher suite compat) senza valore immediato.
  • Decisione esplicita, documentata, NON un'omissione.

3. DSCP Marking

Traffic classDSCPDecimalInterface
RTP mediaEF46rtpengine outbound
SIP signalingAF3126kamailio outbound
Database/internalCS0 (default)0tutto il resto

Implementazione

  • roles/rtpengine/templates/rtpengine.conf.j2: tos = 184 (EF<<2 = 0xB8).
  • roles/kamailio/templates/kamailio.cfg.j2: setsflag(FLT_DSCP_AF31) + tos module.
  • Abilitato di default in tutti gli env (staging + prod).
  • Verifica via tcpdump -i <iface> 'ip and (ip[1] & 0xfc) >> 2 = 46'.

4. Topology Hiding

Decisione

  • Modulo topoh Kamailio ON di default.
  • Mask: header Via, Record-Route, From/To URI domain (where applicable).
  • Key encryption: AES-128, key da Ansible vault.

Razionale

  • Nasconde topologia interna (IP backend, hostname) a peer esterni.
  • Previene info leak verso terminator carrier (esp. con peer non-trusted).
  • Performance overhead trascurabile (~0.1ms per call setup).

Config in role

modparam("topoh", "mask_key", "<from-vault>")
modparam("topoh", "mask_ip", "<edge_public_ip>")
modparam("topoh", "mask_callid", 1)

5. PDD nel CDR (anticipato a MVP)

Decisione

  • Campo pdd_ms INT aggiunto allo schema cdr in MVP (era roadmap v2).
  • Default NULL se non disponibile.
  • Popolato da Kamailio acc extra: timestamp INVITE sent → timestamp first provisional ≥180 ringing OR final.

Schema diff

ALTER TABLE cdr ADD COLUMN pdd_ms INT;
CREATE INDEX idx_cdr_pdd_ms ON cdr (pdd_ms) WHERE pdd_ms IS NOT NULL;

Razionale

  • PDD è un singolo INT, costo storage trascurabile (4 byte * 10M cdr/giorno ≈ 40MB/giorno).
  • È metrica fondamentale per Quality Verifier (cap. 22).
  • Aggiungerlo dopo richiederebbe migration su tabella grande → costo operativo molto maggiore di farlo subito.

6. FAS — Definizione formale (v5.16)

Definizione adottata MVP

FAS (False Answer Supervision) = ricezione di 200 OK (CDR answered=true) seguita da BYE con duration_seconds < 8s.

Implementazione

  • Calcolo a CDR closure: is_fas = answered AND duration_seconds < 8.
  • Aggregazione FAS rate per terminator/route: fas_rate = COUNT(*) FILTER (is_fas) / NULLIF(COUNT(*) FILTER (answered), 0).
  • Soglia alert: FAS rate >5% sustained 15min su terminator → throttle + ticket.

Parking v2

  • Silence-based FAS detection: misura RTP energy nei primi 3s dopo 200 OK — se RTP è silenzio è FAS. Richiede integrazione RTPengine energy meter + sidecar analyzer. Non in MVP.

7. ASR — Window e qualificazione

  • Window: 15 minuti sliding (non tumbling).
  • Min samples: 20 chiamate completate prima di considerare la metrica valida (sotto soglia → asr = NULL, circuit breaker NON valuta).
  • Razionale: evita flap del circuit breaker su volumi piccoli (es. 2 falliti su 3 chiamate ≠ "terminator down").

8. OPTIONS Ping su Terminator

  • Frequenza: 30 secondi nominale.
  • Jitter: ±20% random per evitare thundering herd (tutti i Kamailio instance pinging allo stesso secondo).
  • Timeout: 5s; failure → terminator stato degraded; 3 failures consecutivi → down.
  • Recovery: 2 successi consecutivi → up.

Implementazione Kamailio

  • Modulo dispatcher con ds_ping_interval=30 e ds_ping_latency_stats=1.
  • Jitter aggiunto via ds_probing_threshold + delay random per dispatcher group via ds_ping_from rotation.

9. PDD Threshold default (cap. 18.7 v5.16)

Paramv5.15v5.16
pdd_threshold_default_ms8000 (8s)6000 (6s)

Razionale

  • 8s era allineato a operatori legacy ISDN.
  • In VoIP wholesale moderno, PDD >6s è già percepito come scadente.
  • 6s allinea Akira a target carrier-grade (es. AT&T SLA: PDD <5s p95).

10. Max Total Attempts (cap. 18.7 v5.16)

Paramv5.15v5.16
max_total_attempts54

Effetto sul ceiling

  • Worst case PDD totale = max_total_attempts * pdd_threshold = 4 * 6s = 24s.
  • Precedente: 5 * 8s = 40s (inaccettabile in produzione).
  • 24s è ancora alto ma è hard cap; nominal expected <10s.

11. Banda RTP staging Hetzner

Target staging (CCX23 / CCX33)

  • Sustained: 50-100 CPS, codec G.711.
  • Burst breve (≤2min): fino a 200 CPS.
  • NON adatto a benchmark sustained 200+ CPS:
    • Throughput RTP a 200 CPS sustained ≈ 200 * 87kbps * 2leg ≈ 35 Mbps — teoricamente ok ma con jitter/loss non garantito.
    • vCPU contention con altri workload condivisi su CCX.

Strategia benchmark Fase 2

  • Per benchmark sustained 200+ CPS / 1h: spot-rental CCX dedicated (CCX53 baremetal) per settimana benchmark.
  • Cost-effective (~€200/settimana vs commitment annual).
  • Documentato in roles/_benchmark/README.md (TBD v5.16).

12. Riepilogo numerico (cheat sheet)

ParamValore v5.16
PDD threshold default6s
Max total attempts4
Ceiling final response24s
ASR window15 min sliding
ASR min samples20
OPTIONS interval30s ±20% jitter
FAS duration cutoff<8s
FAS rate alert threshold5% sustained 15min
DSCP RTPEF (46)
DSCP SIPAF31 (26)
Transcoding capacity (vCPU/ch)1 vCPU ≈ 10 ch

13. Patch da applicare a docx v5.16

  • Cap. 14 (Kamailio): aggiungere paragrafo "Topology hiding" con config topoh modparam. Aggiungere paragrafo "OPTIONS ping" con jitter ±20%.
  • Cap. 15 (RTPengine): aggiungere paragrafo "DSCP marking" (EF su RTP). Specificare pass-through come modalità default; transcoding delegato a FreeSWITCH.
  • Cap. 16 (FreeSWITCH): aggiungere paragrafo "Transcoding capacity planning" con formula 1 vCPU ≈ 10 channel.
  • Cap. 17 (Routing): nessuna modifica.
  • Cap. 18 (Reliability):
    • 18.7: aggiornare tabella param default:
      • pdd_threshold_default_ms: 8000 → 6000.
      • max_total_attempts: 5 → 4.
    • Aggiungere paragrafo "ASR computation window" con sliding 15min + min samples 20.
  • Cap. 19 (CDR schema): aggiungere campo pdd_ms INT allo schema cdr. Index idx_cdr_pdd_ms.
  • Cap. 22 (NOC TT): aggiungere definizione formale FAS (200 OK + duration <8s). Notare parking lot silence-based.
  • Cap. 25 (Security): aggiungere paragrafo "TLS/SRTP parking lot v2" con lista carrier che richiederanno upgrade.
  • Cap. roadmap v2: aggiungere voci:
    • SRTP/SIPS per-peer.
    • Silence-based FAS detection.
    • SIP Digest SHA-256/SHA-512-256 (RFC 8760) per device che lo supportano.
  • Glossario: aggiungere voci PDD, FAS, DSCP, topology hiding, toll bypass (già da cap. 46).