/* $eterna: make-promisc.c,v 1.2 2016/12/29 23:32:13 mrg Exp $ */ /* * make-promisc.c. set an interface to promisc and sleep forever. * helps netbsd cnmac(4) which drops packets for about 9 seconds * every time it goes in or out of promisc. */ #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { struct ifreq ifr; const char *interface = "cnmac0"; int fd; if (argc >= 2) interface = *(++argv); while (interface) { fd = open("/dev/bpf", O_RDWR); if (fd == -1) err(1, "open /dev/bpf"); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)); if (ioctl(fd, BIOCSETIF, &ifr) == -1) err(1, "BIOCSETIF"); if (ioctl(fd, BIOCPROMISC, &ifr) == -1) err(1, "BIOCPROMISC"); //printf("checking intf %s\n", interface); if (argc < 2) break; interface = *(++argv); } // try to ignore reboot time failure. signal(SIGTERM, SIG_IGN); pause(); }