This guide explains how to safely stop CBSD operations and recover after reboot, network loss, or relocation, following WINNF-TS-0016.
Graceful shutdown prevents "ghost grants" (active grants without heartbeats) that waste spectrum and hurt approval rates. Recovery restores operation quickly without re-registering unnecessarily.
Key Bridge SAS Note: Don't worry if you cannot shutdown gracefully (e.g., sudden power loss or crash). Everything will be automatically cleaned up by the SAS — there is no harm or penalty when your radio comes back online. Just perform a normal bootstrapping procedure to get back on air.
Send RelinquishmentRequest for each grantId (can batch in array).
Example
{
"relinquishmentRequest": [
{ "cbsdId": "SAS123/CBSD-001", "grantId": "GRANT-789" },
{ "cbsdId": "SAS123/CBSD-001", "grantId": "GRANT-790" }
]
}
Success: responseCode 0 (or 501 if already terminated — safe to ignore)
{
"deregistrationRequest": [
{ "cbsdId": "SAS123/CBSD-001" }
]
}
Key Bridge SAS Optimization:
Tip: Prioritize deregistration in low-power scenarios — it ensures the cleanest state for fastest recovery.
Store to non-volatile memory:
cbsdId (most critical — enables skip registration)fccId, serialNumber, userIdinstallationParam (if unchanged)groupingParamLoad persisted data. Keep cbsdId — valid ~30-60 days post-deregistration.
Test TLS with health endpoint:
curl -v --cert cert.pem --key key.pem --cacert root.pem https://sas.cbrs.keybridgewireless.com/cbsd/api/v1.2/health
Quick Recovery Registration (same params):
{
"registrationRequest": [{
"cbsdId": "SAS123/CBSD-001", // Reuse!
"fccId": "ABC123",
"cbsdSerialNumber": "SN456789",
// ... same installationParam, groupingParam, measCapability
}]
}
Success: SAS recognizes → immediate spectrum inquiry
| Issue | Likely Cause | Solution |
|---|---|---|
| Recovery requires full registration | cbsdId expired or params changed | Update installationParam; persist accurately |
| "Ghost grants" warnings | Forgot relinquishment/deregistration | Always shutdown gracefully; monitor SAS portal |
| Slow recovery post-reboot | No state persistence | Implement JSON state file + auto-restore |
# Shutdown
def graceful_shutdown():
stop_rf()
if time_available():
for grant in active_grants:
relinquish(grant)
deregister() # Always send this
persist_state()
sys.exit(0)
# Recovery
def recovery():
state = load_state()
if health_check():
if state.cbsdId and params_unchanged():
spectrum_inquiry(state.cbsdId)
else:
register(state) # Returns new cbsdId
request_multi_grants() # Full band + upper 50 MHz
Pages