*/
void p_setifname(peer *p, const char *name)
- { if (p->ifname) xfree(p->ifname); p->ifname = xstrdup(name); }
+{
+ xfree(p->ifname);
+ p->ifname = xstrdup(name);
+ if (p->spec.tops->setifname)
+ p->spec.tops->setifname(p->t, name);
+}
/* --- @p_addr@ --- *
*
p->ifname = 0;
memset(&p->st, 0, sizeof(stats));
p->st.t_start = time(0);
- if ((p->t = spec->tops->create(p)) == 0)
+ if ((p->t = spec->tops->create(p, &p->ifname)) == 0)
goto tidy_0;
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;
tidy_1:
if (spec->t_ka)
sel_rmtimer(&p->tka);
+ xfree(p->ifname);
p->t->ops->destroy(p->t);
tidy_0:
xfree(p->spec.name);
p->t->ops->destroy(p->t);
if (p->spec.t_ka)
sel_rmtimer(&p->tka);
- xfree(p->spec.name);
for (pg = p->pings; pg; pg = ppg) {
ppg = pg->next;
p_pingdone(pg, PING_PEERDIED);