void local_notify_neighbour(struct neighbour *neigh, int kind) { char buf[512]; int rc; if(local_socket < 0) return; rc = snprintf(buf, 512, "%s neighbour %lx address %s " "if %s reach %04x rxcost %d txcost %d cost %d\n", local_kind(kind), /* Neighbours never move around in memory , so we can use the address as a unique identifier. */ (unsigned long int)neigh, format_address(neigh->address), neigh->network->ifname, neigh->reach, neighbour_rxcost(neigh), neighbour_txcost(neigh), neighbour_cost(neigh)); if(rc < 0 || rc >= 512) goto fail; rc = write_timeout(local_socket, buf, rc); if(rc < 0) goto fail; return; fail: shutdown(local_socket, 1); return; }
static void local_notify_neighbour_1(struct local_socket *s, struct neighbour *neigh, int kind) { char buf[512], rttbuf[64]; int rc; rttbuf[0] = '\0'; if(valid_rtt(neigh)) { rc = snprintf(rttbuf, 64, " rtt %s rttcost %d", format_thousands(neigh->rtt), neighbour_rttcost(neigh)); if(rc < 0 || rc >= 64) rttbuf[0] = '\0'; } rc = snprintf(buf, 512, "%s neighbour %lx address %s " "if %s reach %04x rxcost %d txcost %d%s cost %d\n", local_kind(kind), /* Neighbours never move around in memory , so we can use the address as a unique identifier. */ (unsigned long int)neigh, format_address(neigh->address), neigh->ifp->name, neigh->reach, neighbour_rxcost(neigh), neighbour_txcost(neigh), rttbuf, neighbour_cost(neigh)); if(rc < 0 || rc >= 512) goto fail; rc = write_timeout(s->fd, buf, rc); if(rc < 0) goto fail; return; fail: shutdown(s->fd, 1); return; }