-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathipv4.h
More file actions
110 lines (84 loc) · 2.79 KB
/
ipv4.h
File metadata and controls
110 lines (84 loc) · 2.79 KB
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
#ifndef _IPv4_H
#define _IPv4_H
#include <stdint.h>
#include "eth.h"
//#include "ipv4.c"
//#include "ipv4_route_table.h"
//#include "ipv4_config.h"
#define IPv4_ADDR_SIZE 4
#define IPv4_STR_MAX_LENGTH 16
typedef unsigned char ipv4_addr_t [IPv4_ADDR_SIZE];
/* Dirección IPv4 a cero "0.0.0.0" */
extern ipv4_addr_t IPv4_ZERO_ADDR;
extern ipv4_addr_t RIP_MULTICAST_ADDR;
/* Logitud máxmima del nombre de un interfaz de red */
#define IFACE_NAME_MAX_LENGTH 32
#define IPv4_MTU 1480
typedef struct ipv4_frame {
uint8_t version_hlen;
uint8_t type_of_service;
uint16_t total_length;
uint16_t identification;
uint16_t flags_offset;
uint8_t ttl;
uint8_t protocol;
uint16_t checksum;
ipv4_addr_t src_addr;
ipv4_addr_t dest_addr;
unsigned char payload[IPv4_MTU];
} ipv4_frame_t;
typedef struct ipv4_layer ipv4_layer_t;
char *ipv4_getIfaceName(ipv4_layer_t *layer);
void ipv4_get_addr (ipv4_layer_t *layer, ipv4_addr_t addr );
//int retrieveSizeOfLayer();
//#define IPv4_LAYER_SIZE sizeof(ipv4_layer_t)
ipv4_layer_t *ipv4_open(char * file_conf, char * file_conf_route);
int ipv4_close(ipv4_layer_t * layer);
int ipv4_send (ipv4_layer_t * layer, ipv4_addr_t dst, uint8_t protocol,
unsigned char * payload, int payload_len);
int ipv4_recv(ipv4_layer_t * layer, uint8_t protocol, unsigned char buffer[],
ipv4_addr_t sender, int buf_len, long int timeout);
/* 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 );
/*
* 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 );
#endif /* _IPv4_H */