]> git.llucax.com Git - z.facultad/66.09/etherled.git/blob - pruebas/c/net/udp.h
Implementa el protocolo ELP sobre UDP. Tiene problemas cuando los leds estan
[z.facultad/66.09/etherled.git] / pruebas / c / net / 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  * <pre>
11  *  0      7 8     15 16    23 24    31  
12  * +--------+--------+--------+--------+ 
13  * |     Source      |   Destination   | 
14  * |      Port       |      Port       | 
15  * +--------+--------+--------+--------+ 
16  * |                 |                 | 
17  * |     Length      |    Checksum     | 
18  * +--------+--------+--------+--------+ 
19  * |                                     
20  * |          data octets ...            
21  * +---------------- ...                 
22  * </pre>
23  *
24  * Aceptamos sólo datagramas UDP que vayan a el puerto de nuestra aplicación y
25  * cuyo tamaño sea menor a 255. El resto es descartado.
26  * El Length es tanto de la cabecera como datos, por lo tanto el tamaño mínimo
27  * es 8.
28  *
29  * El checksum se calcula utilizando algunos datos de la capa inferior e incluye
30  * a los datos. Entonces es calculado sobre el siguiente paquete 'virtual':
31  *
32  * <pre>
33  *  0      7 8     15 16    23 24    31  
34  * +--------+--------+--------+--------+
35  * |         ip source address         |
36  * +--------+--------+--------+--------+
37  * |      ip destination address       |
38  * +--------+--------+--------+--------+
39  * |  zero  |protocol|   UDP length    |
40  * +--------+--------+--------+--------+
41  * |     Source      |   Destination   | 
42  * |      Port       |      Port       | 
43  * +--------+--------+--------+--------+ 
44  * |                 |                 | 
45  * |     Length      |    Checksum     | 
46  * +--------+--------+--------+--------+ 
47  * |                                     
48  * |          data octets ...            
49  * +---------------- ...                 
50  * </pre>
51  */
52
53 /** Puerto UDP nuestro */
54 extern uint16 udp_port_local;
55
56 /** Puerto UDP de destino */
57 extern uint16 udp_port_remote;
58
59 /** Tamaño del datagrama UDP */
60 extern byte udp_dgram_len;
61
62 /** Lee la cabecera del datagrama UDP.
63  *
64  * Deja en udp_port_remote el puerto de origen.
65  * Si devuelve false (0) es que hubo un error o es un datagrama no soportado,
66  * por lo que hay que descartarlo.
67  */
68 bool udp_read_dgram_header();
69
70 /** Escribe la cabecera del datagrama UDP.
71  *
72  * Pone como puerto destino a udp_port_remote, como origen udp_port_local y como
73  * tamaño a udp_dgram_len (en la parte baja y 0 en la parte alta).
74  */
75 void udp_write_dgram_header();
76
77 #endif /* _UDP_H_ */