 0f3d578efc
			
		
	
	
		0f3d578efc
		
	
	
	
	
		
			
			Remove the GPL notification text from the files that were initially contributed by myself. Signed-hostap: Jouni Malinen <j@w1.fi>
		
			
				
	
	
		
			97 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * PCAP capture file writer
 | |
|  * Copyright (c) 2010, Jouni Malinen <j@w1.fi>
 | |
|  *
 | |
|  * This software may be distributed under the terms of the BSD license.
 | |
|  * See README for more details.
 | |
|  */
 | |
| 
 | |
| #include "utils/includes.h"
 | |
| #include <pcap.h>
 | |
| #include <pcap-bpf.h>
 | |
| 
 | |
| #include "utils/common.h"
 | |
| #include "wlantest.h"
 | |
| 
 | |
| 
 | |
| int write_pcap_init(struct wlantest *wt, const char *fname)
 | |
| {
 | |
| 	wt->write_pcap = pcap_open_dead(DLT_IEEE802_11_RADIO, 4000);
 | |
| 	if (wt->write_pcap == NULL)
 | |
| 		return -1;
 | |
| 	wt->write_pcap_dumper = pcap_dump_open(wt->write_pcap, fname);
 | |
| 	if (wt->write_pcap_dumper == NULL) {
 | |
| 		pcap_close(wt->write_pcap);
 | |
| 		wt->write_pcap = NULL;
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	wpa_printf(MSG_DEBUG, "Writing PCAP dump to '%s'", fname);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| 
 | |
| void write_pcap_deinit(struct wlantest *wt)
 | |
| {
 | |
| 	if (wt->write_pcap_dumper) {
 | |
| 		pcap_dump_close(wt->write_pcap_dumper);
 | |
| 		wt->write_pcap_dumper = NULL;
 | |
| 	}
 | |
| 	if (wt->write_pcap) {
 | |
| 		pcap_close(wt->write_pcap);
 | |
| 		wt->write_pcap = NULL;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| void write_pcap_captured(struct wlantest *wt, const u8 *buf, size_t len)
 | |
| {
 | |
| 	struct pcap_pkthdr h;
 | |
| 
 | |
| 	if (!wt->write_pcap_dumper)
 | |
| 		return;
 | |
| 
 | |
| 	os_memset(&h, 0, sizeof(h));
 | |
| 	gettimeofday(&wt->write_pcap_time, NULL);
 | |
| 	h.ts = wt->write_pcap_time;
 | |
| 	h.caplen = len;
 | |
| 	h.len = len;
 | |
| 	pcap_dump(wt->write_pcap_dumper, &h, buf);
 | |
| }
 | |
| 
 | |
| 
 | |
| void write_pcap_decrypted(struct wlantest *wt, const u8 *buf1, size_t len1,
 | |
| 			  const u8 *buf2, size_t len2)
 | |
| {
 | |
| 	struct pcap_pkthdr h;
 | |
| 	u8 rtap[] = {
 | |
| 		0x00 /* rev */,
 | |
| 		0x00 /* pad */,
 | |
| 		0x08, 0x00, /* header len */
 | |
| 		0x00, 0x00, 0x00, 0x00 /* present flags */
 | |
| 	};
 | |
| 	u8 *buf;
 | |
| 	size_t len;
 | |
| 
 | |
| 	if (!wt->write_pcap_dumper)
 | |
| 		return;
 | |
| 
 | |
| 	os_memset(&h, 0, sizeof(h));
 | |
| 	h.ts = wt->write_pcap_time;
 | |
| 	len = sizeof(rtap) + len1 + len2;
 | |
| 	buf = os_malloc(len);
 | |
| 	if (buf == NULL)
 | |
| 		return;
 | |
| 	os_memcpy(buf, rtap, sizeof(rtap));
 | |
| 	if (buf1) {
 | |
| 		os_memcpy(buf + sizeof(rtap), buf1, len1);
 | |
| 		buf[sizeof(rtap) + 1] &= ~0x40; /* Clear Protected flag */
 | |
| 	}
 | |
| 	if (buf2)
 | |
| 		os_memcpy(buf + sizeof(rtap) + len1, buf2, len2);
 | |
| 	h.caplen = len;
 | |
| 	h.len = len;
 | |
| 	pcap_dump(wt->write_pcap_dumper, &h, buf);
 | |
| 	os_free(buf);
 | |
| }
 |