<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
         PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Converted from Wiki Creole 1.0</title>
 </head>

 <body>
<p>Porting Sugar to the NetworkManager 0.9 API and enabling new
use cases (including connecting to networks with hidden SSIDs)
requires some design changes in both the Neighborhood and the
Frame. To get everyone on the same page, I will first give an
overview of the NetworkManager API and list the (new)
requirements. The suggested design changes and open questions will
be discussed in detail during the upcoming Design Team meeting.</p>

<h2>NM 0.9 API</h2>

<p>Types of objects:</p>

<ul>
    <li>Devices: Wired, Wireless, Modem, Bluetooth (DUN/PAN), OlpcMesh,
  WiMax</li>
    <li>Access Points (Wireless), NSPs (WiMax)</li>
    <li>Settings</li>
    <li>Active Connections</li>
    <li>VPN Connections</li>
    <li>VPN Plugins</li>
</ul>
<p>Activating a connection requires:</p>

<ul>
    <li>a connection (setting?)</li>
    <li>a device (except for VPN)</li>
    <li>for wifi: access point (can be chosen automatically)</li>
    <li>for VPN: path of active connection ("base" connection)</li>
</ul>
<p>Global states:</p>

<ul>
    <li>unknown</li>
    <li>no connectivity (asleep, disconnected, disconnecting)</li>
    <li>local, site, global connectivity</li>
</ul>
<p>Devices can be disconnected; no further automatic connection
activation will happen for this specific device.</p>

<p>VPN connections can be disconnected, regular connections can be
deactivated.</p>

<p>Wifi connections can be restricted to a single BSSID (expose in
key dialog?)</p>

<p>Networking can be globally en/disabled both totally and for
classes of hardware (wifi, wwan=GSM/3G, wimax).</p>

<h2>Requirements</h2>

<ul>
    <li>Ability to activate a specific connection if multiple
  connections are available for a device / access point</li>
    <li>Ability to prevent automatic reconnections for a device
  (either via using the Disconnect() call for the device or
  disabling the entire hardware class); preferably happens by
  default</li>
    <li>Easy access to powering down a device class</li>
    <li>Ability to restrict a connection to a single AP (BSSID)</li>
</ul>
<h2>Nice to have</h2>

<ul>
    <li>Ability to add a new connection for a device / AP that already
  has a configured connection</li>
</ul>
<h2>Suggested design changes</h2>

<ul>
    <li>AP palette (Neighborhood):</li>
<ul>
    <li>If there's more than one connection, list all of them. Selecting
   the connection activates it.</li>
    <li>If there's at least one connection, show option
   "Add another connection"</li>
</ul>
    <li>Wireless device palette (Frame):</li>
<ul>
    <li>New option "Connect to hidden network". Once the connection has
   been successfully configured, the AP should turn up as usual
   in the Neighborhood whenever it is in range (AFAIK at least).</li>
    <li>New option "Disable all wireless devices" resp. "Enable
   wireless devices" (wording could do with some improvement).
   If there is more than one wireless device, all of them will
   show the option and all of them will be powered down / up when
   the option is selected.</li>
</ul>
    <li>"GSM" = Modem device palette (Frame):</li>
<ul>
    <li>Behave like the new AP palette: list of connections, "Add
   another connection"</li>
    <li>New option to disable / enable WWAN devices, like for the
   wireless device palette</li>
</ul>
    <li>Wired device palette (Frame):</li>
<ul>
    <li>Analogous to GSM device, but no way to en/disable all wired
   devices (not supported by NM)</li>
</ul>
</ul>
<h2>Potential additions</h2>

<p>If we have enough time to implement these, we could add support
for:</p>

<ul>
    <li>Bluetooth (DUN/PAN)</li>
<ul>
    <li>probably similar to modems ("GSM")</li>
</ul>
    <li>WiMax</li>
<ul>
    <li>probably similar to wireless</li>
</ul>
    <li>VPN Connections</li>
<ul>
    <li>would appear in the palette for any device that currently has
   an active connection</li>
    <li>no support for adding new VPN connections yet</li>
</ul>
</ul>
<h2>Open questions</h2>

<ul>
    <li>Should we continue to show the "Connect" option for APs if
  there's at most one connection configured or should we always
  show a list of connections? Rename "Add another connection" to
  "Add connection" if there's no connection configured yet?</li>
    <li>How do we distinguish the different connections in the list?
  User-chosen name? Add a way to change the name later?</li>
    <li>How do we let the user configure the connection? The current
  globally modal keyphrase dialog is a major usability disaster.</li>
    <li>Differentiated connectivity indicators (need to investigate work
  done by Peter Robinson and review previous design discussion)</li>
</ul>
 </body>
</html>