nexthop->ifindex = ifindex;
break;
case NEXTHOP_TYPE_BLACKHOLE:
+ if (IS_ZEBRA_DEBUG_MPLS)
+ zlog_debug("%s: invalid: blackhole nexthop", __func__);
+
nexthop_free(nexthop);
XFREE(MTYPE_NHLFE, nhlfe);
return NULL;
if (!lsp)
return NULL;
+ /* Must have labels */
+ if (num_labels == 0 || labels == NULL) {
+ if (IS_ZEBRA_DEBUG_MPLS)
+ zlog_debug("%s: invalid nexthop: no labels", __func__);
+
+ return NULL;
+ }
+
/* Allocate new object */
nhlfe = nhlfe_alloc(lsp, lsp_type, gtype, gate, ifindex, num_labels,
labels);
ifindex2ifname(nexthop->ifindex,
nexthop->vrf_id));
break;
- case NEXTHOP_TYPE_BLACKHOLE:
case NEXTHOP_TYPE_IFINDEX:
+ if (nexthop->ifindex)
+ json_object_string_add(json_nhlfe, "interface",
+ ifindex2ifname(nexthop->ifindex,
+ nexthop->vrf_id));
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
break;
}
ifindex2ifname(nexthop->ifindex,
nexthop->vrf_id));
break;
- case NEXTHOP_TYPE_BLACKHOLE:
case NEXTHOP_TYPE_IFINDEX:
+ if (nexthop->ifindex)
+ vty_out(vty, " dev %s",
+ ifindex2ifname(nexthop->ifindex,
+ nexthop->vrf_id));
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
break;
}
vty_out(vty, "%s",
break;
success = true;
break;
- case NEXTHOP_TYPE_BLACKHOLE:
case NEXTHOP_TYPE_IFINDEX:
+ if (znh->type != NEXTHOP_TYPE_IFINDEX)
+ continue;
+ if (nexthop->ifindex != znh->ifindex)
+ continue;
+
+ found = true;
+
+ if (!ftn_update_nexthop(add_p, nexthop, type, znh))
+ break;
+ success = true;
break;
+ case NEXTHOP_TYPE_BLACKHOLE:
+ /* Not valid */
+ continue;
}
if (found)
ifindex2ifname(nh->ifindex, VRF_DEFAULT),
size);
break;
- case NEXTHOP_TYPE_BLACKHOLE:
case NEXTHOP_TYPE_IFINDEX:
+ if (nh->ifindex)
+ strlcat(buf,
+ ifindex2ifname(nh->ifindex, VRF_DEFAULT),
+ size);
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
break;
}
return CMD_WARNING_CONFIG_FAILED;
}
+ if (gate_str == NULL) {
+ vty_out(vty, "%% No Nexthop Information\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
out_label = MPLS_LABEL_IMPLICIT_NULL; /* as initialization */
label = atoi(inlabel_str);
if (!IS_MPLS_UNRESERVED_LABEL(label)) {
}
in_label = label;
- gtype = NEXTHOP_TYPE_BLACKHOLE; /* as initialization */
- if (gate_str) {
- /* Gateway is a IPv4 or IPv6 nexthop. */
- ret = inet_pton(AF_INET6, gate_str, &gate.ipv6);
- if (ret)
- gtype = NEXTHOP_TYPE_IPV6;
+ /* Gateway is a IPv4 or IPv6 nexthop. */
+ ret = inet_pton(AF_INET6, gate_str, &gate.ipv6);
+ if (ret == 1)
+ gtype = NEXTHOP_TYPE_IPV6;
+ else {
+ ret = inet_pton(AF_INET, gate_str, &gate.ipv4);
+ if (ret == 1)
+ gtype = NEXTHOP_TYPE_IPV4;
else {
- ret = inet_pton(AF_INET, gate_str, &gate.ipv4);
- if (ret)
- gtype = NEXTHOP_TYPE_IPV4;
- else {
- vty_out(vty, "%% Invalid nexthop\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ vty_out(vty, "%% Invalid nexthop\n");
+ return CMD_WARNING_CONFIG_FAILED;
}
}
ret = zebra_mpls_static_lsp_del(zvrf, in_label, gtype, &gate,
0);
- if (ret) {
+ if (ret != 0) {
vty_out(vty, "%% LSP cannot be %s\n",
add_cmd ? "added" : "deleted");
return CMD_WARNING_CONFIG_FAILED;