summaryrefslogtreecommitdiff
path: root/src/inet.c
diff options
context:
space:
mode:
authorMartin Xu <martin.xu@intel.com>2010-12-08 16:28:39 +0800
committerSamuel Ortiz <sameo@linux.intel.com>2010-12-08 12:22:02 +0100
commit597ccb4900f3c3d8713529f90a738c6bc6df37c3 (patch)
tree8f19a2305b5e36e92b03487b618b2a7bcb86bd97 /src/inet.c
parentc1ca4f22c947a0b602b7bc2def7dfafe189174ec (diff)
downloadconnman-597ccb4900f3c3d8713529f90a738c6bc6df37c3.tar.gz
connman-597ccb4900f3c3d8713529f90a738c6bc6df37c3.tar.bz2
connman-597ccb4900f3c3d8713529f90a738c6bc6df37c3.zip
inet: Add connman_inet_[add|remove]_to_bridge() routines
Diffstat (limited to 'src/inet.c')
-rw-r--r--src/inet.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/inet.c b/src/inet.c
index f6b80199..b5cd5280 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -31,6 +31,7 @@
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
+#include <linux/sockios.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <net/ethernet.h>
@@ -1100,3 +1101,61 @@ connman_bool_t connman_inet_compare_subnet(int index, const char *host)
return ((if_addr & netmask_addr) == (host_addr & netmask_addr));
}
+
+int connman_inet_remove_from_bridge(int index, const char *bridge)
+{
+ struct ifreq ifr;
+ int sk, err;
+
+ if (bridge == NULL)
+ return -EINVAL;
+
+ sk = socket(AF_INET, SOCK_STREAM, 0);
+ if (sk < 0)
+ return sk;
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, bridge, IFNAMSIZ - 1);
+ ifr.ifr_ifindex = index;
+
+ err = ioctl(sk, SIOCBRDELIF, &ifr);
+
+ close(sk);
+
+ if (err < 0) {
+ connman_error("Remove interface from bridge error %s",
+ strerror(errno));
+ return err;
+ }
+
+ return 0;
+}
+
+int connman_inet_add_to_bridge(int index, const char *bridge)
+{
+ struct ifreq ifr;
+ int sk, err;
+
+ if (bridge == NULL)
+ return -EINVAL;
+
+ sk = socket(AF_INET, SOCK_STREAM, 0);
+ if (sk < 0)
+ return sk;
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, bridge, IFNAMSIZ - 1);
+ ifr.ifr_ifindex = index;
+
+ err = ioctl(sk, SIOCBRADDIF, &ifr);
+
+ close(sk);
+
+ if (err < 0) {
+ connman_error("Add interface to bridge error %s",
+ strerror(errno));
+ return err;
+ }
+
+ return 0;
+}