svn commit: r237358 - user/adrian/ath_radar_stuff/src/qt-pktlog
Adrian Chadd
adrian at FreeBSD.org
Thu Jun 21 07:16:13 UTC 2012
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
More information about the svn-src-user
mailing list