| 1271 | } |
| 1272 | |
| 1273 | static int |
| 1274 | getifflags(const char *ifname, int us) |
| 1275 | { |
| 1276 | struct ifreq my_ifr; |
| 1277 | int s; |
| 1278 | |
| 1279 | memset(&my_ifr, 0, sizeof(my_ifr)); |
| 1280 | (void) strlcpy(my_ifr.ifr_name, ifname, sizeof(my_ifr.ifr_name)); |
| 1281 | if (us < 0) { |
| 1282 | if ((s = socket(AF_LOCAL, SOCK_DGRAM, 0)) < 0) |
| 1283 | err(1, "socket(family AF_LOCAL,SOCK_DGRAM"); |
| 1284 | } else |
| 1285 | s = us; |
| 1286 | if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&my_ifr) < 0) { |
| 1287 | Perror("ioctl (SIOCGIFFLAGS)"); |
| 1288 | #ifdef FSTACK |
| 1289 | ff_ipc_exit(); |
| 1290 | #endif |
| 1291 | exit(1); |
| 1292 | } |
| 1293 | if (us < 0) |
| 1294 | close(s); |
| 1295 | return ((my_ifr.ifr_flags & 0xffff) | (my_ifr.ifr_flagshigh << 16)); |
| 1296 | } |
| 1297 | |
| 1298 | /* |
| 1299 | * Note: doing an SIOCIGIFFLAGS scribbles on the union portion |