]> git.llucax.com Git - z.facultad/66.09/etherled.git/blob - src/c/udp.h
Listo el cálculo de checksum de IP.
[z.facultad/66.09/etherled.git] / src / c / udp.h
1 #ifndef _UDP_H_
2 #define _UDP_H_
3
4 #include "types.h"
5 #include "net.h"
6
7 /** @file
8  * Datagrama UDP.
9  *
10  *  0      7 8     15 16    23 24    31  
11  * +--------+--------+--------+--------+ 
12  * |     Source      |   Destination   | 
13  * |      Port       |      Port       | 
14  * +--------+--------+--------+--------+ 
15  * |                 |                 | 
16  * |     Length      |    Checksum     | 
17  * +--------+--------+--------+--------+ 
18  * |                                     
19  * |          data octets ...            
20  * +---------------- ...                 
21  *
22  * Aceptamos sólo datagramas UDP que vayan a el puerto de nuestra aplicación y
23  * cuyo tamaño sea menor a 255. El resto es descartado.
24  * El Length es tanto de la cabecera como datos, por lo tanto el tamaño mínimo
25  * es 8. El checksum no se calcula ni se verifica, ya que sabemos que la capa
26  * inferior (ethernet) tiene verificación de errores de los datos.
27  */
28
29 /** Puerto UDP nuestro */
30 extern uint16 udp_port_local;
31
32 /** Puerto UDP de destino */
33 extern uint16 udp_port_remote;
34
35 /** Tamaño del datagrama UDP */
36 extern byte udp_dgram_len;
37
38 /** Lee la cabecera del datagrama UDP.
39  *
40  * Deja en udp_port_remote el puerto de origen.
41  * Si devuelve false (0) es que hubo un error o es un datagrama no soportado,
42  * por lo que hay que descartarlo.
43  */
44 bool udp_read_dgram_header();
45
46 /** Escribe la cabecera del datagrama UDP.
47  *
48  * Pone como puerto destino a udp_port_remote, como origen udp_port_local y como
49  * tamaño a udp_dgram_len (en la parte baja y 0 en la parte alta).
50  */
51 void udp_write_dgram_header();
52
53 #endif /* _UDP_H_ */