Browse Source

Reorder Linux TAP link sequence

This corrects the flow for bringing up a TAP device under Linux.

Closes #1314
Jonathon Fernyhough 4 years ago
parent
commit
9374e45449
1 changed files with 7 additions and 6 deletions
  1. 7 6
      osdep/LinuxEthernetTap.cpp

+ 7 - 6
osdep/LinuxEthernetTap.cpp

@@ -207,12 +207,6 @@ LinuxEthernetTap::LinuxEthernetTap(
 					printf("WARNING: ioctl() failed setting up Linux tap device (bring interface up)\n");
 					return;
 				}
-				ifr.ifr_flags |= IFF_UP;
-				if (ioctl(sock,SIOCSIFFLAGS,(void *)&ifr) < 0) {
-					::close(sock);
-					printf("WARNING: ioctl() failed setting up Linux tap device (bring interface up)\n");
-					return;
-				}
 
 				// Some kernel versions seem to require you to yield while the device comes up
 				// before they will accept MTU and MAC. For others it doesn't matter, but is
@@ -235,6 +229,13 @@ LinuxEthernetTap::LinuxEthernetTap(
 					return;
 				}
 
+				ifr.ifr_flags |= IFF_UP;
+				if (ioctl(sock,SIOCSIFFLAGS,(void *)&ifr) < 0) {
+					::close(sock);
+					printf("WARNING: ioctl() failed setting up Linux tap device (bring interface up)\n");
+					return;
+				}
+
 				fcntl(_fd,F_SETFL,O_NONBLOCK);
 
 				::close(sock);