Hi, (side note - I might reply faster if you don't drop me from Cc, since then it goes to my inbox in addition to my list folder) > > I meant to pass the &monitor_sdata.vif pointer instead of the real > > monitor interface that's coming through cfg80211. The former is virtual > > and has no netdev, but the diver is aware of it. > > I'm not sure I get where to pass this to what. Do you mean in > drv_bss_info_changed or ieee80211_set_tx_power? Should be in ieee80211_set_tx_power, if the interface is you're getting in (dev/sdata) is MONITOR. You need to do the right locking (or may already have rtnl, check in nl80211.c) to get local->monitor_sdata, and then reject the call if that is NULL or pass it through with that sdata (or the vif from it) > Assuming you meant ieee80211_set_tx_power, then I'd have to check whether wdev > is a monitor interface and reject the configuration, if local->monitor_sdata > doesn't exist? Right. > But in ieee80211_set_tx_power no vif pointers get handed around, so I'm > confused. Sorry. You have a wdev, that's equivalent. See the "if (wdev)" clause that gets an sdata from the wdev, and then you have &sdata->vif as the vif. johannes