diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-11-24 15:24:05 +0100 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-11-24 15:24:05 +0100 |
commit | 8ab3e61d98b6cdda739033aa725fd43d447a8a2c (patch) | |
tree | 41d60db431544d60afc367ee4594dd52652e8862 | |
parent | c678775fd7e36250be2c036e4746d8af0164fea9 (diff) | |
download | connman-8ab3e61d98b6cdda739033aa725fd43d447a8a2c.tar.gz connman-8ab3e61d98b6cdda739033aa725fd43d447a8a2c.tar.bz2 connman-8ab3e61d98b6cdda739033aa725fd43d447a8a2c.zip |
tethering: Disable forward delay on the tethering bridge
-rw-r--r-- | src/tethering.c | 36 |
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) |