Re: Creating adhoc wireless Network



> On Mon, 2009-07-06 at 11:18 -0400, nexus aflb com wrote:
>> Hi Dan,
>>
>> I'm playing with the script you provide me but I have a problem :
>>
>> File "Create_Wireless.py", line 135, in <module>
>>     if props['DeviceType'] == 2:   # wifi
>> KeyError: 'DeviceType'
>>
>> if I execute step by steps :
>>
>> >>> print nm_iface.GetDevices()
>> dbus.Array([dbus.ObjectPath('/org/freedesktop/Hal/devices/net_00_24_81_56_2e_52'),
>> dbus.ObjectPath('/org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a')],
>> signature=dbus.Signature('o'))
>> >>> dev_proxy =
>> sys_bus.get_object('org.freedesktop.NetworkManager','/org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a')
>> >>> print dev_proxy
>> <ProxyObject wrapping <dbus._dbus.SystemBus (system) at 0xb7a5811c> :1.7
>> /org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a at 0xb7a5a80c>
>> >>> dev_props_iface = dbus.Interface(dev_proxy,
>> 'org.freedesktop.DBus.Properties')
>> >>> print dev_props_iface
>> <Interface <ProxyObject wrapping <dbus._dbus.SystemBus (system) at
>> 0xb7a5811c> :1.7 /org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a at
>> 0xb7a5a80c> implementing 'org.freedesktop.DBus.Properties' at
>> 0xb7a5a9ac>
>> >>> print
>> dev_props_iface.GetAll('org.freedesktop.NetworkManager.Device')
>> dbus.Dictionary({}, signature=dbus.Signature('sv'))
>>
>> It seems empty ! What's wrong ?
>
> What version of dbus-glib do you have?  What does 'nm-tool' print out
> when you run it?
>
> Dan
>

Version provided by SLED11

dbus-1-glib-0.76-34.3
dbus-1-1.2.10-3.9.1
dbus-1-python-0.83.0-22.10

nm-tool print the two interfaces with parameters :

NetworkManager Tool

State: connected

- Device: eth0
----------------------------------------------------------------
  Type:              Wired
  Driver:            tg3
  State:             connected
  Default:           yes
  HW Address:        00:24:81:56:2E:52

  Capabilities:
    Supported:       yes
    Carrier Detect:  yes
    Speed:           100 Mb/s

  Wired Settings

  IPv4 Settings:
    Address:         10.82.109.86
    Prefix:          24 (255.255.255.0)
    Gateway:         10.82.109.254

    DNS:             10.82.161.3
    DNS:             10.68.161.3


- Device: eth1
----------------------------------------------------------------
  Type:              802.11 WiFi
  Driver:            iwlagn
  State:             connected
  Default:           no
  HW Address:        00:22:FA:46:76:9A

  Capabilities:
    Supported:       yes

  Wireless Settings
    WEP Encryption:  yes
    WPA Encryption:  yes
    WPA2 Encryption: yes

  Wireless Access Points(* = Current AP)
    TESTIPSL:        Infra, 00:03:2F:1D:61:BF, Freq 2437 MHz, Rate 54
Mb/s, Strength 79 WEP
    *iSync:          Ad-Hoc, D6:08:0C:12:06:49, Freq 2412 MHz, Rate 0
Mb/s, Strength 0

  IPv4 Settings:
    Address:         10.42.44.1
    Prefix:          24 (255.255.255.0)
    Gateway:         0.0.0.0


>> Thanks
>>
>>
>> > On Wed, 2009-07-01 at 12:28 -0400, Dan Williams wrote:
>> >> On Wed, 2009-07-01 at 11:26 -0400, nexus aflb com wrote:
>> >> > Thanks for this quick answer.
>> >> >
>> >> > That's what I though. Adding a new connection isnot easy to do...
>> >> >
>> >> > when you say "programmatically ask the system settings service to
>> >> create it"
>> >> >
>> >> > What do you mean ? Doing the same stuff as nm-applet but hardcoded
>> ?
>> >>
>> >> Same way nm-connection-editor asks the system settings service to
>> create
>> >> a new connection when the user hits "Apply": you call the
>> >> AddConnection() method on the
>> >> org.freedesktop.NetworkManagerSettings.System interface with the
>> >> connection details you want to set.
>> >>
>> >> Unfortunately we didn't define that method to return the object path
>> of
>> >> the newly created connection in 0.7 (will probably be fixed in 0.8),
>> so
>> >> you have to wait for the NewConnection signal that the
>> >> system-settings-service emits, look for the UUID of the connection
>> you
>> >> just created to get the object path, and then tell NM to activate
>> that
>> >> connection.
>> >>
>> >> It's pretty straightforward actually, once you know what needs to be
>> >> done.  If PolicyKit throws up a dialog, use
>> polkit-gnome-authorization
>> >> to allow the user to always have the
>> >> org.freedesktop.network-manager-settings.system.modify permission and
>> >> the user won't ever get asked.
>> >
>> > Check out the attached script.  It will create a WEP-enabled adhoc
>> > connection if that connection (identified by UUID) doesn't already
>> > exist, and then direct NetworkManager to activate that connection.
>> The
>> > script is somewhat longer than it needs to be, simply because I made
>> it
>> > more readable, added comments so you can figure out what's going on,
>> and
>> > put some reasonable error checking in.
>> >
>> > Dan
>> > ----
>> >
>> > #!/bin/env python
>> > # -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil;
>> c-basic-offset: 4
>> > -*-
>> > #
>> > # Copyright (C) 2009 Red Hat, Inc.
>> > #
>> > # This program is free software; you can redistribute it and/or modify
>> > # it under the terms of the GNU General Public License as published by
>> > # the Free Software Foundation; either version 2 of the License, or
>> > # (at your option) any later version.
>> > #
>> > # This program 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 General Public License for more details.
>> > #
>> > # You should have received a copy of the GNU General Public License
>> along
>> > # with this program; if not, write to the Free Software Foundation,
>> Inc.,
>> > # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>> > #
>> >
>> > import dbus
>> > import glib
>> > import sys
>> > import posix
>> > import time
>> >
>> > uuid = "cabfaf9e-4043-4afb-8506-0e6f4a225636"
>> >
>> > s_con = { 'id':          'My AdHoc',
>> >           'uuid':        uuid,
>> >           'type':        '802-11-wireless',
>> >           'autoconnect': False,
>> >           'name':        'connection' }
>> >
>> > s_wifi = { 'ssid':     dbus.ByteArray("foobar"),
>> >            'mode':     'adhoc',
>> >            'security': '802-11-wireless-security',
>> >            'name':     '802-11-wireless' }
>> >
>> > s_wsec = { 'key-mgmt': 'none',
>> >            'wep-key0': '0123456789abcdef0123456789',
>> >            'name':     '802-11-wireless-security' }
>> >
>> > s_ip4 = { 'method': 'link-local',
>> >           'name':   'ipv4' }
>> >
>> > con = { 'connection': s_con,
>> >         '802-11-wireless': s_wifi,
>> >         '802-11-wireless-security': s_wsec,
>> >         'ipv4': s_ip4 }
>> >
>> > # init dbus
>> > sys_bus = dbus.SystemBus()
>> > ses_bus = dbus.SessionBus()
>> >
>> > ss_proxy =
>> > sys_bus.get_object('org.freedesktop.NetworkManagerSystemSettings',
>> >                           '/org/freedesktop/NetworkManagerSettings')
>> > ss_iface = dbus.Interface(ss_proxy,
>> > 'org.freedesktop.NetworkManagerSettings')
>> > ss_sys_iface = dbus.Interface(ss_proxy,
>> > 'org.freedesktop.NetworkManagerSettings.System')
>> >
>> > nm_proxy = sys_bus.get_object('org.freedesktop.NetworkManager',
>> >                               '/org/freedesktop/NetworkManager')
>> > nm_iface = dbus.Interface(nm_proxy, 'org.freedesktop.NetworkManager')
>> >
>> > pk_proxy =
>> > ses_bus.get_object('org.freedesktop.PolicyKit.AuthenticationAgent',
>> '/')
>> > pk_iface = dbus.Interface(pk_proxy,
>> > 'org.freedesktop.PolicyKit.AuthenticationAgent')
>> >
>> > def find_connection(requested_uuid):
>> >     for c in ss_iface.ListConnections():
>> >         # get the details of the connection
>> >         c_proxy =
>> > sys_bus.get_object('org.freedesktop.NetworkManagerSystemSettings',
>> > c)
>> >         c_iface = dbus.Interface(c_proxy,
>> > 'org.freedesktop.NetworkManagerSettings.Connection')
>> >         settings = c_iface.GetSettings()
>> >         if settings['connection']['uuid'] == requested_uuid:
>> >             # found our connection
>> >             return c
>> >     return None
>> >
>> > def try_add(connection):
>> >     try:
>> >         # Ask the system settings service to create the connection
>> >         ss_sys_iface.AddConnection(connection)
>> >         return None
>> >     except Exception, e:
>> >         parts = str(e).split(' ')
>> >         if
>> > parts[0].find('org.freedesktop.NetworkManagerSettings.System.NotPrivileged')
>> > < 0:
>> >             # not a permission denied, give up and exit
>> >             print e
>> >             sys.exit(1)
>> >         # yay, permission denied, we can handle this
>> >         return parts[1]
>> >
>> > # MAIN PROGRAM
>> >
>> > con_path = find_connection(uuid)
>> > if not con_path:
>> >     # Try to create the connection, which could fail if we need
>> > authorization.
>> >     # If auth is required, get the auth and try adding it again
>> >     action = try_add(con)
>> >     if action:
>> >         gained = pk_iface.ObtainAuthorization(action, 0,
>> posix.getpid())
>> >         if gained:
>> >             # Yay, we have the privilege now, try adding again
>> >             action = try_add(con)
>> >             if action:
>> >                 # hmm, something went wrong and PolicyKit wasn't able
>> to
>> > auth the user
>> >                 sys.exit(1)
>> >
>> >             con_path = find_connection(uuid)
>> >
>> > # Check again in case it was just added
>> > if not con_path:
>> >     print "Couldn't get newly created connection from system settings"
>> >
>> > # Find a wifi device to activate this connection on
>> > dev_path = None
>> > for dev in nm_iface.GetDevices():
>> >     dev_proxy = sys_bus.get_object('org.freedesktop.NetworkManager',
>> dev)
>> >     dev_props_iface = dbus.Interface(dev_proxy,
>> > 'org.freedesktop.DBus.Properties')
>> >     props =
>> > dev_props_iface.GetAll('org.freedesktop.NetworkManager.Device')
>> >     if props['DeviceType'] == 2:   # wifi
>> >         dev_path = dev
>> >         break
>> >
>> > if not dev_path:
>> >     print "No wifi devices available"
>> >     sys.exit(1)
>> >
>> > # Now ask NM to activate that connection
>> > active_path =
>> > nm_iface.ActivateConnection('org.freedesktop.NetworkManagerSystemSettings',
>> >                                           con_path, dev_path, "/")
>> > if not active_path:
>> >     print "Couldn't activate connection"
>> >     sys.exit(1)
>> >
>> > # Wait for the connection to become active
>> > active_proxy = sys_bus.get_object('org.freedesktop.NetworkManager',
>> > active_path)
>> > active_props_iface = dbus.Interface(active_proxy,
>> > 'org.freedesktop.DBus.Properties')
>> >
>> > state = 0
>> > while state != 2:  # 2 == activated
>> >     state =
>> > active_props_iface.Get('org.freedesktop.NetworkManager.Connection.Active',
>> > 'State')
>> >     if state != 2:
>> >         print "waiting for connection to become active..."
>> >         time.sleep(1)
>> >
>> > print "activated!"
>> >
>> >
>> >
>>
>>
>
>




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]