dear dan, First, thank you very much for helpping me to break a way with Network Manager 0.7.0. Your points help me a lot and the best is I will never feel alone and helpless. Today I met a problem on DHClient. (1) The log is like "localhost dhclient: Can't create /usr/local/var/run/dhclient-wlan0.pid: Permission denied". I downloaded dhclient-3.0.6 src code but still did not find how to change "path_dhclient_db". Maybe it is not printed from dhclient.c. I still have some questions about NM. (2) Can I interpret the relationship between NM and applet like the following diagram? |------------- src --------------| |- libnm -| NIC_Driver<->wpa_supplicant<->NetworkManager <-> NMManager <-> NMClient <-> Applet (iwctrl) (dbus) [NM database] (dbus sig) [NMA database] (3) I could not find the place applet emits a signal "DeviceAdded", so how does applet create a NMClient? (4) I will be so glad to know the calling history about "the wireless device has scanned a new network/ap". I means how NM informs Applet to add a new network. (5) Also I would like to know the calling history about "user select an ap to associate". I means how Applet informs NM to perform joining things. (6) Last question :Connection is for a device or an ap? Sorry to have bothered you so much. I feel a little lazy and guilty, but still waiting for your good news. sincerely, Jeanne > Subject: Re: Questions on NetworkManager-0.7.0 > From: dcbw redhat com > To: shuangfeiyu hotmail com > CC: networkmanager-list gnome org > Date: Tue, 25 Mar 2008 10:45:23 -0400 > > On Tue, 2008-03-25 at 03:11 +0000, Jue Yang wrote: > > Hi, > > > > > > > > I’m a fresh to develop Network Manager based on version 0.7.0. I have > > digged it few days and feel so confused. Could anybody give me the > > answers to following questions. > > > > 1. Why does NM separate to two layers, libnm and src? > > libnm-glib is only used by _client_ of NetworkManager, and wraps the > D-Bus objects that NetworkManager exports in a glib friendly API. > > libnm-util is common code and structures used both by clients of > NetworkManager and NetworkManager itself. > > > 2. How to do initialization of all objects? I mean who calls > > those “class_init” functions. > > This is handled by glib. When you call g_object_new(<type>, ...) glib > looks up the type that you have given it (which is registered indirectly > by those lines in the header files like #define NM_TYPE_FOO > (nm_foo_get_type ())). > > Once it's got the class structure identified by the type you have given > it with g_object_new(), glib will call the class_init and constructor > functions of the class and it's subclasses as necessary. > > For more information on glib objects, see: > > http://library.gnome.org/devel/gobject/unstable/chapter-gobject.html > > > 3. Can Applet just call functions in libnm? During Applet > > setting an active network, which way used to keep synchronizing > > between libnm and src? > > Yes, the applet can call libnm-glib functions, provided it has created > the right objects. You must first create the libnm-glib NMClient > object, which effectively wraps the D-Bus interface exported by the > NMManager object in src/. Once the applet has the NMClient object, it > can attach to the signals of NMClient, ask NMClient for the list of > devices, the list of currently active connections, etc. > > Most of the synchronization between a client an NetworkManager (aided by > libnm-glib for glib-based applications) is through signals. The > NMClient object proxies the PropertiesChanged signal that NetowrkManager > emits when the NMManager state changes, and it decodes the signal and > re-emits the signal as a GObject signal on the NMClient object. There's > actually some magic underneath to extract the properties that have > actually changed (there can be more than one at a time) from the > PropertiesChanged signal over D-Bus, and then set the internal cached > variables inside the NMClient object, and when those internal cached > variables change, emit GObject notify signals to alert users of > libnm-glib that something has changed. > > It's sort of complicated; but as a client of NetworkManager you just > need to pick one of (1) the D-Bus interface, or (2) the libnm-glib > interface, or (3) the KDE Solid interface when it's done. (2) and (3) > just wrap the D-Bus interface (1) in a more friendly manner and do > things like convert D-Bus types to glib/qt types (a{sv} -> GHashTable > for example). > > Dan > > How well do you know your celebrity gossip? Talk celebrity smackdowns here. |