wpa_supplicant: Reuse existing networks and preserve saved ones on connect
Connect() called AddNetwork unconditionally, creating duplicate entries for the same SSID, and SelectNetwork's side-effect of disabling all other networks was being persisted by SaveConfig — making previously saved networks appear erased. Disconnect() also removed the current network from the config. Now reuse an existing network entry when the SSID matches, re-enable other networks after SelectNetwork, and keep entries on disconnect. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
08cbe4f9ff
commit
77370eff19
3 changed files with 102 additions and 23 deletions
|
|
@ -107,6 +107,16 @@ func (i *WPAInterface) SelectNetwork(networkPath dbus.ObjectPath) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// EnableNetwork marks a network configuration as enabled (eligible for auto-connect)
|
||||
func (i *WPAInterface) EnableNetwork(networkPath dbus.ObjectPath) error {
|
||||
netObj := i.conn.Object(Service, networkPath)
|
||||
err := netObj.SetProperty(NetworkInterface+".Enabled", dbus.MakeVariant(true))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to enable network: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemoveNetwork removes a network configuration
|
||||
func (i *WPAInterface) RemoveNetwork(networkPath dbus.ObjectPath) error {
|
||||
err := i.obj.Call(InterfaceInterface+".RemoveNetwork", 0, networkPath).Err
|
||||
|
|
@ -116,6 +126,21 @@ func (i *WPAInterface) RemoveNetwork(networkPath dbus.ObjectPath) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// GetNetworks returns the object paths of all configured networks
|
||||
func (i *WPAInterface) GetNetworks() ([]dbus.ObjectPath, error) {
|
||||
prop, err := i.obj.GetProperty(InterfaceInterface + ".Networks")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get Networks property: %v", err)
|
||||
}
|
||||
|
||||
networks, ok := prop.Value().([]dbus.ObjectPath)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("Networks property is not an array of ObjectPath")
|
||||
}
|
||||
|
||||
return networks, nil
|
||||
}
|
||||
|
||||
// Disconnect disconnects from the current network
|
||||
func (i *WPAInterface) Disconnect() error {
|
||||
err := i.obj.Call(InterfaceInterface+".Disconnect", 0).Err
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue