Watch
1
0
Fork
You've already forked souveraine
0

sessiond: make home_ssids and bearer_settle settable

A policy field with no verb behind it is unreachable. set_policy takes both,
get_policy reports both, and a zero settling window is refused the same way a
zero lock-ack budget is - it is the event-speed controller by another name.
This commit is contained in:
Fimeg 2026-08-01 14:09:38 -04:00
commit f6479c98a1
2 changed files with 30 additions and 0 deletions

View file

@ -345,6 +345,17 @@ pub enum Request {
lock_ack_budget_secs: Option<u64>, lock_ack_budget_secs: Option<u64>,
/// Seconds; `Some(0)` means never blank an unlocked session here. /// Seconds; `Some(0)` means never blank an unlocked session here.
unlocked_blank_after_secs: Option<u64>, unlocked_blank_after_secs: Option<u64>,
/// The SSIDs that are the home LAN. Replaces the list wholesale;
/// `Some([])` means "never claim to be home", which is the safe
/// default rather than an erasure.
///
/// Identity, never a prefix. The gate this replaces tested
/// `inet 10.10.` and read a foreign `10.10.30.0/24` as home.
home_ssids: Option<Vec<String>>,
/// Seconds a changed bearer preference must hold before it is acted
/// on. Never 0: a window of zero is the event-speed controller that
/// recycled the tunnel 652 times.
bearer_settle_secs: Option<u64>,
}, },
} }

View file

@ -1177,6 +1177,8 @@ fn handle_request(
"lock_ack_budget_secs": p.lock_ack_budget.as_secs(), "lock_ack_budget_secs": p.lock_ack_budget.as_secs(),
"unlocked_blank_after_secs": "unlocked_blank_after_secs":
p.unlocked_blank_after.map(|v| v.as_secs()).unwrap_or(0), p.unlocked_blank_after.map(|v| v.as_secs()).unwrap_or(0),
"home_ssids": p.home_ssids,
"bearer_settle_secs": p.bearer_settle.as_secs(),
}) })
} }
Request::SetPolicy { Request::SetPolicy {
@ -1187,6 +1189,8 @@ fn handle_request(
dim_warning, dim_warning,
lock_ack_budget_secs, lock_ack_budget_secs,
unlocked_blank_after_secs, unlocked_blank_after_secs,
home_ssids,
bearer_settle_secs,
} => { } => {
// 0 means "never" — the desk-clock case, and iOS's Auto-Lock has // 0 means "never" — the desk-clock case, and iOS's Auto-Lock has
// the same option for the same reason. // the same option for the same reason.
@ -1226,6 +1230,21 @@ fn handle_request(
if let Some(v) = unlocked_blank_after_secs { if let Some(v) = unlocked_blank_after_secs {
p.unlocked_blank_after = as_budget(v); p.unlocked_blank_after = as_budget(v);
} }
if let Some(v) = home_ssids {
p.home_ssids = v;
}
// Zero is the event-speed controller this whole mechanism exists
// to not be. Refuse it the same way a zero ack budget is refused.
if let Some(v) = bearer_settle_secs {
if v == 0 {
drop(d);
return refuse(
RefusalCode::InvalidArgument,
"bearer_settle_secs must be at least 1",
);
}
p.bearer_settle = Duration::from_secs(v);
}
// A dim warning longer than the budget it warns about is not a // A dim warning longer than the budget it warns about is not a
// warning — `dim_at` saturates to zero and the panel dims the // warning — `dim_at` saturates to zero and the panel dims the
// instant it goes idle, with no lit period at all. Refuse rather // instant it goes idle, with no lit period at all. Refuse rather