From 8ab3e61d98b6cdda739033aa725fd43d447a8a2c Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Wed, 24 Nov 2010 15:24:05 +0100 Subject: [PATCH] tethering: Disable forward delay on the tethering bridge --- src/tethering.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/tethering.c b/src/tethering.c index c5e957d..31ce0de 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) -- 2.7.4