#include "xalloc.h"
#include "submesh.h"
-extern bool node_write_devclass(meshlink_handle_t *mesh, node_t *n);
-extern bool node_write_submesh(meshlink_handle_t *mesh, node_t *n);
-
bool send_add_edge(meshlink_handle_t *mesh, connection_t *c, const edge_t *e, int contradictions) {
bool x;
char *address, *port;
x = send_request(mesh, c, s, "%d %x %s %d %s %s %s %s %d %s %x %d %d", ADD_EDGE, rand(),
e->from->name, e->from->devclass, from_submesh, e->to->name, address, port,
- e->to->devclass, to_submesh, e->options, e->weight, contradictions);
+ e->to->devclass, to_submesh, OPTION_PMTU_DISCOVERY, e->weight, contradictions);
free(address);
free(port);
}
bool add_edge_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
edge_t *e;
node_t *from, *to;
char from_name[MAX_STRING_SIZE];
int to_devclass;
char to_submesh_name[MAX_STRING_SIZE] = "";
sockaddr_t address;
- uint32_t options;
int weight;
int contradictions = 0;
submesh_t *s = NULL;
- if(sscanf(request, "%*d %*x "MAX_STRING" %d "MAX_STRING" "MAX_STRING" "MAX_STRING" "MAX_STRING" %d "MAX_STRING" %x %d %d",
+ if(sscanf(request, "%*d %*x "MAX_STRING" %d "MAX_STRING" "MAX_STRING" "MAX_STRING" "MAX_STRING" %d "MAX_STRING" %*x %d %d",
from_name, &from_devclass, from_submesh_name, to_name, to_address, to_port, &to_devclass, to_submesh_name,
- &options, &weight, &contradictions) < 10) {
+ &weight, &contradictions) < 9) {
logger(mesh, MESHLINK_ERROR, "Got bad %s from %s", "ADD_EDGE", c->name);
return false;
}
// Check if devclasses are valid
- if(from_devclass < 0 || from_devclass > _DEV_CLASS_MAX) {
+ if(from_devclass < 0 || from_devclass >= DEV_CLASS_COUNT) {
logger(mesh, MESHLINK_ERROR, "Got bad %s from %s: %s", "ADD_EDGE", c->name, "from devclass invalid");
return false;
}
- if(to_devclass < 0 || to_devclass > _DEV_CLASS_MAX) {
+ if(to_devclass < 0 || to_devclass >= DEV_CLASS_COUNT) {
logger(mesh, MESHLINK_ERROR, "Got bad %s from %s: %s", "ADD_EDGE", c->name, "to devclass invalid");
return false;
}
if(!from) {
from = new_node();
+ from->status.dirty = true;
from->status.blacklisted = mesh->default_blacklist;
from->name = xstrdup(from_name);
+ from->devclass = from_devclass;
from->submesh = NULL;
}
from->devclass = from_devclass;
- node_write_devclass(mesh, from);
-
- if(from->submesh) {
- node_write_submesh(mesh, from);
- }
if(!to) {
to = new_node();
+ to->status.dirty = true;
to->status.blacklisted = mesh->default_blacklist;
to->name = xstrdup(to_name);
+ to->devclass = to_devclass;
to->submesh = NULL;
}
to->devclass = to_devclass;
- node_write_devclass(mesh, to);
-
- if(to->submesh) {
- node_write_submesh(mesh, to);
- }
/* Convert addresses */
e = lookup_edge(from, to);
if(e) {
- if(e->weight != weight || e->options != options || sockaddrcmp(&e->address, &address)) {
+ if(e->weight != weight || sockaddrcmp(&e->address, &address)) {
if(from == mesh->self) {
logger(mesh, MESHLINK_WARNING, "Got %s from %s for ourself which does not match existing entry",
"ADD_EDGE", c->name);
logger(mesh, MESHLINK_WARNING, "Got %s from %s which does not match existing entry",
"ADD_EDGE", c->name);
edge_del(mesh, e);
- graph(mesh);
}
} else {
return true;
e->from = from;
e->to = to;
e->address = address;
- e->options = options;
e->weight = weight;
edge_add(mesh, e);
}
bool del_edge_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
edge_t *e;
char from_name[MAX_STRING_SIZE];
char to_name[MAX_STRING_SIZE];