diff -Naur madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_input.c ../madwifi-hal-0.10.5.6/net80211/ieee80211_input.c --- madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_input.c 2008-08-20 17:45:54.000000000 +0200 +++ ../madwifi-hal-0.10.5.6/net80211/ieee80211_input.c 2008-08-19 09:12:22.000000000 +0200 @@ -1713,7 +1713,7 @@ /* Reject any 0 length ssids */ \ if (_ssid[1] == 0) { \ vap->iv_stats.is_rx_ssidmismatch++; \ - return; \ + return 0; \ } \ \ traverse = ic->karma_list; \ @@ -1732,14 +1732,14 @@ ieee80211_print_essid(_ssid + 2, _ssid[1]); \ printk ("] not found in whitelist so rejecting\n"); \ vap->iv_stats.is_rx_ssidmismatch++; \ - return; \ + return 0; \ } \ if (karma_match && !ic->ic_karma_black_white) { \ printk ("KARMA: ssid ["); \ ieee80211_print_essid(_ssid + 2, _ssid[1]); \ printk ("] found in blacklist so rejecting\n"); \ vap->iv_stats.is_rx_ssidmismatch++; \ - return; \ + return 0; \ } \ } while (0) diff -Naur madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_ioctl.h ../madwifi-hal-0.10.5.6/net80211/ieee80211_ioctl.h --- madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_ioctl.h 2008-08-20 17:45:54.000000000 +0200 +++ ../madwifi-hal-0.10.5.6/net80211/ieee80211_ioctl.h 2008-08-19 09:13:53.000000000 +0200 @@ -643,6 +643,13 @@ IEEE80211_PARAM_BEACON_MISS_THRESH = 73, /* Beacon miss threshold (in beacons) */ IEEE80211_PARAM_BEACON_MISS_THRESH_MS = 74, /* Beacon miss threshold (in ms) */ IEEE80211_PARAM_RSSI_EWMA = 75, + + /* special ops */ + IEEE80211_PARAM_KARMA = 101, /* Turn Karma on and off */ + IEEE80211_PARAM_KARMA_BLACK_WHITE = 102, /* Karma black and white listing */ + IEEE80211_PARAM_KARMA_ADD_SSID = 103, /* Add an ssid to the Karma list */ + IEEE80211_PARAM_KARMA_CLEAR_SSID_LIST = 104, /* Clear the Karma ssid list */ + IEEE80211_PARAM_DRAINTXQ = 76, /* Drain transmit queues */ IEEE80211_PARAM_STOP_QUEUE = 77, /* Stop the device queue (for testing) */ IEEE80211_PARAM_TXTIMEOUT = 78, /* Simulate Transmit timeout */ diff -Naur madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_var.h ../madwifi-hal-0.10.5.6/net80211/ieee80211_var.h --- madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_var.h 2008-08-20 17:45:54.000000000 +0200 +++ ../madwifi-hal-0.10.5.6/net80211/ieee80211_var.h 2008-08-19 09:09:14.000000000 +0200 @@ -512,6 +512,11 @@ /* MHz to IEEE channel conversion */ u_int (*ic_mhz2ieee)(struct ieee80211com *, u_int, u_int); + u_int8_t ic_karma; /* enable KARMA */ + u_int8_t ic_karma_black_white; /* KARMA black or white list*/ + karma_ssid_t *karma_list; + + #ifdef ATH_REVERSE_ENGINEERING /* debug and reverse engineering hooks */ void (*ic_registers_dump)(struct ieee80211com *); diff -Naur madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_wireless.c ../madwifi-hal-0.10.5.6/net80211/ieee80211_wireless.c --- madwifi-hal-0.10.5.6-r3835-20080801/net80211/ieee80211_wireless.c 2008-08-20 17:45:54.000000000 +0200 +++ ../madwifi-hal-0.10.5.6/net80211/ieee80211_wireless.c 2008-08-19 09:06:18.000000000 +0200 @@ -5738,6 +5738,19 @@ 0, IW_PRIV_TYPE_APPIEBUF, "getiebuf" }, { IEEE80211_IOCTL_FILTERFRAME, IW_PRIV_TYPE_FILTER , 0, "setfilter" }, + /* Karma Ops */ + { IEEE80211_PARAM_KARMA_CLEAR_SSID_LIST, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "clrkarmalist" }, + { IEEE80211_IOCTL_KARMA_ADDSSID, + IW_PRIV_TYPE_SSID , 0, "addkarmassid" }, + { IEEE80211_PARAM_KARMA_BLACK_WHITE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "karma_bw" }, + { IEEE80211_PARAM_KARMA_BLACK_WHITE, + 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_karma_bw" }, + { IEEE80211_PARAM_KARMA, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "karma" }, + { IEEE80211_PARAM_KARMA, + 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_karma" }, { IEEE80211_PARAM_RSSI_EWMA, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rssi_ewma" }, { IEEE80211_PARAM_RSSI_EWMA,