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_channelsPrometheus, 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_srtpboolean; 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 class | DSCP | Decimal | Interface |
|---|---|---|---|
| RTP media | EF | 46 | rtpengine outbound |
| SIP signaling | AF31 | 26 | kamailio outbound |
| Database/internal | CS0 (default) | 0 | tutto 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
topohKamailio ON di default. - Mask: header
Via,Record-Route,From/ToURI 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 INTaggiunto allo schemacdrin MVP (era roadmap v2). - Default NULL se non disponibile.
- Popolato da Kamailio
accextra: timestampINVITEsent → 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(CDRanswered=true) seguita daBYEconduration_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
dispatcherconds_ping_interval=30eds_ping_latency_stats=1. - Jitter aggiunto via
ds_probing_threshold+ delay random per dispatcher group viads_ping_fromrotation.
9. PDD Threshold default (cap. 18.7 v5.16)
| Param | v5.15 | v5.16 |
|---|---|---|
pdd_threshold_default_ms | 8000 (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)
| Param | v5.15 | v5.16 |
|---|---|---|
max_total_attempts | 5 | 4 |
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)
| Param | Valore v5.16 |
|---|---|
| PDD threshold default | 6s |
| Max total attempts | 4 |
| Ceiling final response | 24s |
| ASR window | 15 min sliding |
| ASR min samples | 20 |
| OPTIONS interval | 30s ±20% jitter |
| FAS duration cutoff | <8s |
| FAS rate alert threshold | 5% sustained 15min |
| DSCP RTP | EF (46) |
| DSCP SIP | AF31 (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
topohmodparam. 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.
- 18.7: aggiornare tabella param default:
- Cap. 19 (CDR schema): aggiungere campo
pdd_ms INTallo schema cdr. Indexidx_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).