Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Jun 2012 07:16:12 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r237358 - user/adrian/ath_radar_stuff/src/qt-pktlog
Message-ID:  <201206210716.q5L7GCRt095655@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Thu Jun 21 07:16:12 2012
New Revision: 237358
URL: http://svn.freebsd.org/changeset/base/237358

Log:
  Initial hacky qt4 experiment in plotting some pcap data.
  
  This is very dirty but it's good enough to look over some basic packet
  captures.

Added:
  user/adrian/ath_radar_stuff/src/qt-pktlog/
  user/adrian/ath_radar_stuff/src/qt-pktlog/Makefile
  user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogData.cpp
  user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogData.h
  user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogDataRadiotap.cpp
  user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogDataRadiotap.h
  user/adrian/ath_radar_stuff/src/qt-pktlog/main.cpp
  user/adrian/ath_radar_stuff/src/qt-pktlog/qt-pktlog.pro

Added: user/adrian/ath_radar_stuff/src/qt-pktlog/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/adrian/ath_radar_stuff/src/qt-pktlog/Makefile	Thu Jun 21 07:16:12 2012	(r237358)
@@ -0,0 +1,214 @@
+#############################################################################
+# Makefile for building: qt-pktlog
+# Generated by qmake (2.01a) (Qt 4.7.4) on: Wed Jun 20 22:53:05 2012
+# Project:  qt-pktlog.pro
+# Template: app
+# Command: /usr/local/bin/qmake-qt4 -o Makefile qt-pktlog.pro
+#############################################################################
+
+####### Compiler, tools and options
+
+CC            = gcc
+CXX           = g++
+DEFINES       = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
+CFLAGS        = -pipe -O2 -Wall -W $(DEFINES)
+CXXFLAGS      = -pipe -O2 -Wall -W $(DEFINES)
+INCPATH       = -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/qt4/QtCore -I/usr/local/include/qt4/QtGui -I/usr/local/include/qt4 -I. -I../../lib -I/usr/local/include/qt4 -I/usr/local/include/qwt6 -I. -I/usr/local/include/qt4 -I/usr/local/include
+LINK          = g++
+LFLAGS        = -Wl,-O1 -pthread -Wl,-rpath,/usr/local/lib/qt4
+LIBS          = $(SUBLIBS)  -L/usr/local/lib/qt4 -L/usr/local/lib -L../../lib/libradarpkt -lpcap -lradarpkt -lqwt6 -lQtGui -L/usr/local/lib -L/usr/local/lib/qt4 -lQtCore 
+AR            = ar cqs
+RANLIB        = 
+QMAKE         = /usr/local/bin/qmake-qt4
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+COPY          = cp -f
+SED           = sed
+COPY_FILE     = $(COPY)
+COPY_DIR      = $(COPY) -R
+STRIP         = 
+INSTALL_FILE  = $(COPY_FILE)
+INSTALL_DIR   = $(COPY_DIR)
+INSTALL_PROGRAM = $(COPY_FILE)
+DEL_FILE      = rm -f
+SYMLINK       = ln -f -s
+DEL_DIR       = rmdir
+MOVE          = mv -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
+
+####### Output directory
+
+OBJECTS_DIR   = ./
+
+####### Files
+
+SOURCES       = main.cpp \
+		PktLogData.cpp \
+		PktLogDataRadiotap.cpp 
+OBJECTS       = main.o \
+		PktLogData.o \
+		PktLogDataRadiotap.o
+DIST          = /usr/local/share/qt4/mkspecs/common/g++.conf \
+		/usr/local/share/qt4/mkspecs/common/unix.conf \
+		/usr/local/share/qt4/mkspecs/qconfig.pri \
+		/usr/local/share/qt4/mkspecs/modules/qt_phonon.pri \
+		/usr/local/share/qt4/mkspecs/modules/qt_webkit_version.pri \
+		/usr/local/share/qt4/mkspecs/features/qt_functions.prf \
+		/usr/local/share/qt4/mkspecs/features/qt_config.prf \
+		/usr/local/share/qt4/mkspecs/features/exclusive_builds.prf \
+		/usr/local/share/qt4/mkspecs/features/default_pre.prf \
+		/usr/local/share/qt4/mkspecs/features/release.prf \
+		/usr/local/share/qt4/mkspecs/features/default_post.prf \
+		/usr/local/share/qt4/mkspecs/features/unix/thread.prf \
+		/usr/local/share/qt4/mkspecs/features/warn_on.prf \
+		/usr/local/share/qt4/mkspecs/features/qt.prf \
+		/usr/local/share/qt4/mkspecs/features/moc.prf \
+		/usr/local/share/qt4/mkspecs/features/resources.prf \
+		/usr/local/share/qt4/mkspecs/features/uic.prf \
+		/usr/local/share/qt4/mkspecs/features/yacc.prf \
+		/usr/local/share/qt4/mkspecs/features/lex.prf \
+		/usr/local/share/qt4/mkspecs/features/include_source_dir.prf \
+		qt-pktlog.pro
+QMAKE_TARGET  = qt-pktlog
+DESTDIR       = 
+TARGET        = qt-pktlog
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .o .c .cpp .cc .cxx .C
+
+.cpp.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cc.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cxx.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.C.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.c.o:
+	$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+
+####### Build rules
+
+all: Makefile $(TARGET)
+
+$(TARGET):  $(OBJECTS)  
+	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: qt-pktlog.pro  /usr/local/share/qt4/mkspecs/freebsd-g++/qmake.conf /usr/local/share/qt4/mkspecs/common/g++.conf \
+		/usr/local/share/qt4/mkspecs/common/unix.conf \
+		/usr/local/share/qt4/mkspecs/qconfig.pri \
+		/usr/local/share/qt4/mkspecs/modules/qt_phonon.pri \
+		/usr/local/share/qt4/mkspecs/modules/qt_webkit_version.pri \
+		/usr/local/share/qt4/mkspecs/features/qt_functions.prf \
+		/usr/local/share/qt4/mkspecs/features/qt_config.prf \
+		/usr/local/share/qt4/mkspecs/features/exclusive_builds.prf \
+		/usr/local/share/qt4/mkspecs/features/default_pre.prf \
+		/usr/local/share/qt4/mkspecs/features/release.prf \
+		/usr/local/share/qt4/mkspecs/features/default_post.prf \
+		/usr/local/share/qt4/mkspecs/features/unix/thread.prf \
+		/usr/local/share/qt4/mkspecs/features/warn_on.prf \
+		/usr/local/share/qt4/mkspecs/features/qt.prf \
+		/usr/local/share/qt4/mkspecs/features/moc.prf \
+		/usr/local/share/qt4/mkspecs/features/resources.prf \
+		/usr/local/share/qt4/mkspecs/features/uic.prf \
+		/usr/local/share/qt4/mkspecs/features/yacc.prf \
+		/usr/local/share/qt4/mkspecs/features/lex.prf \
+		/usr/local/share/qt4/mkspecs/features/include_source_dir.prf \
+		/usr/local/lib/qt4/libQtGui.prl \
+		/usr/local/lib/qt4/libQtCore.prl
+	$(QMAKE) -o Makefile qt-pktlog.pro
+/usr/local/share/qt4/mkspecs/common/g++.conf:
+/usr/local/share/qt4/mkspecs/common/unix.conf:
+/usr/local/share/qt4/mkspecs/qconfig.pri:
+/usr/local/share/qt4/mkspecs/modules/qt_phonon.pri:
+/usr/local/share/qt4/mkspecs/modules/qt_webkit_version.pri:
+/usr/local/share/qt4/mkspecs/features/qt_functions.prf:
+/usr/local/share/qt4/mkspecs/features/qt_config.prf:
+/usr/local/share/qt4/mkspecs/features/exclusive_builds.prf:
+/usr/local/share/qt4/mkspecs/features/default_pre.prf:
+/usr/local/share/qt4/mkspecs/features/release.prf:
+/usr/local/share/qt4/mkspecs/features/default_post.prf:
+/usr/local/share/qt4/mkspecs/features/unix/thread.prf:
+/usr/local/share/qt4/mkspecs/features/warn_on.prf:
+/usr/local/share/qt4/mkspecs/features/qt.prf:
+/usr/local/share/qt4/mkspecs/features/moc.prf:
+/usr/local/share/qt4/mkspecs/features/resources.prf:
+/usr/local/share/qt4/mkspecs/features/uic.prf:
+/usr/local/share/qt4/mkspecs/features/yacc.prf:
+/usr/local/share/qt4/mkspecs/features/lex.prf:
+/usr/local/share/qt4/mkspecs/features/include_source_dir.prf:
+/usr/local/lib/qt4/libQtGui.prl:
+/usr/local/lib/qt4/libQtCore.prl:
+qmake:  FORCE
+	@$(QMAKE) -o Makefile qt-pktlog.pro
+
+dist: 
+	@$(CHK_DIR_EXISTS) .tmp/qt-pktlog1.0.0 || $(MKDIR) .tmp/qt-pktlog1.0.0 
+	$(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/qt-pktlog1.0.0/ && $(COPY_FILE) --parents PktLogData.h PktLogDataRadiotap.h .tmp/qt-pktlog1.0.0/ && $(COPY_FILE) --parents main.cpp PktLogData.cpp PktLogDataRadiotap.cpp .tmp/qt-pktlog1.0.0/ && (cd `dirname .tmp/qt-pktlog1.0.0` && $(TAR) qt-pktlog1.0.0.tar qt-pktlog1.0.0 && $(COMPRESS) qt-pktlog1.0.0.tar) && $(MOVE) `dirname .tmp/qt-pktlog1.0.0`/qt-pktlog1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/qt-pktlog1.0.0
+
+
+clean:compiler_clean 
+	-$(DEL_FILE) $(OBJECTS)
+	-$(DEL_FILE) *~ core *.core
+
+
+####### Sub-libraries
+
+distclean: clean
+	-$(DEL_FILE) $(TARGET) 
+	-$(DEL_FILE) Makefile
+
+
+check: first
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all:
+compiler_moc_header_clean:
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+	-$(DEL_FILE) qmake_image_collection.cpp
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all:
+compiler_uic_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: 
+
+####### Compile
+
+main.o: main.cpp PktLogData.h \
+		PktLogDataRadiotap.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
+
+PktLogData.o: PktLogData.cpp PktLogData.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o PktLogData.o PktLogData.cpp
+
+PktLogDataRadiotap.o: PktLogDataRadiotap.cpp PktLogData.h \
+		PktLogDataRadiotap.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o PktLogDataRadiotap.o PktLogDataRadiotap.cpp
+
+####### Install
+
+install:   FORCE
+
+uninstall:   FORCE
+
+FORCE:
+

Added: user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogData.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogData.cpp	Thu Jun 21 07:16:12 2012	(r237358)
@@ -0,0 +1,66 @@
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "libradarpkt/pkt.h"
+#include "PktLogData.h"
+
+void
+PktLogData::Clear()
+{
+
+	RadarEntries.clear();
+}
+
+void
+PktLogData::Load(const char *file)
+{
+
+	// XXX TODO
+}
+
+void
+PktLogData::AddEntry(struct radar_entry re)
+{
+
+	// Is this correctly creating a copy of 're' and adding that
+	// to the vector?
+	RadarEntries.push_back(re);
+}
+
+//
+// XXX there has to be a clearer way to do this...
+//
+std::vector<double>
+PktLogData::GetRssi()
+{
+	int i;
+
+	std::vector<double> t;
+
+	t.resize(RadarEntries.size());
+
+	for (i = 0; i < RadarEntries.size(); i++) {
+		t[i] = (double) RadarEntries[i].re_rssi;
+	}
+
+	return t;
+}
+
+std::vector<double>
+PktLogData::GetDuration()
+{
+	int i;
+
+	std::vector<double> t;
+
+	t.resize(RadarEntries.size());
+
+	for (i = 0; i < RadarEntries.size(); i++) {
+		t[i] = (double) RadarEntries[i].re_dur;
+	}
+
+	return t;
+
+}

Added: user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogData.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogData.h	Thu Jun 21 07:16:12 2012	(r237358)
@@ -0,0 +1,25 @@
+#ifndef	__PKT_LOG_DATA_H__
+#define	__PKT_LOG_DATA_H__
+
+#include <stdint.h>
+#include <vector>
+
+#include "libradarpkt/pkt.h"
+
+class PktLogData {
+public:
+	/* XXX should be private! */
+	std::vector<struct radar_entry> RadarEntries;
+
+	void Clear();
+	void Load(const char *filename);
+	std::vector<double> GetRssi();
+	std::vector<double> GetDuration();
+	std::vector<uint64_t> GetTimestamp();
+	std::vector<uint32_t> GetFreq();
+	int Size() { return RadarEntries.size(); }
+//private:
+	void AddEntry(struct radar_entry re);
+};
+
+#endif	/* __PKT_LOG_DATA_H__ */

Added: user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogDataRadiotap.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogDataRadiotap.cpp	Thu Jun 21 07:16:12 2012	(r237358)
@@ -0,0 +1,88 @@
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <pcap.h>
+#include <sys/endian.h>
+
+#include "net80211/ieee80211_radiotap.h"
+
+#include "libradarpkt/pkt.h"
+#include "libradarpkt/ar5416_radar.h"
+#include "libradarpkt/ar9280_radar.h"
+
+#include "PktLogData.h"
+#include "PktLogDataRadiotap.h"
+
+PktLogDataRadiotap::~PktLogDataRadiotap()
+{
+
+	this->Close();
+}
+
+bool
+PktLogDataRadiotap::LoadPcapOffline(const char *file, int type)
+{
+	char errbuf[PCAP_ERRBUF_SIZE];
+	unsigned const char *pkt;
+	struct pcap_pkthdr *hdr;
+	int r;
+	struct ieee80211_radiotap_header *rt;
+	struct radar_entry re;
+
+	this->Close();
+	PcapHdl = pcap_open_offline(file, errbuf);
+	if (PcapHdl == NULL) {
+		printf("pcap_open_offline failed: %s\n", errbuf);
+		return false;
+	}
+
+	// Grab data, assume AR5416 for now
+	while ((r = pcap_next_ex(PcapHdl, &hdr, &pkt)) >= 0) {
+		//printf("read: %d byte frame, r=%d\n", hdr->caplen, r);
+		if (r <= 0)
+			continue;
+
+		rt = (struct ieee80211_radiotap_header *) pkt;
+		//printf("read: %d byte frame, r=%d, version=%d\n", hdr->caplen, r, rt->it_version);
+		if (rt->it_version != 0)
+			continue;
+
+		/* XXX length checks, phyerr checks, etc */
+		switch (type) {
+			case CHIP_AR5416:
+				r = ar5416_radar_decode(rt,
+				    (pkt + le16toh(rt->it_len)),
+				    hdr->caplen - le16toh(rt->it_len), &re);
+				break;
+			case CHIP_AR9280:
+				r = ar9280_radar_decode(rt,
+				    (pkt + le16toh(rt->it_len)),
+				    hdr->caplen - le16toh(rt->it_len), &re);
+				break;
+			default:
+				fprintf(stderr, "%s: unknown chip! (%d) \n",
+				    __func__,
+				    type);
+				return (false);
+		}
+		if (r == 0)
+			continue;
+		AddEntry(re);
+	}
+
+	this->Close();
+
+	return true;
+}
+
+void
+PktLogDataRadiotap::Close()
+{
+
+	if (PcapHdl != NULL) {
+		pcap_close(PcapHdl);
+		PcapHdl = NULL;
+	}
+}
+

Added: user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogDataRadiotap.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/adrian/ath_radar_stuff/src/qt-pktlog/PktLogDataRadiotap.h	Thu Jun 21 07:16:12 2012	(r237358)
@@ -0,0 +1,21 @@
+#ifndef	__PKT_LOG_DATA_RADIOTAP_H__
+#define	__PKT_LOG_DATA_RADIOTAP_H__
+
+#include "PktLogData.h"
+#include <pcap.h>
+
+class PktLogDataRadiotap : public PktLogData {
+
+private:
+	pcap_t *PcapHdl;
+
+public:
+	~PktLogDataRadiotap();
+	PktLogDataRadiotap() : PcapHdl(NULL) { };
+	bool LoadPcapOffline(const char *file, int type);
+	bool LoadPcapOnline(const char *ifname, int type);
+	void Close();
+};
+
+
+#endif	/* __PKT_LOG_DATA_RADIOTAP_H__ */

Added: user/adrian/ath_radar_stuff/src/qt-pktlog/main.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/adrian/ath_radar_stuff/src/qt-pktlog/main.cpp	Thu Jun 21 07:16:12 2012	(r237358)
@@ -0,0 +1,90 @@
+#include <QtGui/QApplication>
+#include <QtGui/QMainWindow>
+#include <QtGui/QWidget>
+
+#include <pcap.h>
+
+#include "qwt_plot.h"
+#include "qwt_plot_curve.h"
+#include "qwt_plot_histogram.h"
+
+#include "libradarpkt/pkt.h"
+#include "PktLogData.h"
+#include "PktLogDataRadiotap.h"
+
+#include "libradarpkt/ar5416_radar.h"
+#include "libradarpkt/ar9280_radar.h"
+
+/*
+ * XXX eww, using pointers rather than references.
+ */
+void
+plotSet(QwtPlot *p, PktLogData *pl)
+{
+	QwtPlotCurve *c = new QwtPlotCurve("curve");
+
+	std::vector<double> dur;
+	std::vector<double> rssi;
+
+	p->setTitle("Example");
+	//p->setAutoLegend(true);
+	//p->setLegendPos(Qwt::Bottom);
+
+	// Curve Plot - dots, == scatterplot
+	c->setStyle(QwtPlotCurve::Dots);
+
+	/* Load in values */
+	dur = pl->GetDuration();
+	rssi = pl->GetRssi();
+//	for (int i = 0; i < dur.size(); i++)
+//		printf("%d: dur=%f, rssi=%f\n", i, dur[i], rssi[i]);
+
+	printf("dur size=%d, rssi size=%d\n", dur.size(), rssi.size());
+
+	// Plot them
+	c->setSamples(&dur[0], &rssi[0], dur.size());
+	c->attach(p);
+
+	/* Plot */
+	p->replot();
+	p->show();
+}
+
+static void
+usage()
+{
+	printf("usage: <ar5416|ar9280> <pcap>\n");
+	exit(127);
+}
+
+int
+main(int argc, char *argv[])
+{
+	QApplication a(argc, argv);
+	PktLogDataRadiotap pr;
+	int type = 0;
+
+	if (argc < 3)
+		usage();
+
+	if (strcmp(argv[1], "ar5416")== 0)
+		type = CHIP_AR5416;
+	else if (strcmp(argv[1], "ar9280")== 0)
+		type = CHIP_AR9280;
+	else
+		usage();
+
+	pr.LoadPcapOffline(argv[2], type);
+
+	QwtPlot plot(QwtText("example"));
+
+	// Default size
+	plot.setGeometry(0, 0, 640, 400);
+
+	// Scale
+	plot.setAxisScale(QwtPlot::xBottom, 0.0, 256.0);
+
+	plotSet(&plot, &pr);
+
+	return a.exec();
+}

Added: user/adrian/ath_radar_stuff/src/qt-pktlog/qt-pktlog.pro
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/adrian/ath_radar_stuff/src/qt-pktlog/qt-pktlog.pro	Thu Jun 21 07:16:12 2012	(r237358)
@@ -0,0 +1,14 @@
+######################################################################
+# Automatically generated by qmake (2.01a) Tue Feb 14 14:16:07 2012
+######################################################################
+
+TEMPLATE = app
+TARGET = 
+DEPENDPATH += .
+INCLUDEPATH += . ../../lib/ /usr/local/include/qt4 /usr/local/include/qwt6
+LIBS+=	-L../../lib/libradarpkt -lpcap -lradarpkt -lqwt6
+
+# Input
+HEADERS += PktLogData.h PktLogDataRadiotap.h
+# FORMS += PlotWindow.ui MainWindow.ui
+SOURCES += main.cpp PktLogData.cpp PktLogDataRadiotap.cpp



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206210716.q5L7GCRt095655>