void local_notify_xroute(struct xroute *xroute, int kind) { char buf[512]; int rc; if(local_socket < 0) return; rc = snprintf(buf, 512, "%s xroute %s prefix %s metric %d\n", local_kind(kind), format_prefix(xroute->prefix, xroute->plen), format_prefix(xroute->prefix, xroute->plen), xroute->metric); 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; }
void local_notify_route(struct route *route, int kind) { char buf[512]; int rc; if(local_socket < 0) return; rc = snprintf(buf, 512, "%s route %s-%lx prefix %s installed %s " "id %s metric %d refmetric %d via %s if %s\n", local_kind(kind), format_prefix(route->src->prefix, route->src->plen), (unsigned long)route->neigh, format_prefix(route->src->prefix, route->src->plen), route->installed ? "yes" : "no", format_eui64(route->src->id), route_metric(route), route->refmetric, format_address(route->neigh->address), route->neigh->network->ifname); 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; }
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_route_1(int s, struct babel_route *route, int kind) { char buf[512]; int rc; const char *dst_prefix = format_prefix(route->src->prefix, route->src->plen); const char *src_prefix = format_prefix(route->src->src_prefix, route->src->src_plen); rc = snprintf(buf, 512, "%s route %s-%lx-%s prefix %s from %s installed %s " "id %s metric %d refmetric %d via %s if %s\n", local_kind(kind), dst_prefix, (unsigned long)route->neigh, src_prefix, dst_prefix, src_prefix, route->installed ? "yes" : "no", format_eui64(route->src->id), route_metric(route), route->refmetric, format_address(route->neigh->address), route->neigh->ifp->name); if(rc < 0 || rc >= 512) goto fail; rc = write_timeout(s, buf, rc); if(rc < 0) goto fail; return; fail: shutdown(s, 1); return; }
static void local_notify_xroute_1(int s, struct xroute *xroute, int kind) { char buf[512]; int rc; const char *dst_prefix = format_prefix(xroute->prefix, xroute->plen); const char *src_prefix = format_prefix(xroute->src_prefix, xroute->src_plen); rc = snprintf(buf, 512, "%s xroute %s-%s prefix %s from %s metric %d\n", local_kind(kind), dst_prefix, src_prefix, dst_prefix, src_prefix, xroute->metric); if(rc < 0 || rc >= 512) goto fail; rc = write_timeout(s, buf, rc); if(rc < 0) goto fail; return; fail: shutdown(s, 1); return; }
static void local_notify_interface_1(struct local_socket *s, struct interface *ifp, int kind) { char buf[512], v4[INET_ADDRSTRLEN]; int rc; int up; up = if_up(ifp); if(up && ifp->ipv4) inet_ntop(AF_INET, ifp->ipv4, v4, INET_ADDRSTRLEN); else v4[0] = '\0'; if(up) rc = snprintf(buf, 512, "%s interface %s up true%s%s%s%s\n", local_kind(kind), ifp->name, ifp->ll ? " ipv6 " : "", ifp->ll ? format_address(*ifp->ll) : "", v4[0] ? " ipv4 " : "", v4); else rc = snprintf(buf, 512, "%s interface %s up false\n", local_kind(kind), ifp->name); 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; }
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; }