/* * This file is part of the rtap localisation project. */ #ifndef _LIB_RTAPUTIL_H #define _LIB_RTAPUTIL_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LOC_REQUEST_DEFAULT_PORT 9900 // Port sur lequel est envoyée la requête de localisation depuis le mobile #define AGGREGATE_DEFAULT_PORT 9901 // Port d'échange des données entre AP et serveur d'aggrégation /* Type booléen */ typedef enum {FALSE, TRUE} BOOL ; /* Type direction */ typedef enum {NORTH = 1, EAST, SOUTH, WEST} DIRECTION ; /* Message envoyé par l'AP à l'agrégateur */ typedef struct _couple_message { unsigned char ap_mac_addr_bytes[6] ; // Adresse MAC de l'AP émetteur de l'info en octets unsigned char mobile_mac_addr_bytes[6] ; // Adresse MAC du mobile en octets struct timeval request_time ; // Identifiant du paquet = date sur le client struct timeval start_time ; // Heure d'arrivée du paquet sur l'AP unsigned char antenna_signal_dbm ; // Puissance du signal reçu par l'AP du mobile /* Données pour la calibration */ float x_position ; float y_position ; float z_position ; DIRECTION direction ; // Orientation de la demande de localisation } couple_message ; /* Types des paquets capturés (data[rtap_bytes]) */ #define RAW_PACKET_TYPE_BEACON 0x80 #define RAW_PACKET_TYPE_DATA 0x08 /* Protocoles des paquets capturés (data[rtap_bytes+24+8+9]) */ #define RAW_PACKET_PROTO_UDP 0x11 #define RAW_PACKET_PROTO_ICMP 0x01 /* Type de paquet ICMP : octet suivant la fin de l'en-tête IP (data[rtap_bytes+24+8+20]) */ #define RAW_PACKET_ICMP_ECHO 0x08 /* Types de demandes de localisation */ #define PACKET_TYPE_NORMAL 0 #define PACKET_TYPE_CALIBRATION 1 /* Position des champs fixes de l'en-tête rtap (octets) */ #define RTAP_P_HREVISION 0 // Header revision #define RTAP_P_HPAD 1 // Header pad #define RTAP_P_HLENGTH 2 // Header length #define RTAP_P_PRESENTFLAGS 4 // Present flags /* Longueur des champs de l'en-tête rtap (octets) */ #define RTAP_L_HREVISION 1 // Header revision #define RTAP_L_HPAD 1 // Header pad #define RTAP_L_HLENGTH 2 // Header length #define RTAP_L_PRESENTFLAGS 4 // Present flags #define RTAP_L_MACTS 8 // MAC timestamp #define RTAP_L_FLAGS 1 // autre champ de flags #define RTAP_L_RATE 1 // Data rate #define RTAP_L_CHANNEL 2 // Channel #define RTAP_L_CHANNELTYPE 2 // Channel type #define RTAP_L_ANTENNASIGNALDBM 1 // SSI signal dBm #define RTAP_L_ANTENNANOISEDBM 1 // SSI noise dBm #define RTAP_L_ANTENNA 1 // Antenna #define RTAP_L_FHSS 2 #define RTAP_L_LOCKQUALITY 2 #define RTAP_L_TXATTENUATION 2 #define RTAP_L_TXATTENUATIONDB 2 #define RTAP_L_TXATTENUATIONDBM 1 #define RTAP_L_ANTENNASIGNALDB 1 // en dB #define RTAP_L_ANTENNANOISEDB 1 // en dB #define RTAP_L_FCS 4 #define RTAP_L_EXT // Non implémenté /* Positions pour affichage (tableau check de ss_list) */ #define RTAP_MACTS 0 #define RTAP_FLAGS 1 #define RTAP_RATE 2 #define RTAP_CHANNEL 3 // ainsi que RTAP_CHANNELTYPE #define RTAP_FHSS 4 #define RTAP_ANTENNASIGNALDBM 5 #define RTAP_ANTENNANOISEDBM 6 #define RTAP_LOCKQUALITY 7 #define RTAP_TXATTENUATION 8 #define RTAP_TXATTENUATIONDB 9 #define RTAP_TXATTENUATIONDBM 10 #define RTAP_ANTENNA 11 #define RTAP_ANTENNASIGNALDB 12 #define RTAP_ANTENNANOISEDB 13 #define RTAP_FCS 14 /* Taille des en-têtes des paquets (en octets) */ #define IEEE80211_HEADER_SIZE 24 #define LLC_HEADER_SIZE 8 #define IP_HEADER_SIZE 20 #define UDP_HEADER_SIZE 8 /* Fréquences des canaux Wi-Fi en Hz */ #define CHANNEL_1 2412 #define CHANNEL_2 2417 #define CHANNEL_3 2422 #define CHANNEL_4 2427 #define CHANNEL_5 2432 #define CHANNEL_6 2437 #define CHANNEL_7 2442 #define CHANNEL_8 2447 #define CHANNEL_9 2452 #define CHANNEL_10 2457 #define CHANNEL_11 2462 #define CHANNEL_12 2467 #define CHANNEL_13 2472 #define CHANNEL_14 2477 /* Variables globales */ BOOL run ; /* Codes d'erreur des fonctions */ #define ERR_SETTING_MONITOR_MODE 101 #define ERR_SETTING_CHANNEL 102 #define ERR_READING_CHANNEL 103 #define ERR_READING_MODE 104 #define ERR_BAD_SIGNAL 111 /* En-têtes de fonctions */ // Fonctions utilitaires char* mac_bytes_to_string(unsigned char *mac_binary) ; char frequency_to_channel(unsigned short channel) ; unsigned long long timeval_to_ms(struct timeval date) ; unsigned long sub_date(struct timeval sup, struct timeval inf) ; BOOL mac_cmp(unsigned char *mac1, unsigned char *mac2) ; // Signaux void sigint_handler(int num) ; void sigterm_handler(int num) ; // Réseau int create_udp_listening_socket(int port) ; int create_udp_sending_socket(char *server_address, int server_port, struct sockaddr_in *server_description, struct sockaddr_in * client_description) ; int iface_mode_monitor(char *iface) ; int iface_set_channel(char *iface, int channel) ; int iface_channel_hop(char *iface) ; /* Macros */ /* Prend les flags de l'en-tête IEEE 802.11 en paramètre, * retourne 0 si le bit Retry est absent, ou une valeur positive s'il est présent. */ #define IS_RETRY(IEEE80211_FLAGS) ((IEEE80211_FLAGS) & 0x08) #endif