X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/786989941b7b4504f0234c4a318f929802e981ad..24952f96a3f853e9c37e2c501dd04ae6ee2a552e:/server/peer.c diff --git a/server/peer.c b/server/peer.c index 50dec936..c9198924 100644 --- a/server/peer.c +++ b/server/peer.c @@ -554,7 +554,20 @@ stats *p_stats(peer *p) { return (&p->st); } * Returns: A pointer to the peer's interface name. */ -const char *p_ifname(peer *p) { return (p->t->ops->ifname(p->t)); } +const char *p_ifname(peer *p) { return (p->ifname); } + +/* --- @p_setifname@ --- * + * + * Arguments: @peer *p@ = pointer to a peer block + * @const char *name@ = pointer to the new name + * + * Returns: --- + * + * Use: Changes the name held for a peer's interface. + */ + +void p_setifname(peer *p, const char *name) + { if (p->ifname) xfree(p->ifname); p->ifname = xstrdup(name); } /* --- @p_addr@ --- * * @@ -684,6 +697,7 @@ peer *p_create(peerspec *spec) p->ks = 0; p->prev = 0; p->pings = 0; + p->ifname = 0; memset(&p->st, 0, sizeof(stats)); p->st.t_start = time(0); if ((p->t = spec->tops->create(p)) == 0) @@ -691,13 +705,14 @@ peer *p_create(peerspec *spec) p_setkatimer(p); if (kx_init(&p->kx, p, &p->ks)) goto tidy_1; + p_setifname(p, spec->tops->ifname(p->t)); p->next = peers; if (peers) peers->prev = p; peers = p; a_notify("ADD", "?PEER", p, - "%s", p->t->ops->ifname(p->t), + "%s", p->ifname, "?ADDR", &p->spec.sa, A_END); a_notify("KXSTART", "?PEER", p, A_END); @@ -768,6 +783,8 @@ void p_destroy(peer *p) a_notify("KILL", "%s", p->spec.name, A_END); ksl_free(&p->ks); kx_free(&p->kx); + if (p->ifname) + xfree(p->ifname); p->t->ops->destroy(p->t); if (p->spec.t_ka) sel_rmtimer(&p->tka);