} else if (strcmp(af_str, "ipv6") == 0) {
af = AF_INET6;
af_conf = &vty_conf->ipv6;
- } else
+ } else {
+ ldp_clear_config(vty_conf);
return (CMD_WARNING);
+ }
if (disable) {
af_conf->flags &= ~F_LDPD_AF_ENABLED;
if (!ia->enabled) {
ia->enabled = 1;
ldp_reload_ref(vty_conf, (void **)&iface);
- }
+ } else
+ ldp_clear_config(vty_conf);
}
switch (af) {
tcp_new(int fd, struct nbr *nbr)
{
struct tcp_conn *tcp;
- struct sockaddr_storage src;
- socklen_t len = sizeof(src);
+ struct sockaddr_storage ss;
+ socklen_t len = sizeof(ss);
if ((tcp = calloc(1, sizeof(*tcp))) == NULL)
fatal(__func__);
tcp->nbr = nbr;
}
- getsockname(fd, (struct sockaddr *)&src, &len);
- sa2addr((struct sockaddr *)&src, NULL, NULL, &tcp->lport);
- getpeername(fd, (struct sockaddr *)&src, &len);
- sa2addr((struct sockaddr *)&src, NULL, NULL, &tcp->rport);
+ if (getsockname(fd, (struct sockaddr *)&ss, &len) != 0)
+ log_warn("%s: getsockname", __func__);
+ else
+ sa2addr((struct sockaddr *)&ss, NULL, NULL, &tcp->lport);
+ if (getpeername(fd, (struct sockaddr *)&ss, &len) != 0)
+ log_warn("%s: getpeername", __func__);
+ else
+ sa2addr((struct sockaddr *)&ss, NULL, NULL, &tcp->rport);
return (tcp);
}