- errbuf[0] = '\0'; /* zero length string */
- pcap = pcap_open_live(
- tmp_device,
- 1, /* snaplen, irrelevant at this point */
- 0, /* promisc, also irrelevant */
- CAP_TIMEOUT,
- errbuf);
-
- if (pcap == NULL)
- errx(1, "pcap_open_live(): %s", errbuf);
+ waited = 0;
+ for (;;) {
+ errbuf[0] = '\0'; /* zero length string */
+ pcap = pcap_open_live(
+ tmp_device,
+ 1, /* snaplen, irrelevant at this point */
+ 0, /* promisc, also irrelevant */
+ CAP_TIMEOUT,
+ errbuf);
+ if (pcap != NULL) break; /* success! */
+
+ if ((wait_secs != -1) && strstr(errbuf, "device is not up")) {
+ if ((wait_secs > 0) && (waited >= wait_secs))
+ errx(1, "waited %d secs, giving up: pcap_open_live(): %s",
+ waited, errbuf);
+
+ verbosef("waited %d secs, interface is not up", waited);
+ sleep(1);
+ waited++;
+ }
+ else errx(1, "pcap_open_live(): %s", errbuf);
+ }