diff options
author | Martin Xu <martin.xu@intel.com> | 2010-12-08 16:28:39 +0800 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-12-08 12:22:02 +0100 |
commit | 597ccb4900f3c3d8713529f90a738c6bc6df37c3 (patch) | |
tree | 8f19a2305b5e36e92b03487b618b2a7bcb86bd97 /src/inet.c | |
parent | c1ca4f22c947a0b602b7bc2def7dfafe189174ec (diff) | |
download | connman-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.c | 59 |
1 files changed, 59 insertions, 0 deletions
@@ -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; +} |