A lab Spectrum Access System for testing CBRS radios.
Register, grant and heartbeat real CBSDs on your bench, see exactly what the radio and the SAS say to each other,
and make the SAS answer the way your test needs.
Install · User guide · REST API · Radios · Development · Changelog
Important
SASBench is a test tool, not a certified SAS. It has no FCC or Wireless Innovation Forum certification and must not be used to authorize transmissions outside a controlled test environment.
Commercial SAS services give a lab little visibility and no control. Simple stubs answer "success" to everything. SASBench follows the WInnForum specifications, runs on your own network, and puts every decision in front of you.
- The real protocol. WINNF-TS-0016 v1.2: registration (including CPI-signed installation data and preloaded registrations), spectrum inquiry, grant, heartbeat, relinquishment and deregistration, with batched Domain Proxy requests.
- The WInnForum TLS profile. WINNF-TS-0065: TLS 1.2, the WInnForum cipher suites, RSA and ECDSA server certificates, mutual TLS, role and identity checks, and revocation.
- A PKI in the box. A root CA with SAS, CBSD, Domain Proxy and Installer CAs is created on first start. Radio certificate bundles come in every format firmware asks for: PEM, DER, PKCS#1, PKCS#8, PKCS#12 and legacy PKCS#12.
- See everything. The wire log keeps the full request and response JSON of every exchange, including failed TLS handshakes, live in the browser and exportable as NDJSON.
- Make the SAS misbehave on purpose. Suspend or terminate grants, change heartbeat intervals, send 105 deregistrations, or inject faults: rewritten response codes, HTTP errors, delays, dropped connections and malformed JSON.
- Incumbents and protection. NTIA E-DPA and P-DPA definitions, PPAs, FSS earth stations and exclusion zones, plus the Category A HAAT check from USGS terrain data.
- Ready for the WInnForum harness. Its admin API, a strict profile that matches its expectations, and a generated
sas.cfg. - A complete REST API. Everything the console does, every harness admin call and every stored record, over HTTP with read-only or read-write API keys and an OpenAPI 3.1 description, for test rigs and CI pipelines.
- User accounts. Sign-in for the console and the API, with admin, operator and viewer roles, managed on the Users page.
- Offline and self-contained. One Docker container, a SQLite database, a built-in basemap and offline map tiles. No cloud account.
Radios that register without location data, as many Category B units do, are handled explicitly: hold them for preloaded data, or register them anyway. The console includes step-by-step certificate instructions for Nokia AirScale BBUs.
Confirmed radios are listed in RADIOS.md: so far the Baicells Nova 430i, the Nokia AirScale AMIA + ASIA + AZQC, and the Sercomm SCE4255W and SCE5164-B48. Tested one that is not there? Add it with a pull request.
On a Linux host with Docker:
git clone https://github.com/paulmataruso/SASBench.git
cd SASBench
docker compose up -d --buildThen open the console at http://<host-ip>:8080, sign in as admin / admin and change the password (account menu → Your account). Point the radio at the SAS:
| Port | Purpose |
|---|---|
8080 |
Web console and REST API |
8443 |
SAS–CBSD protocol over HTTPS: https://<host>:8443/v1.2/ |
8000 |
SAS–CBSD protocol over plain HTTP: http://<host>:8000/v1.2/ |
The Overview page lists the exact URLs, and the Certificates page makes the radio's credentials. To set the name radios use (SAS_FQDN), the bind address, ports or the starting profile, copy .env.example to .env and edit it. INSTALL.md covers requirements, configuration, Docker Desktop, upgrades and backups.
Everything is scriptable through the REST API at http://<host>:8080/api/v1. Create an API key on the console's API keys page, then:
KEY=sasb_...
curl -s -H "Authorization: Bearer $KEY" http://<host>:8080/api/v1/cbsds | jq '.items[] | {cbsdId, state}'
curl -s -X POST http://<host>:8080/api/v1/faults -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
-d '{"method": "heartbeat", "action": "response_code", "responseCode": 501, "remaining": 1}'The API guide covers authentication and conventions, with recipes for every area. The API reference lists all 176 operations, each with a real example request and response. The running SAS serves its OpenAPI 3.1 description at /api/v1/openapi.json.
| Document | Covers |
|---|---|
| Install | Requirements, Docker Compose, configuration, firewall, upgrading, backup and restore, troubleshooting |
| User guide | The console, users and API keys, connecting radios, certificates, TLS, settings profiles, the registry, map, terrain, the WInnForum test harness, limitations |
| API guide | The REST API: authentication, users, API keys and scopes, conventions, and recipes for every area |
| API reference | Every endpoint, parameter and schema, each with a real curl example and response (generated from the code) |
| API architecture | How the API is built and secured, how it is tested, how to extend it |
| Development | Running from source, project layout, tests, third-party notices |
| Radio compatibility | Radios confirmed to work with SASBench, and how to add yours |
| Changelog | Release notes |
| Security | Reporting a vulnerability |
Bug reports and radio compatibility reports are welcome in GitHub Issues. Include the radio model and firmware, the SASBench version, and the relevant exchanges exported from the wire log.
SASBench is proprietary software, so code pull requests are not accepted. Pull requests that add a tested radio to RADIOS.md are welcome; see CONTRIBUTING.md.
Copyright © 2026 Paul Mataruso. All rights reserved. SASBench is proprietary software; see LICENSE. For an evaluation or commercial license, contact paulmataruso on GitHub.
SASBench includes open-source components under their own licenses, listed with their license texts in THIRD_PARTY_NOTICES.md.
CBRS is the Citizens Broadband Radio Service. Nokia and AirScale are trademarks of Nokia Corporation. SASBench is an independent product and is not affiliated with or endorsed by Nokia, the Wireless Innovation Forum or the FCC.








