-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathipv4.h
162 lines (142 loc) · 4.47 KB
/
ipv4.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#ifndef _IPv4_H
#define _IPv4_H
#include "eth.h"
#include <stdint.h>
/* Tamaño en bytes de una dirección IPv4 */
#define IPv4_ADDR_SIZE 4
/* Tamaño máximo de una dirección IPv4 como cadena de caracteres */
#define IPv4_STR_MAX_LENGTH 16
/* Identificador de protocolo IPv4 para Ethernet */
#define IP_TYPE 0x0800
/* Tamaño de la cabecera de un datagrama IPv4 sin opciones */
#define IPv4_HEAD_SIZE 20
/* Tamaño máximo de payload de un datagrama IPv4 sin opciones */
#define IPv4_MAX_PAYLOAD (ETH_MTU - IPv4_HEAD_SIZE)
/* Definición del tipo de la estructura que almacena las direcciones IPv4 */
typedef unsigned char ipv4_addr_t [IPv4_ADDR_SIZE];
/*
* Definición del tipo de la estructura que permite manejar parametros de
* configuración local.
*/
typedef struct ipv4_handler ipv4_handler_t;
/*
* int ipv4_open ()
*
* DESCRIPCIÓN:
* Esta función inicializa el protocolo IPv4 para poder enviar datos.
*
* PARÁMETROS:
* Ninguno.
*
* VALOR DEVUELTO:
* Devuelve 0 si se ha podido inicializar el protocolo.
*
* ERRORES:
* La función devuelve '-1' si se ha producido algún error.
*/
int ipv4_open();
/*
* int ipv4_close ()
*
* DESCRIPCIÓN:
* Esta función finaliza el protocolo IPv4.
*
* PARÁMETROS:
* Ninguno.
*
* VALOR DEVUELTO:
* Devuelve 0 si se ha podido finalizar la instancia del protocolo.
*
* ERRORES:
* La función devuelve '-1' si se ha producido algún error.
*/
int ipv4_close();
/*
* int ipv4_send(ipv4_addr_t ipv4_dest, uint16_t protocol,
* unsigned char *payload, int payload_len );
*
* DESCRIPCIÓN:
* Esta función permite enviar un datagrama IPv4 especificando el protocolo
* de la capa superior.
*
* PARÁMETROS:
* 'ipv4_dest': Dirección IP destino.
* 'protocol': Protocolo de la capa superior.
* 'payload': Payload a enviar.
* 'payload_len': Longitud en bytes del payload.
*
* VALOR DEVUELTO:
* Devuelve el número de bytes enviados.
*
* ERRORES:
* La función devuelve '-1' si se ha producido algún error.
*/
int ipv4_send(ipv4_addr_t ipv4_dest, uint16_t protocol, unsigned char * payload, int payload_len );
/*
* int ipv4_recv(ipv4_addr_t ipv4_src, uint16_t protocol,
* unsigned char *buffer, long int timeout );
*
* DESCRIPCIÓN:
* Esta función permite recibir un datagrama IPv4 desde el nivel de enlace
* especificando el protocolo de la capa superior.
*
* PARÁMETROS:
* 'ipv4_src': Dirección IP origen.
* 'protocol': Protocolo de la capa superior.
* 'buffer': Buffer para almacenar los datos recibidos.
* 'timeout': Tiempo en milisegundos que debe esperarse a recibir un datagrama
* antes de retornar. Un número negativo indicará que debe
* esperarse indefinidamente, mientras que con un '0' la función
* retornará inmediatamente, se haya recibido o no un datagrama.
*
* VALOR DEVUELTO:
* Devuelve el número de bytes recibidos.
*
* ERRORES:
* La función devuelve '-1' si se ha producido algún error.
*/
int ipv4_recv(ipv4_addr_t ipv4_src, uint16_t protocol, unsigned char *buffer, long int timeout );
/*
* uint16_t ipv4_checksum ( unsigned char * data, int len )
*
* DESCRIPCIÓN:
* Esta función calcula el checksum IP de los datos especificados.
*
* PARÁMETROS:
* 'data': Puntero a los datos sobre los que se calcula el checksum.
* 'len': Longitud en bytes de los datos.
*
* VALOR DEVUELTO:
* El valor del checksum calculado.
*/
uint16_t ipv4_checksum ( unsigned char * data, int len );
/* void ipv4_addr_str ( ipv4_addr_t addr, char* str );
*
* DESCRIPCIÓN:
* Esta función genera una cadena de texto que representa la dirección IPv4
* indicada.
*
* PARÁMETROS:
* 'addr': La dirección IP que se quiere representar textualente.
* 'str': Memoria donde se desea almacenar la cadena de texto generada.
* Deben reservarse al menos 'IPv4_STR_MAX_LENGTH' bytes.
*/
void ipv4_addr_str ( ipv4_addr_t addr, char* str );
/* int ipv4_str_addr ( char* str, ipv4_addr_t addr );
*
* DESCRIPCIÓN:
* Esta función analiza una cadena de texto en busca de una dirección IPv4.
*
* PARÁMETROS:
* 'str': La cadena de texto que se desea procesar.
* 'addr': Memoria donde se almacena la dirección IPv4 encontrada.
*
* VALOR DEVUELTO:
* Se devuelve 0 si la cadena de texto representaba una dirección IPv4.
*
* ERRORES:
* La función devuelve -1 si la cadena de texto no representaba una
* dirección IPv4.
*/
int ipv4_str_addr ( char* str, ipv4_addr_t addr );
#endif /* _IPv4_H */