On Fri, 2011-05-06 at 14:23 +0300, Pantelis Koukousoulas wrote: > For the finale, this is the libnm-glib and nmcli part of the support, > with this you can now make a full pppoatm connection from NetworkManager > by configuring it in system scope in a keyfile. > > As an example, here is mine: > (password and username snipped for obvious reasons) > > [connection] > id=MYISP > uuid=34d04e69-fdd9-4231-af2c-25ed1f34dc1e > type=adsl > timestamp=1304621332 > > [adsl] > [email protected] > password=mypassword > vpi=8 > vci=35 > encapsulation=vcmux > protocol=pppoa > > [ipv6] > method=ignore > > [ipv4] > method=auto > > Extract from logs: > NetworkManager[29155]: <info> Activation (ueagle-atm0) starting connection > 'MYISP' > NetworkManager[29155]: <info> (ueagle-atm0): device state change: > disconnected -> prepare (reason 'none') [30 40 0] > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 1 of 5 (Device > Prepare) scheduled... > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 1 of 5 (Device > Prepare) started... > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 2 of 5 (Device > Configure) scheduled... > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 1 of 5 (Device > Prepare) complete. > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 2 of 5 (Device > Configure) starting... > NetworkManager[29155]: <info> (ueagle-atm0): device state change: prepare -> > config (reason 'none') [40 50 0] > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 2 of 5 (Device > Configure) successful. > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 3 of 5 (IP > Configure Start) scheduled. > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 2 of 5 (Device > Configure) complete. > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 3 of 5 (IP > Configure Start) started... > NetworkManager[29155]: <info> (ueagle-atm0): device state change: config -> > ip-config (reason 'none') [50 70 0] > NetworkManager[29155]: <info> starting PPP connection > NetworkManager[29155]: <debug> [1304671146.590156] [nm-ppp-manager.c:1047] > nm_ppp_manager_start(): command line: /usr/sbin/pppd nodetach lock > nodefaultroute user [email protected] plugin pppoatm.so 8.35 noipdefault noauth > usepeerdns lcp-echo-failure 0 lcp-echo-interval 0 ipparam > /org/freedesktop/NetworkManager/PPP/0 plugin > /opt/nmadsl/lib/pppd/2.4.5/nm-pppd-plugin.so > NetworkManager[29155]: <info> pppd started with pid 29175 > NetworkManager[29155]: <debug> [1304671146.591235] > [NetworkManagerUtils.c:816] nm_utils_get_proc_sys_net_value(): (ueagle-atm0): > error reading /proc/sys/net/ipv6/conf/ueagle-atm0/accept_ra: (4) Failed to > open file '/proc/sys/net/ipv6/conf/ueagle-atm0/accept_ra': No such file or > directory > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 3 of 5 (IP > Configure Start) complete. > Plugin pppoatm.so loaded. > Plugin /opt/nmadsl/lib/pppd/2.4.5/nm-pppd-plugin.so loaded. > ** Message: nm-ppp-plugin: (plugin_init): initializing > ** Message: nm-ppp-plugin: (nm_phasechange): status 3 / phase 'serial > connection' > NetworkManager[29155]: <debug> [1304671146.612937] [nm-udev-manager.c:621] > handle_uevent(): UDEV event: action 'add' subsys 'net' device 'ppp0' > NetworkManager[29155]: <debug> [1304671146.613134] [nm-udev-manager.c:525] > net_add(): ignoring interface with type 512 > NetworkManager[29155]: <debug> [1304671146.617308] [nm-netlink-monitor.c:117] > link_msg_handler(): netlink link message: iface idx 35 flags 0x1090 > Using interface ppp0 > Connect: ppp0 <--> 8.35 > ** Message: nm-ppp-plugin: (nm_phasechange): status 5 / phase 'establish' > ** Message: nm-ppp-plugin: (nm_phasechange): status 6 / phase 'authenticate' > ** Message: nm-ppp-plugin: (get_credentials): passwd-hook, requesting > credentials... > NetworkManager[29155]: <debug> [1304671149.639511] [nm-agent-manager.c:1044] > nm_agent_manager_get_secrets(): Secrets requested for connection > /org/freedesktop/NetworkManager/Settings/0 (adsl) > NetworkManager[29155]: <debug> [1304671149.639684] > [nm-settings-connection.c:717] nm_settings_connection_get_secrets(): > (34d04e69-fdd9-4231-af2c-25ed1f34dc1e/adsl:1) secrets requested flags 0x1 > hint 'password' > NetworkManager[29155]: <debug> [1304671149.640950] [nm-agent-manager.c:959] > get_start(): (0x9b4ad10/adsl) system settings secrets sufficient > NetworkManager[29155]: <debug> [1304671149.641332] > [nm-settings-connection.c:573] agent_secrets_done_cb(): > (34d04e69-fdd9-4231-af2c-25ed1f34dc1e/adsl:1) existing secrets returned > NetworkManager[29155]: <debug> [1304671149.641541] > [nm-settings-connection.c:579] agent_secrets_done_cb(): > (34d04e69-fdd9-4231-af2c-25ed1f34dc1e/adsl:1) secrets request completed > NetworkManager[29155]: <debug> [1304671149.643074] > [nm-settings-connection.c:618] agent_secrets_done_cb(): > (34d04e69-fdd9-4231-af2c-25ed1f34dc1e/adsl:1) new agent secrets processed > ** Message: nm-ppp-plugin: (get_credentials): got credentials from > NetworkManager > PAP authentication succeeded > ** Message: nm-ppp-plugin: (nm_phasechange): status 8 / phase 'network' > local IP address 94.70.90.201 > remote IP address 80.106.108.12 > primary DNS address 195.170.0.1 > secondary DNS address 195.170.2.2 > ** Message: nm-ppp-plugin: (nm_phasechange): status 9 / phase 'running' > ** Message: nm-ppp-plugin: (nm_ip_up): ip-up event > ** Message: nm-ppp-plugin: (nm_ip_up): sending Ip4Config to NetworkManager... > NetworkManager[29155]: <debug> [1304671150.607440] [nm-netlink-monitor.c:117] > link_msg_handler(): netlink link message: iface idx 35 flags 0x110D1 > NetworkManager[29155]: <info> PPP manager(IP Config Get) reply received. > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 4 of 5 (IP4 > Configure Get) scheduled... > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 4 of 5 (IP4 > Configure Get) started... > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 5 of 5 (IP > Configure Commit) scheduled... > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 4 of 5 (IP4 > Configure Get) complete. > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 5 of 5 (IP > Configure Commit) started... > NetworkManager[29155]: <debug> [1304671150.608918] [nm-system.c:222] > sync_addresses(): (ppp0): syncing addresses (family 2) > NetworkManager[29155]: <info> (ueagle-atm0): device state change: ip-config > -> activated (reason 'none') [70 100 0] > NetworkManager[29155]: <info> Policy set 'MYISP' (ppp0) as default for IPv4 > routing and DNS. > NetworkManager[29155]: <info> Activation (ueagle-atm0) successful, device > activated. > NetworkManager[29155]: <info> Activation (ueagle-atm0) Stage 5 of 5 (IP > Configure Commit) complete. > > Signed-off-by: Pantelis Koukousoulas <[email protected]> > --- > cli/src/connections.c | 66 ++++++++++-- > cli/src/devices.c | 4 + > cli/src/settings.c | 50 +++++++++ > cli/src/settings.h | 2 + > libnm-glib/Makefile.am | 6 + > libnm-glib/libnm-glib.ver | 4 +- > libnm-glib/nm-device-adsl.c | 236 > +++++++++++++++++++++++++++++++++++++++++++ > libnm-glib/nm-device-adsl.h | 62 +++++++++++ > libnm-glib/nm-device.c | 10 ++- > libnm-util/nm-connection.c | 25 +++++- > libnm-util/nm-connection.h | 2 + > 11 files changed, 451 insertions(+), 16 deletions(-) > create mode 100644 libnm-glib/nm-device-adsl.c > create mode 100644 libnm-glib/nm-device-adsl.h > > diff --git a/cli/src/connections.c b/cli/src/connections.c > index 2646aa9..5308f04 100644 > --- a/cli/src/connections.c > +++ b/cli/src/connections.c > @@ -34,6 +34,7 @@ > #include <nm-client.h> > #include <nm-setting-connection.h> > #include <nm-setting-wired.h> > +#include <nm-setting-adsl.h> > #include <nm-setting-pppoe.h> > #include <nm-setting-wireless.h> > #include <nm-setting-gsm.h> > @@ -44,6 +45,7 @@ > #include <nm-setting-wimax.h> > #endif > #include <nm-device-ethernet.h> > +#include <nm-device-adsl.h> > #include <nm-device-wifi.h> > #if WITH_WIMAX > #include <nm-device-wimax.h> > @@ -104,12 +106,13 @@ static NmcOutputField nmc_fields_settings_names[] = { > SETTING_FIELD (NM_SETTING_SERIAL_SETTING_NAME, 0), /* 7 > */ > SETTING_FIELD (NM_SETTING_PPP_SETTING_NAME, 0), /* 8 > */ > SETTING_FIELD (NM_SETTING_PPPOE_SETTING_NAME, 0), /* 9 > */ > - SETTING_FIELD (NM_SETTING_GSM_SETTING_NAME, 0), /* 10 > */ > - SETTING_FIELD (NM_SETTING_CDMA_SETTING_NAME, 0), /* 11 > */ > - SETTING_FIELD (NM_SETTING_BLUETOOTH_SETTING_NAME, 0), /* 12 > */ > - SETTING_FIELD (NM_SETTING_OLPC_MESH_SETTING_NAME, 0), /* 13 > */ > - SETTING_FIELD (NM_SETTING_VPN_SETTING_NAME, 0), /* 14 > */ > - SETTING_FIELD (NM_SETTING_WIMAX_SETTING_NAME, 0), /* 15 > */ > + SETTING_FIELD (NM_SETTING_ADSL_SETTING_NAME, 0), /* 10 > */ > + SETTING_FIELD (NM_SETTING_GSM_SETTING_NAME, 0), /* 11 > */ > + SETTING_FIELD (NM_SETTING_CDMA_SETTING_NAME, 0), /* 12 > */ > + SETTING_FIELD (NM_SETTING_BLUETOOTH_SETTING_NAME, 0), /* 13 > */ > + SETTING_FIELD (NM_SETTING_OLPC_MESH_SETTING_NAME, 0), /* 14 > */ > + SETTING_FIELD (NM_SETTING_VPN_SETTING_NAME, 0), /* 15 > */ > + SETTING_FIELD (NM_SETTING_WIMAX_SETTING_NAME, 0), /* 16 > */ > {NULL, NULL, 0, NULL, 0} > }; > #define NMC_FIELDS_SETTINGS_NAMES_ALL_X > NM_SETTING_CONNECTION_SETTING_NAME","\ > @@ -122,6 +125,7 @@ static NmcOutputField nmc_fields_settings_names[] = { > NM_SETTING_SERIAL_SETTING_NAME","\ > NM_SETTING_PPP_SETTING_NAME","\ > NM_SETTING_PPPOE_SETTING_NAME","\ > + NM_SETTING_ADSL_SETTING_NAME","\ > NM_SETTING_GSM_SETTING_NAME","\ > NM_SETTING_CDMA_SETTING_NAME","\ > > NM_SETTING_BLUETOOTH_SETTING_NAME","\ > @@ -331,6 +335,15 @@ nmc_connection_detail (NMConnection *connection, NmCli > *nmc) > } > > if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[10].name)) { > + setting = nm_connection_get_setting (connection, > NM_TYPE_SETTING_ADSL); > + if (setting) { > + setting_adsl_details (setting, nmc); > + was_output = TRUE; > + continue; > + } > + } > + > + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[11].name)) { > setting = nm_connection_get_setting (connection, > NM_TYPE_SETTING_GSM); > if (setting) { > setting_gsm_details (setting, nmc); > @@ -339,7 +352,7 @@ nmc_connection_detail (NMConnection *connection, NmCli > *nmc) > } > } > > - if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[11].name)) { > + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[12].name)) { > setting = nm_connection_get_setting (connection, > NM_TYPE_SETTING_CDMA); > if (setting) { > setting_cdma_details (setting, nmc); > @@ -348,7 +361,7 @@ nmc_connection_detail (NMConnection *connection, NmCli > *nmc) > } > } > > - if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[12].name)) { > + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[13].name)) { > setting = nm_connection_get_setting (connection, > NM_TYPE_SETTING_BLUETOOTH); > if (setting) { > setting_bluetooth_details (setting, nmc); > @@ -357,7 +370,7 @@ nmc_connection_detail (NMConnection *connection, NmCli > *nmc) > } > } > > - if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[13].name)) { > + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[14].name)) { > setting = nm_connection_get_setting (connection, > NM_TYPE_SETTING_OLPC_MESH); > if (setting) { > setting_olpc_mesh_details (setting, nmc); > @@ -366,7 +379,7 @@ nmc_connection_detail (NMConnection *connection, NmCli > *nmc) > } > } > > - if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[14].name)) { > + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[15].name)) { > setting = nm_connection_get_setting (connection, > NM_TYPE_SETTING_VPN); > if (setting) { > setting_vpn_details (setting, nmc); > @@ -376,7 +389,7 @@ nmc_connection_detail (NMConnection *connection, NmCli > *nmc) > } > > #if WITH_WIMAX > - if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[15].name)) { > + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, > nmc_fields_settings_names[16].name)) { > setting = nm_connection_get_setting (connection, > NM_TYPE_SETTING_WIMAX); > if (setting) { > setting_wimax_details (setting, nmc); > @@ -968,6 +981,35 @@ check_modem_compatible (NMDeviceModem *device, > NMConnection *connection, GError > } > > static gboolean > +check_adsl_compatible (NMDeviceAdsl *device, NMConnection *connection, > GError **error) > +{ > + NMSettingConnection *s_con; > + NMSettingAdsl *s_adsl; > + const char *connection_type; > + > + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); > + > + s_con = nm_connection_get_setting_connection (connection); > + g_assert (s_con); > + > + connection_type = nm_setting_connection_get_connection_type (s_con); > + if (strcmp (connection_type, NM_SETTING_ADSL_SETTING_NAME)) { > + g_set_error (error, 0, 0, > + "The connection was not an ADSL connection."); > + return FALSE; > + } > + > + s_adsl = nm_connection_get_setting_adsl (connection); > + if (!s_adsl) { > + g_set_error (error, 0, 0, > + "The connection was not a valid ADSL connection."); > + return FALSE; > + } > + > + return TRUE; > +} > + > +static gboolean > nm_device_is_connection_compatible (NMDevice *device, NMConnection > *connection, GError **error) > { > g_return_val_if_fail (NM_IS_DEVICE (device), FALSE); > @@ -987,6 +1029,8 @@ nm_device_is_connection_compatible (NMDevice *device, > NMConnection *connection, > #endif > else if (NM_IS_DEVICE_MODEM (device)) > return check_modem_compatible (NM_DEVICE_MODEM (device), > connection, error); > + else if (NM_IS_DEVICE_ADSL (device)) > + return check_adsl_compatible (NM_DEVICE_ADSL (device), > connection, error); > > g_set_error (error, 0, 0, "unhandled device type '%s'", > G_OBJECT_TYPE_NAME (device)); > return FALSE; > diff --git a/cli/src/devices.c b/cli/src/devices.c > index c6228ba..7d55c43 100644 > --- a/cli/src/devices.c > +++ b/cli/src/devices.c > @@ -34,6 +34,7 @@ > #include <nm-client.h> > #include <nm-device.h> > #include <nm-device-ethernet.h> > +#include <nm-device-adsl.h> > #include <nm-device-wifi.h> > #include <nm-device-modem.h> > #include <nm-device-bt.h> > @@ -47,6 +48,7 @@ > #include <nm-vpn-connection.h> > #include <nm-setting-connection.h> > #include <nm-setting-wired.h> > +#include <nm-setting-adsl.h> > #include <nm-setting-pppoe.h> > #include <nm-setting-wireless.h> > #include <nm-setting-gsm.h> > @@ -320,6 +322,8 @@ device_type_to_string (NMDevice *device) > switch (nm_device_get_device_type (device)) { > case NM_DEVICE_TYPE_ETHERNET: > return NM_SETTING_WIRED_SETTING_NAME; > + case NM_DEVICE_TYPE_ADSL: > + return NM_SETTING_ADSL_SETTING_NAME; > case NM_DEVICE_TYPE_WIFI: > return NM_SETTING_WIRELESS_SETTING_NAME; > case NM_DEVICE_TYPE_MODEM: > diff --git a/cli/src/settings.c b/cli/src/settings.c > index c238537..1283b5b 100644 > --- a/cli/src/settings.c > +++ b/cli/src/settings.c > @@ -320,6 +320,26 @@ static NmcOutputField nmc_fields_setting_pppoe[] = { > NM_SETTING_PPPOE_PASSWORD > #define NMC_FIELDS_SETTING_PPPOE_COMMON NMC_FIELDS_SETTING_PPP_ALL > > +/* Available fields for NM_SETTING_ADSL_SETTING_NAME */ > +static NmcOutputField nmc_fields_setting_adsl[] = { > + SETTING_FIELD ("name", 10), /* 0 */ > + SETTING_FIELD (NM_SETTING_ADSL_USERNAME, 15), /* 1 */ > + SETTING_FIELD (NM_SETTING_ADSL_PASSWORD, 15), /* 2 */ > + SETTING_FIELD (NM_SETTING_ADSL_VPI, 10), /* 3 */ > + SETTING_FIELD (NM_SETTING_ADSL_VCI, 10), /* 4 */ > + SETTING_FIELD (NM_SETTING_ADSL_ENCAPSULATION, 10), /* 5 */ > + SETTING_FIELD (NM_SETTING_ADSL_PROTOCOL, 10), /* 6 */ > + {NULL, NULL, 0, NULL, 0} > +}; > +#define NMC_FIELDS_SETTING_ADSL_ALL "name"","\ > + NM_SETTING_ADSL_USERNAME","\ > + NM_SETTING_ADSL_PASSWORD","\ > + NM_SETTING_ADSL_VPI","\ > + NM_SETTING_ADSL_VCI","\ > + NM_SETTING_ADSL_ENCAPSULATION","\ > + NM_SETTING_ADSL_PROTOCOL > +#define NMC_FIELDS_SETTING_ADSL_COMMON NMC_FIELDS_SETTING_ADSL_ALL > + > /* Available fields for NM_SETTING_GSM_SETTING_NAME */ > static NmcOutputField nmc_fields_setting_gsm[] = { > SETTING_FIELD ("name", 10), /* 0 > */ > @@ -1204,6 +1224,36 @@ setting_pppoe_details (NMSetting *setting, NmCli *nmc) > } > > gboolean > +setting_adsl_details (NMSetting *setting, NmCli *nmc) > +{ > + NMSettingAdsl *s_adsl; > + guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? > NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? > NMC_PF_FLAG_TERSE : 0; > + guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE > : 0; > + guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; > + > + g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), FALSE); > + s_adsl = (NMSettingAdsl *) setting; > + > + nmc->allowed_fields = nmc_fields_setting_adsl; > + nmc->print_fields.indices = parse_output_fields > (NMC_FIELDS_SETTING_ADSL_ALL, nmc->allowed_fields, NULL); > + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | > NMC_PF_FLAG_FIELD_NAMES; > + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field > names */ > + > + nmc->allowed_fields[0].value = NM_SETTING_ADSL_SETTING_NAME; > + nmc->allowed_fields[1].value = nm_setting_adsl_get_username (s_adsl); > + nmc->allowed_fields[2].value = nm_setting_adsl_get_password (s_adsl); > + nmc->allowed_fields[3].value = g_strdup_printf ("%s", > nm_setting_adsl_get_vpi (s_adsl)); > + nmc->allowed_fields[4].value = g_strdup_printf ("%s", > nm_setting_adsl_get_vci (s_adsl)); > + nmc->allowed_fields[5].value = nm_setting_adsl_get_encapsulation > (s_adsl); > + nmc->allowed_fields[6].value = nm_setting_adsl_get_protocol (s_adsl); > + > + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | > NMC_PF_FLAG_SECTION_PREFIX; > + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values > */ > + > + return TRUE; > +} > + > +gboolean > setting_gsm_details (NMSetting *setting, NmCli *nmc) > { > NMSettingGsm *s_gsm; > diff --git a/cli/src/settings.h b/cli/src/settings.h > index 4901bf2..61c9557 100644 > --- a/cli/src/settings.h > +++ b/cli/src/settings.h > @@ -22,6 +22,7 @@ > > #include <nm-setting-connection.h> > #include <nm-setting-wired.h> > +#include <nm-setting-adsl.h> > #include <nm-setting-8021x.h> > #include <nm-setting-wireless.h> > #include <nm-setting-wireless-security.h> > @@ -51,6 +52,7 @@ gboolean setting_ip6_config_details (NMSetting *setting, > NmCli *nmc); > gboolean setting_serial_details (NMSetting *setting, NmCli *nmc); > gboolean setting_ppp_details (NMSetting *setting, NmCli *nmc); > gboolean setting_pppoe_details (NMSetting *setting, NmCli *nmc); > +gboolean setting_adsl_details (NMSetting *setting, NmCli *nmc); > gboolean setting_gsm_details (NMSetting *setting, NmCli *nmc); > gboolean setting_cdma_details (NMSetting *setting, NmCli *nmc); > gboolean setting_bluetooth_details (NMSetting *setting, NmCli *nmc); > diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am > index 08a61cc..5955564 100644 > --- a/libnm-glib/Makefile.am > +++ b/libnm-glib/Makefile.am > @@ -10,6 +10,7 @@ BUILT_SOURCES = \ > nm-client-bindings.h \ > nm-device-bindings.h \ > nm-device-ethernet-bindings.h \ > + nm-device-adsl-bindings.h \ > nm-device-wifi-bindings.h \ > nm-device-bt-bindings.h \ > nm-settings-connection-bindings.h \ > @@ -70,6 +71,7 @@ libnminclude_HEADERS = \ > nm-client.h \ > nm-device.h \ > nm-device-ethernet.h \ > + nm-device-adsl.h \ > nm-device-wifi.h \ > nm-device-bt.h \ > nm-access-point.h \ > @@ -98,6 +100,7 @@ libnm_glib_la_csources = \ > nm-dbus-utils.c \ > nm-device.c \ > nm-device-ethernet.c \ > + nm-device-adsl.c \ > nm-device-wifi.c \ > nm-device-bt.c \ > nm-access-point.c \ > @@ -189,6 +192,9 @@ nm-device-bindings.h: > $(top_srcdir)/introspection/nm-device.xml > nm-device-ethernet-bindings.h: > $(top_srcdir)/introspection/nm-device-ethernet.xml > $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_ethernet > --mode=glib-client --output=$@ $< > > +nm-device-adsl-bindings.h: $(top_srcdir)/introspection/nm-device-adsl.xml > + $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_adsl > --mode=glib-client --output=$@ $< > + > nm-device-wifi-bindings.h: $(top_srcdir)/introspection/nm-device-wifi.xml > $(AM_V_GEN) dbus-binding-tool --prefix=nm_device_wifi > --mode=glib-client --output=$@ $< > > diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver > index a59bec9..3b17c66 100644 > --- a/libnm-glib/libnm-glib.ver > +++ b/libnm-glib/libnm-glib.ver > @@ -65,6 +65,9 @@ global: > nm_device_ethernet_get_speed; > nm_device_ethernet_get_type; > nm_device_ethernet_new; > + nm_device_adsl_get_carrier; > + nm_device_adsl_get_type; > + nm_device_adsl_new; > nm_device_filter_connections; > nm_device_get_capabilities; > nm_device_get_device_type; > @@ -75,7 +78,6 @@ global: > nm_device_get_iface; > nm_device_get_ip4_config; > nm_device_get_ip6_config; > - nm_device_get_ip_iface; > nm_device_get_managed; > nm_device_get_product; > nm_device_get_state;
Same as the first patch here; this hunk shouldn't be there since it reverts an upstream commit, but that's just a consequence of the commit I pushed late last week. A simple re-merge might do the trick. > diff --git a/libnm-glib/nm-device-adsl.c b/libnm-glib/nm-device-adsl.c > new file mode 100644 > index 0000000..e0d5da5 > --- /dev/null > +++ b/libnm-glib/nm-device-adsl.c > @@ -0,0 +1,236 @@ > +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ > +/* > + * libnm_glib -- Access network status & information from glib applications > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the > + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, > + * Boston, MA 02110-1301 USA. > + * > + * author: Pantelis Koukousoulas <[email protected]> > + * Copyright 2009 - 2011 Red Hat, Inc. > + */ > + > +#include "nm-device-adsl.h" > +#include "nm-device-private.h" > +#include "nm-object-private.h" > + > +#include "nm-setting-adsl.h" > + > +#include <string.h> > + > +#include "nm-device-adsl-bindings.h" > + > +G_DEFINE_TYPE (NMDeviceAdsl, nm_device_adsl, NM_TYPE_DEVICE) > + > +#define NM_DEVICE_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), > NM_TYPE_DEVICE_ADSL, NMDeviceAdslPrivate)) > + > +typedef struct { > + DBusGProxy *proxy; > + > + gboolean carrier; > + > + gboolean disposed; > +} NMDeviceAdslPrivate; > + > +enum { > + PROP_0, > + PROP_CARRIER, > + LAST_PROP > +}; > +#define DBUS_PROP_CARRIER "Carrier" > + > +/** > + * nm_device_adsl_new: > + * @connection: the #DBusGConnection > + * @path: the DBus object path of the device > + * > + * Creates a new #NMDeviceAdsl. > + * > + * Returns: a new device > + **/ > +GObject * > +nm_device_adsl_new (DBusGConnection *connection, const char *path) > +{ > + g_return_val_if_fail (connection != NULL, NULL); > + g_return_val_if_fail (path != NULL, NULL); > + > + return g_object_new (NM_TYPE_DEVICE_ADSL, > + NM_OBJECT_DBUS_CONNECTION, connection, > + NM_OBJECT_DBUS_PATH, path, > + NULL); > +} > + > +/** > + * nm_device_adsl_get_carrier: > + * @device: a #NMDeviceAdsl > + * > + * Whether the device has carrier. > + * > + * Returns: %TRUE if the device has carrier > + **/ > +gboolean > +nm_device_adsl_get_carrier (NMDeviceAdsl *device) > +{ > + NMDeviceAdslPrivate *priv; > + > + g_return_val_if_fail (NM_IS_DEVICE_ADSL (device), FALSE); > + > + priv = NM_DEVICE_ADSL_GET_PRIVATE (device); > + priv->carrier = _nm_object_get_boolean_property (NM_OBJECT (device), > + > NM_DBUS_INTERFACE_DEVICE_ADSL, > + > DBUS_PROP_CARRIER, > + NULL); > + return priv->carrier; > +} > + > +static gboolean > +connection_valid (NMDevice *device, NMConnection *connection) > +{ > + NMSettingConnection *s_con; > + NMSettingAdsl *s_adsl; > + const char *ctype; > + > + s_con = nm_connection_get_setting_connection (connection); > + g_assert (s_con); > + > + ctype = nm_setting_connection_get_connection_type (s_con); > + if (strcmp (ctype, NM_SETTING_ADSL_SETTING_NAME) != 0) > + return FALSE; > + > + s_adsl = nm_connection_get_setting_adsl (connection); > + if (!s_adsl) > + return FALSE; > + > + return TRUE; > +} > + > +static void > +nm_device_adsl_init (NMDeviceAdsl *device) > +{ > + NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device); > + > + priv->disposed = FALSE; > + priv->carrier = FALSE; > +} > + > +static void > +register_for_property_changed (NMDeviceAdsl *device) > +{ > + NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device); > + const NMPropertiesChangedInfo property_changed_info[] = { > + { NM_DEVICE_ADSL_CARRIER, > _nm_object_demarshal_generic, &priv->carrier }, > + { NULL }, > + }; > + > + _nm_object_handle_properties_changed (NM_OBJECT (device), > + priv->proxy, > + property_changed_info); > +} > + > +static GObject* > +constructor (GType type, > + guint n_construct_params, > + GObjectConstructParam *construct_params) > +{ > + GObject *object; > + NMDeviceAdslPrivate *priv; > + > + object = G_OBJECT_CLASS (nm_device_adsl_parent_class)->constructor > (type, > + > > n_construct_params, > + > > construct_params); > + if (!object) > + return NULL; > + > + priv = NM_DEVICE_ADSL_GET_PRIVATE (object); > + > + priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection > (NM_OBJECT (object)), > + NM_DBUS_SERVICE, > + nm_object_get_path (NM_OBJECT > (object)), > + NM_DBUS_INTERFACE_DEVICE_ADSL); > + > + register_for_property_changed (NM_DEVICE_ADSL (object)); > + > + return object; > +} > + > +static void > +dispose (GObject *object) > +{ > + NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (object); > + > + if (priv->disposed) { > + G_OBJECT_CLASS (nm_device_adsl_parent_class)->dispose (object); > + return; > + } > + > + priv->disposed = TRUE; > + > + g_object_unref (priv->proxy); > + > + G_OBJECT_CLASS (nm_device_adsl_parent_class)->dispose (object); > +} > + > +static void > +finalize (GObject *object) > +{ > + G_OBJECT_CLASS (nm_device_adsl_parent_class)->finalize (object); > +} > + > +static void > +get_property (GObject *object, > + guint prop_id, > + GValue *value, > + GParamSpec *pspec) > +{ > + NMDeviceAdsl *device = NM_DEVICE_ADSL (object); > + > + switch (prop_id) { > + case PROP_CARRIER: > + g_value_set_boolean (value, nm_device_adsl_get_carrier > (device)); > + break; > + default: > + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); > + break; > + } > +} > + > +static void > +nm_device_adsl_class_init (NMDeviceAdslClass *adsl_class) > +{ > + GObjectClass *object_class = G_OBJECT_CLASS (adsl_class); > + NMDeviceClass *device_class = NM_DEVICE_CLASS (adsl_class); > + > + g_type_class_add_private (object_class, sizeof (NMDeviceAdslPrivate)); > + > + /* virtual methods */ > + object_class->constructor = constructor; > + object_class->dispose = dispose; > + object_class->finalize = finalize; > + object_class->get_property = get_property; > + device_class->connection_valid = connection_valid; > + > + /* properties */ > + /** > + * NMDeviceAdsl:carrier: > + * > + * Whether the device has carrier. > + **/ > + g_object_class_install_property > + (object_class, PROP_CARRIER, > + g_param_spec_boolean (NM_DEVICE_ADSL_CARRIER, > + "Carrier", > + "Carrier", > + FALSE, > + G_PARAM_READABLE)); > +} > diff --git a/libnm-glib/nm-device-adsl.h b/libnm-glib/nm-device-adsl.h > new file mode 100644 > index 0000000..73223cd > --- /dev/null > +++ b/libnm-glib/nm-device-adsl.h > @@ -0,0 +1,62 @@ > +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ > +/* > + * libnm_glib -- Access network status & information from glib applications > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the > + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, > + * Boston, MA 02110-1301 USA. > + * > + * Copyright (C) 2011 Pantelis Koukousoulas <[email protected]> > + */ > + > +#ifndef NM_DEVICE_ADSL_H > +#define NM_DEVICE_ADSL_H > + > +#include "nm-device.h" > + > +G_BEGIN_DECLS > + > +#define NM_TYPE_DEVICE_ADSL (nm_device_adsl_get_type ()) > +#define NM_DEVICE_ADSL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), > NM_TYPE_DEVICE_ADSL, NMDeviceAdsl)) > +#define NM_DEVICE_ADSL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), > NM_TYPE_DEVICE_ADSL, NMDeviceAdslClass)) > +#define NM_IS_DEVICE_ADSL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), > NM_TYPE_DEVICE_ADSL)) > +#define NM_IS_DEVICE_ADSL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), > NM_TYPE_DEVICE_ADSL)) > +#define NM_DEVICE_ADSL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), > NM_TYPE_DEVICE_ADSL, NMDeviceAdslClass)) > + > +#define NM_DEVICE_ADSL_CARRIER "carrier" > + > +typedef struct { > + NMDevice parent; > +} NMDeviceAdsl; > + > +typedef struct { > + NMDeviceClass parent; > + > + /* Padding for future expansion */ > + void (*_reserved1) (void); > + void (*_reserved2) (void); > + void (*_reserved3) (void); > + void (*_reserved4) (void); > + void (*_reserved5) (void); > + void (*_reserved6) (void); > +} NMDeviceAdslClass; > + > +GType nm_device_adsl_get_type (void); > + > +GObject *nm_device_adsl_new (DBusGConnection *connection, const char *path); > +gboolean nm_device_adsl_get_carrier (NMDeviceAdsl *device); > + > +G_END_DECLS > + > +#endif /* NM_DEVICE_ADSL_H */ > diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c > index 57aa2cf..ac0da9d 100644 > --- a/libnm-glib/nm-device.c > +++ b/libnm-glib/nm-device.c > @@ -27,6 +27,7 @@ > > #include "NetworkManager.h" > #include "nm-device-ethernet.h" > +#include "nm-device-adsl.h" > #include "nm-device-wifi.h" > #include "nm-device-modem.h" > #include "nm-device-bt.h" > @@ -748,6 +749,9 @@ nm_device_new (DBusGConnection *connection, const char > *path) > case NM_DEVICE_TYPE_ETHERNET: > dtype = NM_TYPE_DEVICE_ETHERNET; > break; > + case NM_DEVICE_TYPE_ADSL: > + dtype = NM_TYPE_DEVICE_ADSL; > + break; > case NM_DEVICE_TYPE_WIFI: > dtype = NM_TYPE_DEVICE_WIFI; > break; > @@ -1203,7 +1207,7 @@ get_decoded_property (GUdevDevice *device, const char > *property) > } > > static void > -_device_update_description (NMDevice *device) > +nm_device_update_description (NMDevice *device) > { > NMDevicePrivate *priv; > const char *subsys[3] = { "net", "tty", NULL }; This hunk shouldn't be there, same as the libnm-glib.ver issue which is a result of a mis-merge from the changes I made late last week... > @@ -1318,7 +1322,7 @@ nm_device_get_product (NMDevice *device) > > priv = NM_DEVICE_GET_PRIVATE (device); > if (!priv->product) > - _device_update_description (device); > + nm_device_update_description (device); > return priv->product; > } > Same as above, this is a revert of a change and shouldn't be here. > @@ -1340,7 +1344,7 @@ nm_device_get_vendor (NMDevice *device) > > priv = NM_DEVICE_GET_PRIVATE (device); > if (!priv->vendor) > - _device_update_description (device); > + nm_device_update_description (device); > return priv->vendor; > } > Same as above, this is a revert of a change and shouldn't be here. > diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c > index cd9d53f..e2e5988 100644 > --- a/libnm-util/nm-connection.c > +++ b/libnm-util/nm-connection.c > @@ -40,6 +40,7 @@ > #include "nm-setting-pppoe.h" > #include "nm-setting-wimax.h" > #include "nm-setting-wired.h" > +#include "nm-setting-adsl.h" > #include "nm-setting-wireless.h" > #include "nm-setting-wireless-security.h" > #include "nm-setting-vpn.h" > @@ -134,7 +135,7 @@ static guint signals[LAST_SIGNAL] = { 0 }; > > static GHashTable *registered_settings = NULL; > > -#define DEFAULT_MAP_SIZE 16 > +#define DEFAULT_MAP_SIZE 17 > > static struct SettingInfo { > const char *name; > @@ -261,6 +262,11 @@ register_default_settings (void) > NM_SETTING_PPPOE_ERROR, > 3, TRUE); > > + register_one_setting (NM_SETTING_ADSL_SETTING_NAME, > + NM_TYPE_SETTING_ADSL, > + NM_SETTING_ADSL_ERROR, > + 3, TRUE); > + > register_one_setting (NM_SETTING_802_1X_SETTING_NAME, > NM_TYPE_SETTING_802_1X, > NM_SETTING_802_1X_ERROR, Ah, there we go :) Hadn't seen this yet when I sent the mail in reply to patch #1. > @@ -1453,6 +1459,23 @@ nm_connection_get_setting_wired (NMConnection > *connection) > } > > /** > + * nm_connection_get_setting_adsl: > + * @connection: the #NMConnection > + * > + * A shortcut to return any #NMSettingAdsl the connection might contain. > + * > + * Returns: (transfer none): an #NMSettingAdsl if the connection contains > one, otherwise NULL > + **/ > +NMSettingAdsl * > +nm_connection_get_setting_adsl (NMConnection *connection) > +{ > + g_return_val_if_fail (connection != NULL, NULL); > + g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); > + > + return (NMSettingAdsl *) nm_connection_get_setting (connection, > NM_TYPE_SETTING_ADSL); > +} > + > +/** > * nm_connection_get_setting_wireless: > * @connection: the #NMConnection > * > diff --git a/libnm-util/nm-connection.h b/libnm-util/nm-connection.h > index 87b053c..2e42265 100644 > --- a/libnm-util/nm-connection.h > +++ b/libnm-util/nm-connection.h > @@ -43,6 +43,7 @@ > #include <nm-setting-vpn.h> > #include <nm-setting-wimax.h> > #include <nm-setting-wired.h> > +#include <nm-setting-adsl.h> > #include <nm-setting-wireless.h> > #include <nm-setting-wireless-security.h> > > @@ -184,6 +185,7 @@ NMSettingPPP * nm_connection_get_setting_ppp > (NMConnec > NMSettingPPPOE * nm_connection_get_setting_pppoe > (NMConnection *connection); > NMSettingVPN * nm_connection_get_setting_vpn > (NMConnection *connection); > NMSettingWimax * nm_connection_get_setting_wimax > (NMConnection *connection); > +NMSettingAdsl * nm_connection_get_setting_adsl > (NMConnection *connection); > NMSettingWired * nm_connection_get_setting_wired > (NMConnection *connection); > NMSettingWireless * nm_connection_get_setting_wireless > (NMConnection *connection); > NMSettingWirelessSecurity *nm_connection_get_setting_wireless_security > (NMConnection *connection); Other than those comments, looks good, thanks! I think one more respin and we can push to a git branch in preparation for 0.9.2. Dan _______________________________________________ networkmanager-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/networkmanager-list
