Skip to content

About

A lab Spectrum Access System (SAS) for testing CBRS radios: WInnForum protocol and TLS profile, built-in PKI, wire log and fault injection, in one Docker container.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

SASBench

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.

CI WINNF-TS-0016 v1.2 WINNF-TS-0065 Docker Node.js 24 License: proprietary

Install · User guide · REST API · Radios · Development · Changelog


SASBench Overview page with a Nokia BBU registered: the SAS URLs, the CBSD rack with REG, GNT and HB LEDs and the transmit window, band occupancy, SAS state and the live wire feed

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.

Why SASBench

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.

Screenshots

CBSDs page
CBSDs. Every radio as one rack row, with live LEDs, transmit window, held spectrum and last link.
CBSD detail page
CBSD detail. Grants, exchanges, events and registration data, with operator overrides and actions such as Send 105.
Grants page
Grants. Every grant with its channel, EIRP, heartbeats and expiry. Suspend, edit or terminate any of them.
Spectrum page
Spectrum. The band plan with GAA, PAL, protections and grants, and the map of CBSDs and protection areas.
Wire log
Wire log. Every exchange with its response code, HTTP status, transport and timing. Open one for the exact JSON.
Events page
Events. The SAS’s own account of what happened: state changes, policy decisions, warnings and operator actions.
Certificates page
Certificates. Radio certificate kits from the built-in lab PKI, and step-by-step trust setup for Nokia AirScale BBUs.
Settings page
Settings. Profiles and live settings for listeners, TLS, protocol and policy, applied without a restart.

Quick start

On a Linux host with Docker:

git clone https://github.com/paulmataruso/SASBench.git
cd SASBench
docker compose up -d --build

Then 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.

REST API

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.

Documentation

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

Support

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.

License

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.

About

A lab Spectrum Access System (SAS) for testing CBRS radios: WInnForum protocol and TLS profile, built-in PKI, wire log and fault injection, in one Docker container.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages