diff --git a/src/utils/brcm_nl.c b/src/utils/brcm_nl.c
index 25cd402e7b1e47243d033866d471d856f1e6657c..80f1aea45697057286c6d4d8ae17109793d7ad44 100644
--- a/src/utils/brcm_nl.c
+++ b/src/utils/brcm_nl.c
@@ -29,6 +29,42 @@
 #define UCI_WIRELESS "wireless"
 #define UCI_WLAN_IFACE "wifi-iface"
 
+
+int if_updown(const char *ifname, bool up)
+{
+	int fd;
+	struct ifreq ifr;
+	short flags;
+
+	if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+		return -1;
+	}
+
+	memset(&ifr, 0, sizeof(ifr));
+	strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+
+	if (ioctl(fd, SIOCGIFFLAGS, &ifr) != 0) {
+		close(fd);
+		return -1;
+	}
+
+	flags = ifr.ifr_flags;
+
+	if (up && !(flags & IFF_UP))
+		ifr.ifr_flags |= IFF_UP;
+
+	if (!up && (flags & IFF_UP))
+		ifr.ifr_flags &= ~IFF_UP;
+
+	if ((flags != ifr.ifr_flags) && (0 != ioctl(fd, SIOCSIFFLAGS, &ifr))) {
+		close(fd);
+		return -1;
+	}
+
+	close(fd);
+	return 0;
+}
+
 static bool get_bridge(char *ifname, char *bridge)
 {
 	strncpy(bridge, "br-lan", 15);
@@ -73,9 +109,10 @@ static int func(struct nl_msg *msg, void *arg)
 						"bridge %s\n", ifname, bridge);
 
 			/* bring up wds interface */
-			ret = if_setflags(ifname, IFF_UP);
+			//ret = if_setflags(ifname, IFF_UP);
+			ret = if_updown(ifname, true);
 			if (!ret)
-				printf("Successfully brought up interface %s",
+				printf("Successfully brought up interface %s\n",
 						ifname);
 			break;
 		}