ef7217518b
This adds support to hostapd for configuring airtime policy settings for stations as they connect to the access point. This is the userspace component of the airtime policy enforcement system PoliFi described in this paper: https://arxiv.org/abs/1902.03439 The Linux kernel part has been merged into mac80211 for the 5.1 dev cycle. The configuration mechanism has three modes: Static, dynamic and limit. In static mode, weights can be set in the configuration file for individual MAC addresses, which will be applied when the configured stations connect. In dynamic mode, weights are instead set per BSS, which will be scaled by the number of active stations on that BSS, achieving the desired aggregate weighing between the configured BSSes. Limit mode works like dynamic mode, except that any BSS *not* marked as 'limited' is allowed to exceed its configured share if a per-station fairness share would assign more airtime to that BSS. See the paper for details on these modes. Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/*
|
|
* Airtime policy configuration
|
|
* Copyright (c) 2018-2019, Toke Høiland-Jørgensen <toke@toke.dk>
|
|
*
|
|
* This software may be distributed under the terms of the BSD license.
|
|
* See README for more details.
|
|
*/
|
|
|
|
#ifndef AIRTIME_POLICY_H
|
|
#define AIRTIME_POLICY_H
|
|
|
|
struct hostapd_iface;
|
|
|
|
#ifdef CONFIG_AIRTIME_POLICY
|
|
|
|
#define AIRTIME_DEFAULT_UPDATE_INTERVAL 200 /* ms */
|
|
#define AIRTIME_BACKLOG_EXPIRY_FACTOR 2500 /* 2.5 intervals + convert to usec */
|
|
|
|
/* scale quantum so this becomes the effective quantum after applying the max
|
|
* weight, but never go below min or above max */
|
|
#define AIRTIME_QUANTUM_MIN 8 /* usec */
|
|
#define AIRTIME_QUANTUM_MAX 256 /* usec */
|
|
#define AIRTIME_QUANTUM_TARGET 1024 /* usec */
|
|
|
|
int airtime_policy_new_sta(struct hostapd_data *hapd, struct sta_info *sta);
|
|
int airtime_policy_update_init(struct hostapd_iface *iface);
|
|
void airtime_policy_update_deinit(struct hostapd_iface *iface);
|
|
|
|
#else /* CONFIG_AIRTIME_POLICY */
|
|
|
|
static inline int airtime_policy_new_sta(struct hostapd_data *hapd,
|
|
struct sta_info *sta)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
static inline int airtime_policy_update_init(struct hostapd_iface *iface)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
static inline void airtime_policy_update_deinit(struct hostapd_iface *iface)
|
|
{
|
|
}
|
|
|
|
#endif /* CONFIG_AIRTIME_POLICY */
|
|
|
|
#endif /* AIRTIME_POLICY_H */
|