VoIP Server¶
The GVA VoIP Server (gva-voip-server) is a SIP registrar and proxy server designed for
military vehicle communications. It manages user registration, call routing, and provides
centralised logging of call activity.
Overview¶
Features¶
SIP Registration¶
- User registration with configurable expiry
- Multiple registrations per user (forking)
- Registration state published to DDS
Call Routing¶
- Direct call routing between registered users
- Call forwarding support
- Busy/unavailable handling
Call Detail Records (CDR)¶
The server maintains detailed logs of all calls:
2026-04-13 16:30:45 | operator1 -> operator2 | CONNECTED | 00:05:23 | G.729
2026-04-13 16:36:08 | operator2 -> agent.ai | COMPLETED | 00:02:15 | MELPe
Quality of Service¶
- DSCP EF (46) marking for voice packets
- RTP packet prioritisation
- Jitter buffer recommendations
Command Line Options¶
gva-voip-server [options]
Options:
-h, --help Show help message
-v, --version Show version
-a, --address=<addr> Bind address (default: 0.0.0.0)
-p, --port=<port> SIP listen port (default: 5060)
-f, --groups-file=<path> Load conference groups from JSON file
-g, --group=<name> Add a conference group (repeatable)
-w, --wideband Use wideband codec profile (RFC 8817)
--vivoe Use VIVOE audio codec profile (DEF STAN 00-082 Part 2)
Examples¶
# Start server with groups file
gva-voip-server -f /etc/gva-voip-server/groups.json
# Custom address and individual groups
gva-voip-server --address=192.168.1.1 -g command -g alpha -g bravo
Configuration¶
Default Ports¶
| Service | Port | Protocol |
|---|---|---|
| SIP Signalling | 5060 | UDP/TCP |
| RTP Media | 10000-10100 | UDP |
Supported Codecs¶
The server supports codec negotiation via SDP offer/answer. Four codec profiles
are available, selectable via CLI (--vivoe, --wideband) or the
"codecProfile" field in voip-settings.json.
Profile: Tactical (default)¶
STANAG 4591 MELPe with NATO fallbacks. Suitable for classified narrowband links.
| RTP PT | Codec | Clock Rate | Standard |
|---|---|---|---|
| 96 | MELPe 2400 bps | 8000 | STANAG 4591 / RFC 8130 |
| 97 | MELPe 1200 bps | 8000 | STANAG 4591 |
| 98 | MELPe 600 bps | 8000 | STANAG 4591 |
| 18 | G.729D | 8000 | RFC 3551 |
| 8 | PCMA (G.711 A-law) | 8000 | RFC 3551 |
| 0 | PCMU (G.711 µ-law) | 8000 | RFC 3551 |
Profile: Tactical Wideband (--wideband)¶
TSVCIS wideband + narrowband fallback per RFC 8817.
| RTP PT | Codec | Clock Rate | Standard |
|---|---|---|---|
| 99 | TSVCIS WB 16000 bps | 16000 | RFC 8817 |
| 100 | TSVCIS WB 12000 bps | 16000 | RFC 8817 |
| 101 | TSVCIS WB 8000 bps | 16000 | RFC 8817 |
| 96 | TSVCIS NB 2400 bps | 8000 | RFC 8817 |
| 97 | TSVCIS NB 1200 bps | 8000 | RFC 8817 |
| 98 | TSVCIS NB 600 bps | 8000 | RFC 8817 |
| 8 | PCMA (G.711 A-law) | 8000 | RFC 3551 |
Profile: VIVOE (--vivoe) — DEF STAN 00-082 Part 2¶
Uncompressed PCM and G.711 encodings mandated by the VIVOE audio standard. Designed for high-fidelity in-vehicle audio distribution (intercoms, acoustic sensors, gunshot detection).
| RTP PT | Codec | Clock Rate | Channels | Spec Reference |
|---|---|---|---|---|
| 100 | L20 (20-bit PCM) | 192000 | 1 | Appendix B.4 / RFC 3190 |
| 10 | L16 (16-bit PCM) | 48000 | 2 (stereo) | Appendix B.3 / RFC 3551 |
| 99 | L16 (16-bit PCM) | 48000 | 1 (mono) | Appendix B.3 / RFC 4856 |
| 11 | L16 (16-bit PCM) | 44100 | 1 (mono) | RFC 3551 §4.5.11 |
| 102 | L16 (16-bit PCM) | 16000 | 1 (mono) | Appendix B.3 (wideband) |
| 103 | L16 (16-bit PCM) | 8000 | 1 (mono) | Appendix B.3 (narrowband) |
| 98 | L8 (8-bit PCM) | 8000 | 1 | Appendix B.2 / RFC 3551 |
| 8 | PCMA (G.711 A-law) | 8000 | 1 | Appendix C.2 / RFC 3551 |
| 0 | PCMU (G.711 µ-law) | 8000 | 1 | RFC 3551 (mandatory) |
SDP offers include a=ptime:5 and a=maxptime:10 per the DEF STAN examples.
Profile: Standard¶
Opus + G.711 for non-classified / commercial networks.
| RTP PT | Codec | Clock Rate | Standard |
|---|---|---|---|
| 111 | Opus fullband | 48000 | RFC 7587 |
| 110 | Opus wideband | 48000 | RFC 7587 |
| 109 | Opus narrowband | 48000 | RFC 7587 |
| 0 | PCMU (G.711 µ-law) | 8000 | RFC 3551 |
| 8 | PCMA (G.711 A-law) | 8000 | RFC 3551 |
DEF STAN 00-082 Part 2 Compliance¶
DEF STAN 00-082 Part 2 Issue 1 specifies the distribution and control of digital audio and acoustic data over VIVOE Ethernet networks. The table below summarises compliance status for each requirement area.
Audio Encoding — Compliance Matrix¶
| Requirement | Status | Notes |
|---|---|---|
| L8 — 8-bit PCM (Appendix B.2) | :material-check-circle:{ .success } Supported | PT 98, L8/8000, VIVOE profile |
| L16 — 16-bit PCM (Appendix B.3) | :material-check-circle:{ .success } Supported | PT 10/11/99/102/103, multiple rates |
| L20 — 20-bit PCM (Appendix B.4) | :material-check-circle:{ .success } Supported | PT 100, L20/192000, RFC 3190 |
| G.711 A-law (Appendix C.2) | :material-check-circle:{ .success } Supported | PT 8, PCMA/8000, all profiles |
| SDP codec negotiation (§11.5) | :material-check-circle:{ .success } Supported | Full SDP offer/answer per RFC 4566 |
| RTP payload headers (§10) | :material-check-circle:{ .success } Supported | RFC 3550 compliant |
a=ptime / a=maxptime (§B.2.2) |
:material-check-circle:{ .success } Supported | 5 ms / 10 ms defaults |
Infrastructure — Gap Analysis¶
The following DEF STAN 00-082 Part 2 infrastructure requirements are not yet implemented. These are transport and control-plane features that sit outside the SIP/RTP codec layer.
| Requirement | Status | Gap Description |
|---|---|---|
| SAP session announcements (§11) | :material-close-circle:{ .danger } Not implemented | The standard requires service providers to announce RTP sessions via SAP (RFC 2974) on multicast 224.2.127.254:9875. The VoIP server currently uses SIP signalling only. |
| SNMP / VIVOE MIB (§12) | :material-close-circle:{ .danger } Not implemented | Session control via SNMP with the VIVOE MIB (audioFormatInfo, channelControl modules) is not present. The server uses SIP for all session management. |
| Multicast RTP distribution (§8.2) | :material-close-circle:{ .danger } Not implemented | The standard mandates audio streams on predefined multicast addresses (239.192.x.x). The server uses unicast SIP/RTP relay. |
| RTP-to-RTP transcoding | :material-alert-circle:{ .warning } Partial | The RTP relay is codec-agnostic pass-through. L16→PCMU transcoding exists in TestCallService only. Cross-format bridging between VIVOE and tactical codecs is not available. |
Future: VIVOE Legacy Gateway
A dedicated VIVOE Gateway module is planned to bridge between the SIP-based VoIP server and legacy SAP/multicast VIVOE audio networks:
- SAP announcer/listener — Publish and discover audio sessions via SAP multicast announcements (RFC 2974), translating between SIP INVITE/BYE and SAP announce/delete messages.
- Multicast RTP bridge — Relay unicast RTP streams from SIP
endpoints onto VIVOE multicast groups (
239.192.x.x:5004) and vice versa, enabling interoperation with existing VIVOE-only equipment. - SNMP agent stub — Expose a minimal VIVOE MIB via SNMPv3 so legacy VIVOE management stations can discover and control audio channels on the server.
This will follow the existing Gateway plugin architecture as a loadable plugin alongside the Twilio gateway.
Example Usage¶
Starting the Server¶
# Basic startup
./build/bin/gva-voip-server --domain=0
# Production mode with CDR logging
./build/bin/gva-voip-server \
--domain=0 \
--dscp-ef \
--cdr-file=/var/log/gva/voip-cdr.log \
--headless
# VIVOE audio profile (DEF STAN 00-082 Part 2)
./build/bin/gva-voip-server --domain=0 --vivoe
Testing Registration¶
# Start server
./build/bin/gva-voip-server --domain=0 &
# Register clients
./build/bin/gva-voip-client --user=alice --server=127.0.0.1 &
./build/bin/gva-voip-client --user=bob --server=127.0.0.1 &
# Alice can now call [email protected]
Troubleshooting¶
Common Issues¶
Port already in use:
Another SIP server or instance is running. Either stop it or use a different port:
Registration timeout: Ensure firewall allows UDP traffic on ports 5060 and 10000-10100.
No audio: Check that RTP ports are not blocked and clients can reach each other directly.
See Also¶
- Gateways — Plugin architecture for external network routing
- Twilio Setup — Elastic SIP Trunk configuration guide
- VoIP Client (Standalone)
- VoIP Client (GVA)
- VoIP Agent
- HERMES Overview