From owner-svn-src-user@FreeBSD.ORG Thu Jun 21 07:16:12 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DE40C106564A; Thu, 21 Jun 2012 07:16:12 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C7D2F8FC0C; Thu, 21 Jun 2012 07:16:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5L7GCcl095662; Thu, 21 Jun 2012 07:16:12 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5L7GCRt095655; Thu, 21 Jun 2012 07:16:12 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201206210716.q5L7GCRt095655@svn.freebsd.org> From: Adrian Chadd Date: Thu, 21 Jun 2012 07:16:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237358 - user/adrian/ath_radar_stuff/src/qt-pktlog X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jun 2012 07:16:13 -0000 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 +#include +#include + +#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 +PktLogData::GetRssi() +{ + int i; + + std::vector t; + + t.resize(RadarEntries.size()); + + for (i = 0; i < RadarEntries.size(); i++) { + t[i] = (double) RadarEntries[i].re_rssi; + } + + return t; +} + +std::vector +PktLogData::GetDuration() +{ + int i; + + std::vector 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 +#include + +#include "libradarpkt/pkt.h" + +class PktLogData { +public: + /* XXX should be private! */ + std::vector RadarEntries; + + void Clear(); + void Load(const char *filename); + std::vector GetRssi(); + std::vector GetDuration(); + std::vector GetTimestamp(); + std::vector 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 +#include +#include + +#include +#include + +#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 + +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 +#include +#include + +#include + +#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 dur; + std::vector 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: \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