[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, master, updated. milestone4-368-g700ab82

Michael 'Mickey' Lauer mickey at vanille-media.de
Mon Feb 2 18:51:22 UTC 2009


The following commit has been merged in the master branch:
commit f8798f80f6b4dbd63437d9e87ffd0e460b8ead8c
Author: Michael 'Mickey' Lauer <mickey at vanille-media.de>
Date:   Sun Nov 23 17:18:00 2008 +0100

    onetworkd: simple connection sharing seems to work now!

diff --git a/framework/subsystems/onetworkd/dhcp.py b/framework/subsystems/onetworkd/dhcp.py
new file mode 100644
index 0000000..32c7615
--- /dev/null
+++ b/framework/subsystems/onetworkd/dhcp.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+"""
+Network
+
+(C) 2008 Michael 'Mickey' Lauer <mlauer at vanille-media.de>
+(C) 2008 Openmoko, Inc.
+GPLv2 or later
+
+Package: onetworkd
+Module: dhcp
+
+Support for the Dynamic Host Configuration Protocol
+"""
+
+MODULE_NAME = "onetworkd"
+__version__ = "0.0.0"
+
+from helpers import readFromFile, writeToFile
+
+import subprocess
+
+import logging
+logger = logging.getLogger( MODULE_NAME )
+
+ETC_RESOLV_CONF = "/etc/resolv.conf"
+
+#============================================================================#
+def launchDaemon():
+#============================================================================#
+    subprocess.call( "killall udhcpd".split() )
+    subprocess.call( "udhcpd" )
+
+#============================================================================#
+def prepareDaemonConfigurationForInterface( iface ):
+#============================================================================#
+    name = iface.name()
+    address = iface.ipAddress4()
+
+    nameservers = ""
+    resolv_conf = readFromFile( ETC_RESOLV_CONF ).split( '\n' )
+    for line in resolv.conf:
+        if line.startswith( "nameserver" ):
+            nameservers += ( line.strip().split( ' ' ) )
+            nameservers += " "
+
+    conf_file = daemon_conf_file_template % ( name, nameservers, address )
+
+    writeToFile( ETC_RESOLV_CONF, conf_file )
+
+
+#============================================================================#
+daemon_conf_file_name = "/etc/udhcpd.conf"
+#============================================================================#
+
+#============================================================================#
+daemon_conf_file_template = """# freesmartphone.org /etc/udhcpd.conf
+start           192.168.0.20  # lease range
+end             192.168.0.199 # lease range
+interface       %s            # listen on interface
+option dns      %s            # grab from resolv.conf
+option  subnet  255.255.255.0
+opt     router  %s            # address of interface
+option  lease   864000        # 10 days of seconds
+"""
+#============================================================================#
diff --git a/framework/subsystems/onetworkd/network.py b/framework/subsystems/onetworkd/network.py
index 1e44943..83fc042 100644
--- a/framework/subsystems/onetworkd/network.py
+++ b/framework/subsystems/onetworkd/network.py
@@ -51,6 +51,9 @@ class Interface( object ):
     def __init__( self, name ):
         self._name = name
 
+    def name( self ):
+        return self.name
+
     def ipAddress4( self ):
         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
         return socket.inet_ntoa(fcntl.ioctl(
diff --git a/framework/subsystems/onetworkd/sharing.py b/framework/subsystems/onetworkd/sharing.py
index bac7c17..14fd6be 100644
--- a/framework/subsystems/onetworkd/sharing.py
+++ b/framework/subsystems/onetworkd/sharing.py
@@ -15,6 +15,7 @@ __version__ = "0.0.0"
 
 from network import theNetwork
 from helpers import isValidAddress, writeToFile
+import dhcp
 
 import dbus
 import dbus.service
@@ -54,9 +55,9 @@ class ConnectionSharing( dbus.service.Object ):
     #
     # dbus org.freesmartphone.Network
     #
-    @dbus.service.method( DBUS_INTERFACE_NETWORK, "ss", "",
+    @dbus.service.method( DBUS_INTERFACE_NETWORK, "s", "",
                           async_callbacks=( "dbus_ok", "dbus_error" ) )
-    def ShareConnection( self, interface, address, dbus_ok, dbus_error ):
+    def StartConnectionSharingWithInterface( self, interface, dbus_ok, dbus_error ):
         """
 
         This should be roughly equivalent to:
@@ -66,6 +67,9 @@ class ConnectionSharing( dbus.service.Object ):
         iptables -I OUTPUT 1 -s 192.168.0.202 -j ACCEPT
         iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24
         echo 1 > /proc/sys/net/ipv4/ip_forward
+
+        <prepare udhcpd configuration>
+        <launch udhcpd>
         """
 
         try:
@@ -85,7 +89,7 @@ class ConnectionSharing( dbus.service.Object ):
         # FIXME use dhcp daemon
 
         commands = []
-        commands.append( "iptables -I INPUT 1 -s %s -j ACCEPT" % target_address )
+        commands.append( "iptables -I INPUT 1 -s 192.168.0.0/24 -j ACCEPT" )
         commands.append( "iptables -I OUTPUT 1 -s %s -j ACCEPT" % source_address )
         commands.append( "iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24" )
 
@@ -97,8 +101,20 @@ class ConnectionSharing( dbus.service.Object ):
                 dbus_error( InternalError( "%s gave returncode %d" % ( command, result ) ) )
                 return
         writeToFile( "/proc/sys/net/ipv4/ip_forward", "1" )
+
+
+        dhcp.prepareDaemonConfigurationForInterface( iface )
+        dhcp.launchDaemon()
+
         dbus_ok()
 
+    def StopConnectionSharing( self, interface, dbus_ok, dbus_error ):
+
+        """
+        stop dhcpd daemons
+        clear iptables
+        """
+
 #============================================================================#
 def factory(prefix, controller):
 #============================================================================#

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list