$OpenBSD: patch-pcapsource_h,v 1.1 2006/11/01 21:13:20 kili Exp $

# From upstream SVN.

--- pcapsource.h.orig	Wed Mar 29 05:08:05 2006
+++ pcapsource.h	Fri Oct 20 15:38:06 2006
@@ -74,44 +74,49 @@ extern "C" {
 // Generic pcapsource
 class PcapSource : public KisPacketSource {
 public:
-    PcapSource(string in_name, string in_dev) : KisPacketSource(in_name, in_dev) { }
+    PcapSource(string in_name, string in_dev) : KisPacketSource(in_name, in_dev) { 
+		decode_fcs = 0;
+		crc32_table = NULL;
+	}
 
-    int OpenSource();
-    int CloseSource();
+    virtual int OpenSource();
+    virtual int CloseSource();
 
-    int FetchDescriptor();
+    virtual int FetchDescriptor();
 
-    int FetchPacket(kis_packet *packet, uint8_t *data, uint8_t *moddata);
+    virtual int FetchPacket(kis_packet *packet, uint8_t *data, uint8_t *moddata);
 
     static void Callback(u_char *bp, const struct pcap_pkthdr *header,
                          const u_char *in_data);
 
-    int FetchChannel();
+    virtual int FetchChannel();
+
+	virtual void SetSmartCRC(int in_smart);
 protected:
     // Prism 802.11 headers from wlan-ng tacked on to the beginning of a
     // pcap packet... Snagged from the wlan-ng source
     typedef struct {
-        uint32_t did __attribute__ ((packed));
-        uint16_t status __attribute__ ((packed));
-        uint16_t len __attribute__ ((packed));
-        uint32_t data __attribute__ ((packed));
-    } p80211item_uint32_t;
+        uint32_t did;
+        uint16_t status;
+        uint16_t len;
+        uint32_t data;
+    } __attribute__((__packed__)) p80211item_uint32_t;
 
     typedef struct {
-        uint32_t msgcode __attribute__ ((packed));
-        uint32_t msglen __attribute__ ((packed));
-        uint8_t devname[WLAN_DEVNAMELEN_MAX] __attribute__ ((packed));
-        p80211item_uint32_t hosttime __attribute__ ((packed));
-        p80211item_uint32_t mactime __attribute__ ((packed));
-        p80211item_uint32_t channel __attribute__ ((packed));
-        p80211item_uint32_t rssi __attribute__ ((packed));
-        p80211item_uint32_t sq __attribute__ ((packed));
-        p80211item_uint32_t signal __attribute__ ((packed));
-        p80211item_uint32_t noise __attribute__ ((packed));
-        p80211item_uint32_t rate __attribute__ ((packed));
-        p80211item_uint32_t istx __attribute__ ((packed));
-        p80211item_uint32_t frmlen __attribute__ ((packed));
-    } wlan_ng_prism2_header;
+        uint32_t msgcode;
+        uint32_t msglen;
+        uint8_t devname[WLAN_DEVNAMELEN_MAX];
+        p80211item_uint32_t hosttime;
+        p80211item_uint32_t mactime;
+        p80211item_uint32_t channel;
+        p80211item_uint32_t rssi;
+        p80211item_uint32_t sq;
+        p80211item_uint32_t signal;
+        p80211item_uint32_t noise;
+        p80211item_uint32_t rate;
+        p80211item_uint32_t istx;
+        p80211item_uint32_t frmlen;
+    }  __attribute__((__packed__)) wlan_ng_prism2_header;
 
     // Prism 802.11 headers from the openbsd Hermes drivers, even though they don't return
     // a valid linktype yet.  Structure lifted from bsd_airtools by dachb0den labs.
@@ -166,6 +171,10 @@ protected:
     pcap_t *pd;
     int datalink_type;
 
+	// Do we do anything intelligent with the FCS?
+	int decode_fcs;
+	unsigned int *crc32_table;
+
     // Some toggles for subclasses to use
     int toggle0;
     int toggle1;
@@ -179,7 +188,7 @@ public:
     int OpenSource();
     int FetchPacket(kis_packet *packet, uint8_t *data, uint8_t *moddata);
     // int FetchDescriptor();
-    int FetchChannel();
+    virtual int FetchChannel();
 };
 
 #ifdef SYS_LINUX
@@ -202,13 +211,13 @@ public:
     PcapSourceWext(string in_name, string in_dev) : PcapSource(in_name, in_dev) { 
         modern_chancontrol = -1;
     }
-    int FetchChannel();
+    virtual int FetchChannel();
 
     // Small tracker var for intelligent channel control in orinoco.  I don't want to make
     // a new class for 1 int
     int modern_chancontrol;
 protected:
-    int FetchSignalLevels(int *in_siglev, int *in_noiselev);
+    virtual int FetchSignalLevels(int *in_siglev, int *in_noiselev);
 };
 
 // FCS trimming for wext cards
@@ -247,7 +256,7 @@ public:
         PcapSource(in_name, in_dev) { 
             fcsbytes = 4;
         }
-    int FetchChannel();
+    virtual int FetchChannel();
 protected:
     // Signal levels are pulled from the prism2 or avs headers so leave that as 0
     int last_channel;
@@ -276,7 +285,7 @@ class PcapSourceOpenBSDPrism : public Pc
 public:
     PcapSourceOpenBSDPrism(string in_name, string in_dev) :
         PcapSource(in_name, in_dev) { }
-    int FetchChannel();
+    virtual int FetchChannel();
 };
 #endif
 
@@ -317,7 +326,7 @@ public:
     PcapSourceRadiotap(string in_name, string in_dev) :
         PcapSource(in_name, in_dev) { }
     int OpenSource();
-    int FetchChannel();
+    virtual int FetchChannel();
 protected:
     bool CheckForDLT(int dlt);
 };
