summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-11-24 15:24:05 +0100
committerSamuel Ortiz <sameo@linux.intel.com>2010-11-24 15:24:05 +0100
commit8ab3e61d98b6cdda739033aa725fd43d447a8a2c (patch)
tree41d60db431544d60afc367ee4594dd52652e8862 /src
parentc678775fd7e36250be2c036e4746d8af0164fea9 (diff)
downloadconnman-8ab3e61d98b6cdda739033aa725fd43d447a8a2c.tar.gz
connman-8ab3e61d98b6cdda739033aa725fd43d447a8a2c.tar.bz2
connman-8ab3e61d98b6cdda739033aa725fd43d447a8a2c.zip
tethering: Disable forward delay on the tethering bridge
Diffstat (limited to 'src')
-rw-r--r--src/tethering.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/tethering.c b/src/tethering.c
index c5e957d3..31ce0de4 100644
--- a/src/tethering.c
+++ b/src/tethering.c
@@ -129,6 +129,31 @@ static void dhcp_server_stop(GDHCPServer *server)
g_dhcp_server_unref(server);
}
+static int set_forward_delay(const char *name, unsigned int delay)
+{
+ FILE *f;
+ char *forward_delay_path;
+
+ forward_delay_path =
+ g_strdup_printf("/sys/class/net/%s/bridge/forward_delay", name);
+
+ if (forward_delay_path == NULL)
+ return -ENOMEM;
+
+ f = fopen(forward_delay_path, "r+");
+
+ g_free(forward_delay_path);
+
+ if (f == NULL)
+ return -errno;
+
+ fprintf(f, "%d", delay);
+
+ fclose(f);
+
+ return 0;
+}
+
static int create_bridge(const char *name)
{
int sk, err;
@@ -141,12 +166,17 @@ static int create_bridge(const char *name)
err = ioctl(sk, SIOCBRADDBR, name);
- close(sk);
-
if (err < 0)
return -EOPNOTSUPP;
- return 0;
+ err = set_forward_delay(name, 0);
+
+ if (err < 0)
+ ioctl(sk, SIOCBRDELBR, name);
+
+ close(sk);
+
+ return err;
}
static int remove_bridge(const char *name)