[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