Référence du fichier global.h
#include "lwip/tcp.h"
#include "config.h"
#include "netif/xemacliteif.h"
Aller au code source de ce fichier.
Fonctions | |
void | print (char *ptr) |
Fonction d'affichage d'une chaine de caractères sur stdin (généralement le port série). | |
void | xil_printf (const char *ctrl1,...) |
Fonction d'affichage avancée sur stdin (généralement le port série). | |
void | putnum (unsigned int num) |
Fonction d'affichage d'un nombre hexadécimal sur stdin (généralement le port série). | |
int | main (void) |
Exemple d'utilisation de lwIP avec l'API raw. | |
int | lwip_init (void) |
Initialise la pile TCP/IP de lwIP. | |
netif * | lwip_config (const unsigned char mac[6], const unsigned char ip[4], const unsigned char subnet[4], const unsigned char gateway[4]) |
Configure l'interface réseau de lwIP. | |
int | server_init (short int port) |
Initialise notre serveur. | |
err_t | server_accept (void *arg, struct tcp_pcb *pcb, err_t err) |
Fonction d'acceptation de connexion. | |
err_t | server_recv (void *arg, struct tcp_pcb *pcb, struct pbuf *pbuf, err_t err) |
Fonction appelée lors de la réception de données. | |
err_t | server_sent (void *arg, struct tcp_pcb *pcb, u16_t len) |
Fonction appelée lors de l'acquittement des données émises. | |
void | server_err (void *arg, err_t err) |
Fonction appelée lors d'une erreur. | |
int | client_init (const unsigned char remote_ip[4], short int remote_port) |
Initialise notre client. | |
err_t | client_connected (void *arg, struct tcp_pcb *pcb, err_t err) |
Fonction appelée lorsqu'une connexion à été établie. | |
err_t | client_sent (void *arg, struct tcp_pcb *pcb, u16_t len) |
Fonction appelée lors de l'acquittement des données émises. | |
err_t | client_poll (void *arg, struct tcp_pcb *pcb) |
Fonction appelée régulièrement pour envoyé des données. | |
void | client_err (void *arg, err_t err) |
Fonction appelée lors d'une erreur. | |
err_t | client_recv (void *arg, struct tcp_pcb *pcb, struct pbuf *pbuf, err_t err) |
Fonction appelée lors de la réception de données. | |
void | run (struct netif *netif) |
Fonction principale de l'application. | |
void | print_err (err_t err) |
Affiche sur stdin, de manière lisible, une erreur. | |
Variables | |
XEmacLiteIf_Config | XEmacLiteIf_ConfigTable [] |
Configuration des interfaces réseaux du FPGA (généré par EDK dans le fichier xemac_g.h). |
Documentation des fonctions
err_t client_connected | ( | void * | arg, | |
struct tcp_pcb * | pcb, | |||
err_t | err | |||
) |
Fonction appelée lorsqu'une connexion à été établie.
Cette fonction effectue les opérations suivantes :
- enregistre auprès de lwIP le callback client_recv() qui sera appelé à chaque fois que le client recevra des données.
- amorce le timer qui appelera le callback client_poll() qui sera appelé toutes les POLL_INTERVAL secondes.
- Renvoie:
- ERR_OK en cas de succès, sinon le code d'erreur.
Définition à la ligne 5 du fichier client_connected.c.
Références client_poll(), client_recv(), POLL_INTERVAL, et print().
Référencé par client_init().
void client_err | ( | void * | arg, | |
err_t | err | |||
) |
Fonction appelée lors d'une erreur.
Cette fonction fait simplement appel à print_err().
- Paramètres:
-
arg pointeur sur nos données personnelles. err erreur qui s'est produite.
Définition à la ligne 3 du fichier client_err.c.
Références print(), et print_err().
Référencé par client_init().
int client_init | ( | const unsigned char | remote_ip[4], | |
short int | remote_port | |||
) |
Initialise notre client.
Cette fonction effectue les opérations suivantes :
- alloue un bloc de contrôle TCP pour lwIP.
- enregistre auprès de lwIP le pointeur de client_close qui sera passée en tant que paramètre arg à toutes nos fonctions callback du serveur.
- enregistre auprès de lwIP le callback client_err() qui sera appelé à chaque fois qu'une erreur se produit.
- initialise la connexion et enregistre le callback client_connected() qui sera appelé lorsque la connexion sera établie.
- Paramètres:
-
remote_ip adresse du serveur sur lequel se connecter. remote_port numéro de port du serveur sur lequel se connecter.
- Renvoie:
- -1 en cas d'erreur, 0 sinon.
Définition à la ligne 9 du fichier client_init.c.
Références client_close, client_connected(), client_err(), et print().
Référencé par main().
err_t client_poll | ( | void * | arg, | |
struct tcp_pcb * | pcb | |||
) |
Fonction appelée régulièrement pour envoyé des données.
Cette fonction effectue les opérations suivantes :
- initialise un paquet.
- enregistre le nom de l'entreprise "SMP" dans la charge du paquet.
- envoie le paquet.
- enregistre auprès de lwIP le callback client_sent() qui sera appelé lorsque les données émise seront acquittées.
- libère la mémoire de ce paquet (le contenu est copier dans l'appel à tcp_write, cf le troisème paramètre).
- en fontion de la configuration, ferme la connexion.
- Renvoie:
- ERR_OK en cas de succès, sinon le code d'erreur.
Définition à la ligne 6 du fichier client_poll.c.
Références client_close, et client_sent().
Référencé par client_connected().
err_t client_recv | ( | void * | arg, | |
struct tcp_pcb * | pcb, | |||
struct pbuf * | pbuf, | |||
err_t | err | |||
) |
Fonction appelée lors de la réception de données.
Cette fonction effectue les opérations suivantes :
- affiche le nombre de données reçues.
- enregistre auprès de LwIP le nombre de données reçues.
- libère le paquet reçu.
- Renvoie:
- ERR_OK en cas de succès, sinon le code d'erreur.
Définition à la ligne 5 du fichier client_recv.c.
Références print(), et putnum().
Référencé par client_connected().
err_t client_sent | ( | void * | arg, | |
struct tcp_pcb * | pcb, | |||
u16_t | len | |||
) |
Fonction appelée lors de l'acquittement des données émises.
Cette fonction ne fait qu'afficher sur stdin le nombre d'octets envoyé avec succès.
- Paramètres:
-
arg pointeur sur nos données personnelles. pcb pointeur sur le PCB de la connexion. len taille des données émises correctement.
- Renvoie:
- ERR_OK en cas de succès, sinon le code d'erreur.
Définition à la ligne 5 du fichier client_sent.c.
Références print(), et putnum().
Référencé par client_poll().
struct netif* lwip_config | ( | const unsigned char | mac[6], | |
const unsigned char | ip[4], | |||
const unsigned char | subnet[4], | |||
const unsigned char | gateway[4] | |||
) |
Configure l'interface réseau de lwIP.
Cette fonction effectue les opérations suivantes :
- enregistre l'adresse MAC auprès du pilote, cette fonction fait partie du portage de la pile lwIP par Xilinx.
- configure l'interface réseau et initialise le périphérique grâce au callback xemacif_init(), ce dernier faisant partie du portage Xilinx de lwIP. Le callback ip_input() est une fonction fournie par lwIP, permettant de traiter les paquets IP entrants.
- configure notre interface réseau comme étant celle par défaut.
- Paramètres:
-
mac adresse MAC de l'interface réseau. ip adresse IP du FPGA. subnet adresse de sous réseau. gateway adresse de la passerelle.
- Renvoie:
- NULL en cas d'erreur, sinon un pointeur sur la structure représentant notre interface réseau.
Définition à la ligne 7 du fichier lwip_config.c.
Références EMAC, loopif_init(), print(), et XEmacLiteIf_ConfigTable.
Référencé par main().
int lwip_init | ( | void | ) |
Initialise la pile TCP/IP de lwIP.
Cette fonction effectue les opérations suivantes :
- initialise la couche "system architecture", cette dernière fourni les systèmes de sémaphores et de messages à la pile lwIP. Dans notre cas (Virtex2Pro) cette fonction ne fait rien puisque c'est la couche Xilinx (XMK) qui s'en occupe. Nous gardons cet appel par soucis de portabilité.
- initialise le gestionnaire de mémoire dynamique, ce dernier fourni les fonctions mem_malloc(), mem_free(), mem_realloc() pour le fonctionnement de lwIP
- initialise le gestionnaire de mémoire dynamique, ce dernier est spécifique aux protocoles réseaux gérés par lwIP.
- initialise le gestionnaire de paquets. ce dernier s'occupe des paquets IP entrants et sortants.
- initialise la couche d'abstraction des interfaces réseaux, cette dernière permet d'associe une adresses IP, un masque de sous-réseau, une adresse de passerelle, ... , à une interface réseaux.
- initialise la couche TCP. cette dernière est une implémentation de la fameuse pile TCP/IP.
- Renvoie:
- toujours 0, étant donné qu'aucune fonction d'initialisation de lwIP ne renvoie de code d'erreur.
Définition à la ligne 8 du fichier lwip_init.c.
Référencé par main().
int main | ( | void | ) |
Exemple d'utilisation de lwIP avec l'API raw.
Cette fonction effectue les opérations suivantes :
- active les caches d'instructions et de données pour la plage d'adresse [0, 0x7FFFFFF].
- initialise la pile TCP/IP de lwIP.
- configure l'interface réseau de lwIP.
- initialise notre serveur et/ou notre client.
- lance la fonction principale : run().
- Renvoie:
- -1 en cas d'erreur, 0 sinon.
Définition à la ligne 5 du fichier main.c.
Références client_init(), LOCAL_GATEWAY, LOCAL_IP, LOCAL_MAC, LOCAL_PORT, LOCAL_SUBNET, lwip_config(), lwip_init(), print(), REMOTE_IP, REMOTE_PORT, run(), server_init(), et xil_printf().
void print | ( | char * | ptr | ) |
Fonction d'affichage d'une chaine de caractères sur stdin (généralement le port série).
On retrouve cette fonction dans le fichier standalone_v1_00_a/src/print.c
Référencé par client_connected(), client_err(), client_init(), client_recv(), client_sent(), lwip_config(), main(), print_err(), run(), server_err(), server_init(), server_recv(), et server_sent().
void print_err | ( | err_t | err | ) |
Affiche sur stdin, de manière lisible, une erreur.
- Paramètres:
-
err erreur à afficher.
Définition à la ligne 4 du fichier print_err.c.
Références print().
Référencé par client_err(), et server_err().
void putnum | ( | unsigned int | num | ) |
Fonction d'affichage d'un nombre hexadécimal sur stdin (généralement le port série).
On retrouve cette fonction dans le fichier standalone_v1_00_a/src/putnum.c
Référencé par client_recv(), client_sent(), server_recv(), et server_sent().
void run | ( | struct netif * | netif | ) |
Fonction principale de l'application.
Il s'agit de la fonction la plus compliquée de l'application, alors des explications semblent les bienvenues...
Pour que la pile TCP/IP de lwIP fonctionne, il faut appeler certaines fonctions périodiquement. Nous avons utilisé le timer interne au PPC pour effectuer ces appels périodiques, grâce aux fonctions XTime_SetTime() et XTime_GetTime() qui, respectivment, met à jour et lit la valeur du Time Base Register. Ce dernier est sur 64 bits et est incrémenté de 1 à chaque coup d'horloge.
Ainsi, nous pouvons (devons) appeler la fonction tcp_tmr() toutes les 100 milli-secondes et la fonction etharp_tmr() toutes les 10 secondes. Dans les autres "périodes", nous faisons appel à la fonction xemacif_input() afin que lwIP puisse lire les trames Ethernet entrant sur l'interface réseau.
- Paramètres:
-
netif interface réseau où lire les trames Eternet.
- Note:
- TCP_TMR_INTERVAL est la période (en milli-seconde) à laquelle tcp_tmr() doit être appelée.
ARP_TMR_INTERVAL est la période (en milli-seconde) à laquelle etharp_tmr() doit être appelée. Nous avons fait l'hypothèse qu'elle est plus grande que TCP_TMR_INTERVAL.
Définition à la ligne 11 du fichier run.c.
Références print().
Référencé par main().
err_t server_accept | ( | void * | arg, | |
struct tcp_pcb * | pcb, | |||
err_t | err | |||
) |
Fonction d'acceptation de connexion.
Cette fonction enregistre simplement auprès de lwIP le callback server_recv() qui sera appelé lors de la reception de données.
- Paramètres:
-
arg pointeur sur nos données personnelles. pcb pointeur sur le PCB de la connexion. err ERR_OK s'il n'y à pas eu de problème avant l'acceptation de la connexion.
- Renvoie:
- ERR_OK en cas de succès, sinon le code d'erreur.
Définition à la ligne 6 du fichier server_accept.c.
Références server_recv().
Référencé par server_init().
void server_err | ( | void * | arg, | |
err_t | err | |||
) |
Fonction appelée lors d'une erreur.
Cette fonction fait simplement appel à print_err().
- Paramètres:
-
arg pointeur sur nos données personnelles. err erreur qui s'est produite.
Définition à la ligne 3 du fichier server_err.c.
Références print(), et print_err().
Référencé par server_init().
int server_init | ( | short int | port | ) |
Initialise notre serveur.
Cette fonction effectue les opérations suivantes :
- alloue un bloc de contrôle TCP pour lwIP.
- enregistre auprès de lwIP le pointeur de server_close qui sera passée en tant que paramètre arg à toutes nos fonctions callback du serveur.
- enregistre auprès de lwIP le callback server_err() qui sera appelé à chaque fois qu'une erreur se produit.
- initialise le port de connexion.
- place le port dans l'état d'écoute.
- enregistre auprès de lwIP le callback server_accept() qui sera appelé à chaque acceptation de connexion, à partir de ce moment nous sommes capable d'accepter les connexions entrantes.
- Paramètres:
-
port port TCP d'écoute du serveur.
- Renvoie:
- -1 en cas d'erreur, 0 sinon.
- Note:
- PCB signifie Protocol Control Block, il s'agit d'une structure opaque utilisée par lwIP.
Définition à la ligne 9 du fichier server_init.c.
Références print(), server_accept(), server_close, et server_err().
Référencé par main().
err_t server_recv | ( | void * | arg, | |
struct tcp_pcb * | pcb, | |||
struct pbuf * | pbuf, | |||
err_t | err | |||
) |
Fonction appelée lors de la réception de données.
Cette fonction effectue les opérations suivantes :
- si la liste des paquets n'est pas vide (i.e. pbuf != NULL), nous renvoyons simplement les données reçues (uniquement celles du premier paquet).
- enregistre auprès de LwIP le nombre de données reçues.
- enregiste le callback server_sent() qui sera appelé lorsque les données émise seront acquittées.
- en fonction de la configuration, nous fermons la connexion, mais le serveur sera alors à nouveau en état d'écoute sur le port, près à accepter un nouvelle connexion.
- Paramètres:
-
arg pointeur sur nos données personnelles. pcb pointeur sur le PCB de la connexion. pbuf pointeur sue la liste chainée des paquets reçus. err ERR_OK s'il n'y à pas eu de problème avant l'acceptation de la connexion.
- Renvoie:
- ERR_OK en cas de succès, sinon le code d'erreur.
Définition à la ligne 5 du fichier server_recv.c.
Références print(), putnum(), server_close, et server_sent().
Référencé par server_accept().
err_t server_sent | ( | void * | arg, | |
struct tcp_pcb * | pcb, | |||
u16_t | len | |||
) |
Fonction appelée lors de l'acquittement des données émises.
Cette fonction ne fait qu'afficher sur stdin le nombre d'octets envoyé avec succès.
- Paramètres:
-
arg pointeur sur nos données personnelles. pcb pointeur sur le PCB de la connexion. len taille des données émises correctement.
- Renvoie:
- ERR_OK en cas de succès, sinon le code d'erreur.
Définition à la ligne 5 du fichier server_sent.c.
Références print(), et putnum().
Référencé par server_recv().
void xil_printf | ( | const char * | ctrl1, | |
... | ||||
) |
Fonction d'affichage avancée sur stdin (généralement le port série).
On retrouve cette fonction dans le fichier standalone_v1_00_a/src/xil_printf.c
Référencé par main().
Documentation des variables
XEmacLiteIf_Config XEmacLiteIf_ConfigTable[] |
Configuration des interfaces réseaux du FPGA (généré par EDK dans le fichier xemac_g.h).
On retrouve cette variable dans le fichier lwip_v1_00_a/src/contrib/ports/v2pro/netif/xemacif.c
Référencé par lwip_config().