2020-03-07 21:33:11 +01:00
|
|
|
#include <sys/socket.h>
|
|
|
|
#include <netinet/in.h>
|
|
|
|
|
2020-03-13 14:27:44 +01:00
|
|
|
// 8 octets min (struct pointer 4 octets), 1024 octets max
|
|
|
|
typedef struct packet {
|
|
|
|
unsigned char magic; // 95 (si autre, ignorer)
|
|
|
|
unsigned char version; // 1 (si autre, ignorer)
|
|
|
|
short length; // 1020 max
|
|
|
|
char *body;
|
|
|
|
} packet;
|
|
|
|
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef union tlv {
|
|
|
|
pad1 *pad1;
|
|
|
|
padn *padn;
|
|
|
|
neighbour_req *neighbour_req;
|
|
|
|
neighbour *neighbour;
|
|
|
|
network_hash *network_hash;
|
|
|
|
network_state_req *network_state_req;
|
|
|
|
node_hash *node_hash;
|
|
|
|
node_state_req *node_state_req;
|
|
|
|
node_state *node_state;
|
|
|
|
warning *warning;
|
|
|
|
} tlv;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
|
|
|
|
// 1 octet
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct pad1 {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned unsigned char type;
|
2020-03-07 21:33:11 +01:00
|
|
|
} pad1;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 2 octets min, 257 octets max (unsigned char 0 -> 255)
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct padn {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
char *mbz;
|
|
|
|
} padn;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 2 octets
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct neighbour_req {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
} neighbour_req;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 132 octets
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct neighbour {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
struct in6_addr ip;
|
|
|
|
short port;
|
|
|
|
} neighbour;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 18 octets
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct network_hash {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
char *network_hash;
|
|
|
|
} network_hash;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 2 octets
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct network_state_req {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
} network_state_req;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 28 octets
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct node_hash {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
long node_id;
|
|
|
|
short seqno;
|
|
|
|
char *node_hash;
|
|
|
|
} node_hash;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 10 octets
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct node_state_req {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
long node_id;
|
|
|
|
} node_state_req;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 28 octets min, 220 octets max (data 0 -> 192)
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct node_state {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
long node_id;
|
|
|
|
short seqno;
|
|
|
|
char *node_hash;
|
|
|
|
char *data;
|
|
|
|
} node_state;
|
|
|
|
|
2020-03-13 13:36:51 +01:00
|
|
|
// 2 octets min, 257 ocets max (unsigned char 0 -> 255)
|
2020-03-07 21:33:11 +01:00
|
|
|
typedef struct warning {
|
2020-03-13 13:25:25 +01:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char length;
|
2020-03-07 21:33:11 +01:00
|
|
|
char *message;
|
2020-03-13 13:36:51 +01:00
|
|
|
} warning;
|