components/libpcap/patches/20-zonenameprefix.patch
branchs11-update
changeset 2904 ccc9da092f59
parent 2903 bffd78b31bd5
child 2905 8c0fb29f2a1e
--- a/components/libpcap/patches/20-zonenameprefix.patch	Fri Jan 17 12:16:54 2014 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
---- libpcap-1.1.1/pcap-bpf-patch1.c	Mon Jul 18 16:40:47 2011
-+++ patched-libpcap-1.1.1/pcap-bpf.c	Mon Jul 18 16:38:14 2011
-@@ -155,6 +155,10 @@
- 
- #endif /* BIOCGDLTLIST */
- 
-+#if defined(sun) && defined(LIFNAMSIZ) && defined(lifr_zoneid)
-+#include <zone.h>
-+#endif
-+
- /*
-  * We include the OS's <net/bpf.h>, not our "pcap/bpf.h", so we probably
-  * don't get DLT_DOCSIS defined.
-@@ -1393,6 +1397,7 @@
- 	int status = 0;
- 	int fd;
- #ifdef LIFNAMSIZ
-+	char *zonesep;
- 	struct lifreq ifr;
- 	char *ifrname = ifr.lifr_name;
- 	const size_t ifnamsiz = sizeof(ifr.lifr_name);
-@@ -1447,6 +1452,29 @@
- 		goto bad;
- 	}
- 
-+#if defined(LIFNAMSIZ) && defined(ZONENAME_MAX) && defined(lifr_zoneid)
-+	/*
-+	 * Check if the given source network device has a '/' separated
-+	 * zonename prefix string. The zonename prefixed source device
-+	 * can be used by libpcap consumers to capture network traffic
-+	 * in non-global zones from the global zone on Solaris 11 and
-+	 * above. If the zonename prefix is present then we strip the
-+	 * prefix and pass the zone ID as part of lifr_zoneid.
-+	 */
-+	if ((zonesep = strchr(p->opt.source, '/')) != NULL) {
-+		char zonename[ZONENAME_MAX];
-+		int  znamelen;
-+		char *lnamep;
-+
-+		znamelen = zonesep - p->opt.source;
-+		(void) strlcpy(zonename, p->opt.source, znamelen + 1);
-+		lnamep = strdup(zonesep + 1);
-+		ifr.lifr_zoneid = getzoneidbyname(zonename);
-+		free(p->opt.source);
-+		p->opt.source = lnamep;
-+	}
-+#endif
-+
- 	p->md.device = strdup(p->opt.source);
- 	if (p->md.device == NULL) {
- 		snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "strdup: %s",