static int ldp_vty_nbr_session_holdtime(struct vty *, struct vty_arg *[]);
static int ldp_vty_af_session_holdtime(struct vty *, struct vty_arg *[]);
-static char vty_ifname[IF_NAMESIZE];
-static char vty_l2vpn_name[L2VPN_NAME_LEN];
-static char vty_pw_ifname[IF_NAMESIZE];
-
static struct cmd_node interface_node =
{
INTERFACE_NODE,
else
hello_type = HELLO_TARGETED;
- vty_conf = ldp_dup_config(ldpd_conf);
-
switch (vty->node) {
case LDP_NODE:
+ vty_conf = ldp_dup_config(ldpd_conf);
if (disable) {
switch (hello_type) {
case HELLO_LINK:
break;
}
}
+ ldp_reload(vty_conf);
break;
case LDP_IPV4_NODE:
case LDP_IPV6_NODE:
+ vty_conf = ldp_dup_config(ldpd_conf);
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
break;
}
}
+ ldp_reload(vty_conf);
break;
case LDP_IPV4_IFACE_NODE:
case LDP_IPV6_IFACE_NODE:
af = ldp_vty_get_af(vty);
- iface = if_lookup_name(vty_conf, vty_ifname);
- ia = iface_af_get(iface, af);
+ iface = VTY_GET_CONTEXT(iface);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&iface);
+ ia = iface_af_get(iface, af);
if (disable)
ia->hello_holdtime = 0;
else
ia->hello_holdtime = secs;
+ ldp_reload_ref(vty_conf, (void **)&iface);
break;
default:
fatalx("ldp_vty_disc_holdtime: unexpected node");
}
- ldp_reload(vty_conf);
-
return (CMD_SUCCESS);
}
else
hello_type = HELLO_TARGETED;
- vty_conf = ldp_dup_config(ldpd_conf);
-
switch (vty->node) {
case LDP_NODE:
+ vty_conf = ldp_dup_config(ldpd_conf);
if (disable) {
switch (hello_type) {
case HELLO_LINK:
break;
}
}
+ ldp_reload(vty_conf);
break;
case LDP_IPV4_NODE:
case LDP_IPV6_NODE:
+ vty_conf = ldp_dup_config(ldpd_conf);
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
break;
}
}
+ ldp_reload(vty_conf);
break;
case LDP_IPV4_IFACE_NODE:
case LDP_IPV6_IFACE_NODE:
af = ldp_vty_get_af(vty);
- iface = if_lookup_name(vty_conf, vty_ifname);
- ia = iface_af_get(iface, af);
+ iface = VTY_GET_CONTEXT(iface);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&iface);
+ ia = iface_af_get(iface, af);
if (disable)
ia->hello_interval = 0;
else
ia->hello_interval = secs;
+ ldp_reload_ref(vty_conf, (void **)&iface);
break;
default:
fatalx("ldp_vty_disc_interval: unexpected node");
}
- ldp_reload(vty_conf);
-
return (CMD_SUCCESS);
}
return (CMD_SUCCESS);
}
- switch (af) {
- case AF_INET:
- vty->node = LDP_IPV4_IFACE_NODE;
- break;
- case AF_INET6:
- vty->node = LDP_IPV6_IFACE_NODE;
- break;
- default:
- break;
- }
- strlcpy(vty_ifname, ifname, sizeof(vty_ifname));
-
if (iface == NULL) {
if (ldp_iface_is_configured(vty_conf, ifname)) {
vty_out(vty, "%% Interface is already in use%s",
ia = iface_af_get(iface, af);
ia->enabled = 1;
LIST_INSERT_HEAD(&vty_conf->iface_list, iface, entry);
+ ldp_reload_ref(vty_conf, (void **)&iface);
} else {
memset(&kif, 0, sizeof(kif));
strlcpy(kif.ifname, ifname, sizeof(kif.ifname));
ia = iface_af_get(iface, af);
- if (ia->enabled)
- goto cancel;
- ia->enabled = 1;
+ if (!ia->enabled) {
+ ia->enabled = 1;
+ ldp_reload_ref(vty_conf, (void **)&iface);
+ }
+ }
+
+ switch (af) {
+ case AF_INET:
+ VTY_PUSH_CONTEXT(LDP_IPV4_IFACE_NODE, iface);
+ break;
+ case AF_INET6:
+ VTY_PUSH_CONTEXT(LDP_IPV6_IFACE_NODE, iface);
+ break;
+ default:
+ break;
}
- ldp_reload(vty_conf);
return (CMD_SUCCESS);
cancel:
return (CMD_SUCCESS);
}
- vty->node = LDP_L2VPN_NODE;
- strlcpy(vty_l2vpn_name, name_str, sizeof(vty_l2vpn_name));
- if (l2vpn)
+ if (l2vpn) {
+ VTY_PUSH_CONTEXT(LDP_L2VPN_NODE, l2vpn);
goto cancel;
+ }
l2vpn = l2vpn_new(name_str);
l2vpn->type = L2VPN_TYPE_VPLS;
LIST_INSERT_HEAD(&vty_conf->l2vpn_list, l2vpn, entry);
ldp_reload(vty_conf);
+ VTY_PUSH_CONTEXT(LDP_L2VPN_NODE, l2vpn);
return (CMD_SUCCESS);
disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
ifname = vty_get_arg_value(args, "ifname");
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
+ l2vpn = VTY_GET_CONTEXT(l2vpn);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&l2vpn);
if (disable)
memset(l2vpn->br_ifname, 0, sizeof(l2vpn->br_ifname));
else
strlcpy(l2vpn->br_ifname, ifname, sizeof(l2vpn->br_ifname));
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&l2vpn);
return (CMD_SUCCESS);
}
return (CMD_WARNING);
}
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
+ l2vpn = VTY_GET_CONTEXT(l2vpn);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&l2vpn);
if (disable)
l2vpn->mtu = DEFAULT_L2VPN_MTU;
else
l2vpn->mtu = mtu;
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&l2vpn);
return (CMD_SUCCESS);
}
else
pw_type = PW_TYPE_ETHERNET_TAGGED;
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
+ l2vpn = VTY_GET_CONTEXT(l2vpn);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&l2vpn);
if (disable)
l2vpn->pw_type = DEFAULT_PW_TYPE;
else
l2vpn->pw_type = pw_type;
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&l2vpn);
return (CMD_SUCCESS);
}
disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
ifname = vty_get_arg_value(args, "ifname");
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
+ l2vpn = VTY_GET_CONTEXT(l2vpn);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&l2vpn);
+ l2vpn = l2vpn_find(vty_conf, l2vpn->name);
lif = l2vpn_if_find_name(l2vpn, ifname);
if (disable) {
lif = l2vpn_if_new(l2vpn, &kif);
LIST_INSERT_HEAD(&l2vpn->if_list, lif, entry);
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&l2vpn);
return (CMD_SUCCESS);
disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
ifname = vty_get_arg_value(args, "ifname");
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
+ l2vpn = VTY_GET_CONTEXT(l2vpn);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&l2vpn);
pw = l2vpn_pw_find_name(l2vpn, ifname);
if (disable) {
}
if (pw) {
- vty->node = LDP_PSEUDOWIRE_NODE;
- strlcpy(vty_pw_ifname, ifname, sizeof(vty_pw_ifname));
+ VTY_PUSH_CONTEXT(LDP_PSEUDOWIRE_NODE, pw);
goto cancel;
}
pw->flags = F_PW_STATUSTLV_CONF|F_PW_CWORD_CONF;
LIST_INSERT_HEAD(&l2vpn->pw_inactive_list, pw, entry);
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&pw);
+ VTY_PUSH_CONTEXT(LDP_PSEUDOWIRE_NODE, pw);
- vty->node = LDP_PSEUDOWIRE_NODE;
- strlcpy(vty_pw_ifname, ifname, sizeof(vty_pw_ifname));
return (CMD_SUCCESS);
cancel:
ldp_vty_l2vpn_pw_cword(struct vty *vty, struct vty_arg *args[])
{
struct ldpd_conf *vty_conf;
- struct l2vpn *l2vpn;
struct l2vpn_pw *pw;
const char *preference_str;
int disable;
disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
preference_str = vty_get_arg_value(args, "preference");
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
- pw = l2vpn_pw_find_name(l2vpn, vty_pw_ifname);
+ pw = VTY_GET_CONTEXT(l2vpn_pw);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&pw);
if (disable)
pw->flags |= F_PW_CWORD_CONF;
pw->flags |= F_PW_CWORD_CONF;
}
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&pw);
return (CMD_SUCCESS);
}
ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, struct vty_arg *args[])
{
struct ldpd_conf *vty_conf;
- struct l2vpn *l2vpn;
struct l2vpn_pw *pw;
int af;
union ldpd_addr addr;
return (CMD_WARNING);
}
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
- pw = l2vpn_pw_find_name(l2vpn, vty_pw_ifname);
+ pw = VTY_GET_CONTEXT(l2vpn_pw);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&pw);
if (disable) {
pw->af = AF_UNSPEC;
pw->flags |= F_PW_STATIC_NBR_ADDR;
}
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&pw);
return (CMD_SUCCESS);
}
ldp_vty_l2vpn_pw_nbr_id(struct vty *vty, struct vty_arg *args[])
{
struct ldpd_conf *vty_conf;
- struct l2vpn *l2vpn;
struct l2vpn_pw *pw;
struct in_addr lsr_id;
const char *lsr_id_str;
return (CMD_WARNING);
}
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
- pw = l2vpn_pw_find_name(l2vpn, vty_pw_ifname);
+ pw = VTY_GET_CONTEXT(l2vpn_pw);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&pw);
if (disable)
pw->lsr_id.s_addr = INADDR_ANY;
else
pw->lsr_id = lsr_id;
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&pw);
return (CMD_SUCCESS);
}
ldp_vty_l2vpn_pw_pwid(struct vty *vty, struct vty_arg *args[])
{
struct ldpd_conf *vty_conf;
- struct l2vpn *l2vpn;
struct l2vpn_pw *pw;
char *ep;
uint32_t pwid;
return (CMD_WARNING);
}
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
- pw = l2vpn_pw_find_name(l2vpn, vty_pw_ifname);
+ pw = VTY_GET_CONTEXT(l2vpn_pw);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&pw);
if (disable)
pw->pwid = 0;
else
pw->pwid = pwid;
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&pw);
return (CMD_SUCCESS);
}
ldp_vty_l2vpn_pw_pwstatus(struct vty *vty, struct vty_arg *args[])
{
struct ldpd_conf *vty_conf;
- struct l2vpn *l2vpn;
struct l2vpn_pw *pw;
int disable;
disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- vty_conf = ldp_dup_config(ldpd_conf);
- l2vpn = l2vpn_find(vty_conf, vty_l2vpn_name);
- pw = l2vpn_pw_find_name(l2vpn, vty_pw_ifname);
+ pw = VTY_GET_CONTEXT(l2vpn_pw);
+ vty_conf = ldp_dup_config_ref(ldpd_conf, (void **)&pw);
if (disable)
pw->flags |= F_PW_STATUSTLV_CONF;
else
pw->flags &= ~F_PW_STATUSTLV_CONF;
- ldp_reload(vty_conf);
+ ldp_reload_ref(vty_conf, (void **)&pw);
return (CMD_SUCCESS);
}