owlps/librtaputil/rtaputil.h

149 lines
4.1 KiB
C
Raw Normal View History

/*
* This file is part of the rtap localisation project.
*/
#ifndef _LIB_RTAPUTIL_H
#define _LIB_RTAPUTIL_H
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include <sys/types.h>
#include <math.h>
#include <signal.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
#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 premier paquet du couple
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
/* Variables globales */
BOOL run ;
/* 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 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) ;
#endif