Changeset 126 for trunk

Show
Ignore:
Timestamp:
03/19/07 20:32:50 (22 months ago)
Author:
jwright
Message:

Fixed bug in madwifing where linktype wasn't set after creating lorconN vap, error in iwpriv for rt2570

Location:
trunk
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/madwifing_control.c

    r117 r126  
    4242#include <errno.h> 
    4343 
     44#include "tx80211.h" 
    4445#include "ifcontrol_linux.h" 
    4546 
     
    5455 
    5556        if ((devdir = opendir(dirpath)) == NULL) { 
    56                 snprintf(errstr, 1024, "madwifing sys directory open failed: %s %s", 
     57                snprintf(errstr, TX80211_STATUS_MAX, "madwifing sys directory open failed: %s %s", 
    5758                                 dirpath, strerror(errno)); 
    5859                return NULL; 
     
    101102 
    102103        if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { 
    103                 snprintf(errstr, 1024, "Failed to create socket to madwifi: %s", 
     104                snprintf(errstr, TX80211_STATUS_MAX, "Failed to create socket to madwifi: %s", 
    104105                                 strerror(errno)); 
    105106                return -1; 
     
    109110        strncpy(ifr.ifr_name, ifname, IFNAMSIZ); 
    110111        if (ioctl(sock, SIOC80211IFDESTROY, &ifr) < 0) { 
    111                 snprintf(errstr, 1024, "Failed to destroy VAP: %s", strerror(errno)); 
     112                snprintf(errstr, TX80211_STATUS_MAX, "Failed to destroy VAP: %s", strerror(errno)); 
    112113                close(sock); 
    113114                return -1; 
     
    170171        } 
    171172 
     173        if (madwifing_setdevtype(ifr.ifr_name, ARPHDR_RADIOTAP, errstr) < 0) { 
     174                return -1; 
     175        } 
     176 
    172177        strncpy(retvapname, ifr.ifr_name, IFNAMSIZ); 
    173178        close(sock); 
     
    176181} 
    177182 
     183/*  
     184 * Set the device link type for the named interface by changing the dev_type 
     185 * file in the sys filesystem. 
     186 */ 
     187int madwifing_setdevtype(const char *ifname, char *devtype, char *errstr) 
     188{ 
     189        FILE *fp; 
     190        char athdevpath[64]; 
     191        int ret; 
     192 
     193        snprintf(athdevpath, 64, "/proc/sys/net/%s/dev_type", ifname); 
     194         
     195        fp = fopen(athdevpath, "w"); 
     196        if (!fp) { 
     197                snprintf(errstr, TX80211_STATUS_MAX, "Error setting madwifi-ng " 
     198                                 "capture header type, unable to open proc device \"%s\"", 
     199                                 athdevpath); 
     200                return -1; 
     201        } 
     202 
     203        ret = fprintf(fp, "%s\n", devtype); 
     204        if (ret < 0) { 
     205                snprintf(errstr, TX80211_STATUS_MAX, "Error setting madwifi-ng " 
     206                                 "capture header type, unable to write to proc device \"%s\"", 
     207                                 athdevpath); 
     208                return ret; 
     209        } 
     210 
     211        fclose(fp); 
     212        return 0; 
     213} 
     214 
    178215#endif /* linux */ 
    179216 
  • trunk/madwifing_control.h

    r116 r126  
    3737#define IEEE80211_M_MONITOR     8 
    3838 
     39#define ARPHDR_RADIOTAP "803" 
     40 
    3941struct madwifi_vaps { 
    4042        char **vaplist; 
     
    5557                                                char *retvapname, int vapmode, int vapflags); 
    5658 
     59/* Set the device type for a VAP */ 
     60int madwifing_setdevtype(const char *ifname, char *devtype, char *errstr); 
     61 
    5762#endif 
    5863#endif 
  • trunk/mwnginject.c

    r125 r126  
    8989} 
    9090 
    91 int madwifing_devtype(struct tx80211 *in_tx, char *devtype) 
    92 { 
    93         FILE *fp; 
    94         char athdevpath[64]; 
    95         int ret; 
    96  
    97         snprintf(athdevpath, 64, "/proc/sys/net/%s/dev_type", in_tx->ifname); 
    98          
    99         fp = fopen(athdevpath, "w"); 
    100         if (!fp) { 
    101                 snprintf(in_tx->errstr, TX80211_STATUS_MAX, "Error setting madwifi-ng " 
    102                                  "capture header type, unable to open proc device \"%s\"", 
    103                                  athdevpath); 
    104                 return -1; 
    105         } 
    106  
    107         ret = fprintf(fp, "%s\n", devtype); 
    108         if (ret < 0) { 
    109                 snprintf(in_tx->errstr, TX80211_STATUS_MAX, "Error setting madwifi-ng " 
    110                                  "capture header type, unable to write to proc device \"%s\"", 
    111                                  athdevpath); 
    112                 return ret; 
    113         } 
    114  
    115         fclose(fp); 
    116         return 0; 
    117 } 
    118  
    11991int madwifing_setfuncmode(struct tx80211 *wtinj, int funcmode) 
    12092{ 
     
    12698                funcmode == TX80211_FUNCMODE_INJMON) { 
    12799 
    128                 /* If we weren't passed a rfmon vap already... */ 
    129                 if (madwifing_devtype(wtinj, ARPHDR_RADIOTAP) != 0) { 
     100                /* 
     101                 * If we weren't passed a rfmon vap already... This will faile 
     102                 * for the master interface it doesn't get a /sys entry i 
     103                 */ 
     104                if (madwifing_setdevtype(wtinj->ifname, ARPHDR_RADIOTAP,  
     105                                wtinj->errstr) != 0) { 
    130106                        if (wtinj->extra != NULL) { 
    131107                                /* If we've got a cached controller name, swap to it */ 
     
    159135 
    160136                }  
     137 
    161138 
    162139                if (wtinj_open(wtinj) != 0) { 
     
    242219        mwng_pkt.plen = len; 
    243220 
    244         if ( 
    245         sendcount = wtinj_send(in_tx, &mwng_pkt) != mwng_pkt.plen); 
     221        sendcount = wtinj_send(in_tx, &mwng_pkt); 
    246222        free(pkt); 
    247223 
     
    249225                return TX80211_ENOTX; 
    250226        } else if (sendcount != mwng_pkt.plen) { 
     227                snprintf(in_tx->errstr, TX80211_STATUS_MAX, 
     228                        "Error sending packet data, partial write."); 
    251229                return TX80211_EPARTTX; 
    252230        } else { 
  • trunk/mwnginject.h

    r113 r126  
    5454#include "wtinject.h" 
    5555 
    56 #define ARPHDR_RADIOTAP "803" 
    57  
    5856enum mwng_ieee80211_phymode { 
    5957        MWNG_IEEE80211_MODE_AUTO     = 0,    /* autoselect */ 
     
    7068int tx80211_madwifing_capabilities(); 
    7169int madwifing_open(struct tx80211 *in_tx); 
    72 int madwifing_devtype(struct tx80211 *in_tx, char *devtype); 
    7370int madwifing_send(struct tx80211 *in_tx, struct tx80211_packet *in_pkt); 
    7471int madwifing_setfuncmode(struct tx80211 *in_tx, int funcmode); 
  • trunk/rt2570inject.c

    r113 r126  
    6060 
    6161        /* Call private ioctl "rfmontx" to enable raw TX */ 
    62         if (iwconfig_set_charpriv(in_tx->ifname, "rfmontx", "1", errstr) != 0) { 
     62        if (iwconfig_set_intpriv(in_tx->ifname, "rfmontx", 1, 0, errstr) != 0) { 
    6363                fprintf(stderr, "Error enabling rfmontx private ioctl: %s\n", 
    6464                                errstr); 
  • trunk/tx80211.c

    r123 r126  
    2929#include <unistd.h> 
    3030#include <string.h> 
     31#include <stdlib.h> 
    3132 
    3233#include "tx80211.h"