Re: API changes
- From: Dan Williams <dcbw redhat com>
- To: Will Stephenson <wstephenson kde org>
- Cc: networkmanager-list gnome org
- Subject: Re: API changes
- Date: Thu, 13 Mar 2008 13:48:16 -0400
On Thu, 2008-03-13 at 18:17 +0100, Will Stephenson wrote:
> On Thursday 13 March 2008, Tambet Ingo said:
> > On Thu, Mar 13, 2008 at 9:29 AM, Will Stephenson <wstephenson kde org>
> wrote:
> > > org.freedesktop.NetworkManager
> > > Methods:
> > > #1
> > > ActivateDevice ( o: device, s: service_name, o: connection, o:
> > > specific_object ) → nothing
> > >
> > > suggestion: move to org.freedesktop.NetworkManager.Device.Activate(s:
> > > service_name, o: connection, o: specific_object ) → nothing
> > >
> > > rationale: Helmut told me that this had already been discussed, and that
> > > because you could imagine Connection.Activate( Device ) or
> > > Device.Activate( Connection) it was decided to put it on the manager. If
> > > this was communicated properly, this is a worst of all compromise.
> > > Since Connection is on the settings service, the action can't be carried
> > > out there, so stay object-oriented and move this to Device.
> > >
> > > As I'm wrapping NM in Solid for KDE 4, I'll probably move this method
> > > onto the Device class anyway, but moving it in NM would be better for
> > > both projects IMO.
> >
> > It was never a discussion between Connection.Activate(Device) vs
> > Device.Activate(Connection). The current solution isn't a compromise
> > either, it's just the way things have to be right now. NMManager is
> > the thing that has access to available settings and devices, hence
> > it's the thing that can tie them together for activation.
> > Device.Activate(connection_path) is not possible since device can't
> > translate that connection_path to Connection without the help of
> > NMManager. It can't do that since NMManager has to contain the list of
> > devices, and circular dependencies are much bigger OOP offenders than
> > what you suggest. The reason why it was pretty much impossible to add
> > new device types to 0.6 branch was because of no class hierarchy,
> > everything just called everything and to add a new device type meant
> > changing almost all source files. With the strict hierarchy (that I've
> > been defending very hard, and still do), adding a new device means
> > implementing a subclass of NMDevice, a subclass of NMSetting and a
> > registration function in NMHalManager. I'm not willing to give up all
> > this just to have Device.Activate(Connection).
>
> I'd keep the clean internal structure and offer a OO activate method by
> offering the dbus interface for Device via a facade object that has the
> back-reference to NMManager, but you're the one writing the code here.
>
> > > #3
> > > Sleep ( b: sleep ) → nothing
> > > Control the NetworkManager daemon's sleep state. When asleep, all
> > > interfaces that it manages are deactivated.
> > > Parameters
> > > sleep - b
> > > Indicates whether the NetworkManager daemon should sleep or wake.
> > >
> > > suggestion: It's not clear from the method name what this does
> > > SetSleepState( b: asleep ) perhaps?
> >
> > It would be even clearer to rename it to EnableNetworking(b: enabled).
>
> Agreed
>
> > > #4
> > > enum:
> > > NM_STATE_CONNECTING = 2
> > > The NetworkManager daemon is connecting a device.
> > > What does this mean when one device is already active and another is
> > > connecting?
> >
> > The NMState enum is not 100% accurate in case of multiple devices and
> > it isn't meant to. It reflects the "best" state of NM. The reason
> > behind it is to give easier API for applications that only care if the
> > machine has network connection or not. So for your specific question,
> > if a device is active and another one is activating, the NMState
> > reamains NM_STATE_CONNECTED. If an app wants more information, it can
> > always get NMManager, it's list of devices and the state of each
> > device.
>
> Ok, I'll explain this in the API docu.
>
> > > org.freedesktop.NetworkManager.AccessPoint
> > > #5
> > >
> > > roperties:
> > > HwAddress - s - (read)
> > > The hardware address of the access point.
> > > suggestion: make this uint64 type="t"? IP addresses are uints, and
> > > uint64 fits both 48 bit and 64 bit MAC addresses, and is smaller than the
> > > unicode string needed for a macaddress.
> >
> > The data type for it in the kernel is "struct ether_addr", just
> > because it fits in a uint64 doesn't mean it's a good data type for it.
> > There's no calculations to perform on it, the only useful operation on
> > it would be to print it out. Then why bother with the conversions to
> > save a few bites on communication when you're going to waste these
> > same bites when you're actually going to do anything (display) it?
>
> I understood the applet merges APs in the same network for presentation to the
> user, is that what all the calls to ether_aton() in the NM and applet sources
> are doing? And HAL uses uint64 for mac addresses. At a guess, you're
> converting from that, using hex-and-colons for dbus transport, converting it
> to ether_addr for comparisons, and converting it back again for the UI.
NM pulls it right out of SIOCGIFHWADDR which is struct ether_addr (ie,
char[6]). It does get converted from struct ether_addr to a string with
ether_ntop for D-Bus transport.
1/2 dozen to one, 6 to another. I think the decision to be made is to
either leave it as-is (ie, strings), or convert the type to byte array
with the exact length of the device type's hardware address (char[6] for
802.11, 802.3, and 802.15, char[7] for GSM & CDMA).
> > > org.freedesktop.NetworkManagerSettings.Connection
> > > #10
> > > Suggestion: for the settings maps, switch to u instead of s keys defined
> > > by well-known enums - faster, smaller, safer
> >
> > Setting types are not necessarily well known. I've been trying to keep
> > NM as extensible as possible and currently the only thing missing in
> > NM to allow plugins (to implement new devices as I already described)
> > is a module loader. There are already hooks to register new setting
> > and device types. The first place we're going to need it is probably
> > for gsm/cdma devices which all have their own proprietary protocols
> > and it would get insane pretty quickly to try to do it all in once
> > class.
>
> Of course, doing it in one class would be impossible. But strings don't do
> anything differently to uints in for extensibility - you still have to
> prevent collisions. Do you want to allow plugins/extensions to define their
> own groups, or allow them to add new settings within existing settings
We do this with the vpn-settings object already. Neither NM or the
applet knows anything about the VPN connections data; only the vpn
plugin and it's properties lib do. The options are simply passed
through.
> groups? That might cause problems. We can assume any one plugin isn't going
> to wantonly reuse an existing key from core NM, so the collision problem is
> going to be two competing plugins extending the same group. Keeping the set
> of keys in a group fixed would be safe.
>
> > > #17
> > > Hostname - s - (read)
> > > The hostname associated with this IPv4 address.
> > > Suggestion: what about multiple hostnames? change to 'as' with canonical
> > > hostname first
> >
> > There can be one hostname for a system and multiple ip addresses. What
> > you suggest makes no sense.
>
> Sorry, was thinking of IPv4config in a general sense - if you had the results
> of a dns lookup in here you could very well have more than one name. But in
> the NM DHCP context it's not relevant.
>
> > > errors:
> > > #19
> > > org.freedesktop.NetworkManager.VPN.Error.BadArguments
> > > org.freedesktop.NetworkManager.VPN.Error.WrongState
> > > suggestion: too general to be useful - should have discrete specific
> > > errors to describe the problem - examples?
> >
> > These are not the errors you want to show to the user. If these
> > happen, the VPN plugin is doing something wrong and there's no way to
> > recover from it other than fix the VPN plugin code. They're specific
> > enough for that.
>
> Ok.
>
> Will
> _______________________________________________
> NetworkManager-list mailing list
> NetworkManager-list gnome org
> http://mail.gnome.org/mailman/listinfo/networkmanager-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]