addr.addr_len = dotformat2buff(buff, net_title);
memcpy(addr.area_addr, buff, addr.addr_len);
if (addr.area_addr[addr.addr_len - 1] != 0) {
- flog_warn(
- EC_LIB_NB_CB_CONFIG_VALIDATE,
+ snprintf(
+ args->errmsg, args->errmsg_len,
"nsel byte (last byte) in area address must be 0");
return NB_ERR_VALIDATION;
}
/* Check that the SystemID portions match */
if (memcmp(isis->sysid, GETSYSID((&addr)),
ISIS_SYS_ID_LEN)) {
- flog_warn(
- EC_LIB_NB_CB_CONFIG_VALIDATE,
+ snprintf(
+ args->errmsg, args->errmsg_len,
"System ID must not change when defining additional area addresses");
return NB_ERR_VALIDATION;
}
&& circuit->state != C_STATE_UP)
continue;
if (lsp_mtu > isis_circuit_pdu_size(circuit)) {
- flog_warn(
- EC_LIB_NB_CB_CONFIG_VALIDATE,
+ snprintf(
+ args->errmsg, args->errmsg_len,
"ISIS area contains circuit %s, which has a maximum PDU size of %zu",
circuit->interface->name,
isis_circuit_pdu_size(circuit));
*/
static int isis_multi_topology_common(enum nb_event event,
const struct lyd_node *dnode,
+ char *errmsg, size_t errmsg_len,
const char *topology, bool create)
{
struct isis_area *area;
switch (event) {
case NB_EV_VALIDATE:
if (mtid == (uint16_t)-1) {
- flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
- "Unknown topology %s", topology);
+ snprintf(errmsg, errmsg_len, "Unknown topology %s",
+ topology);
return NB_ERR_VALIDATION;
}
break;
struct nb_cb_create_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv4-multicast", true);
}
struct nb_cb_destroy_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv4-multicast", false);
}
int isis_instance_multi_topology_ipv4_management_create(
struct nb_cb_create_args *args)
{
- return isis_multi_topology_common(args->event, args->dnode, "ipv4-mgmt",
- true);
+ return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
+ "ipv4-mgmt", true);
}
int isis_instance_multi_topology_ipv4_management_destroy(
struct nb_cb_destroy_args *args)
{
- return isis_multi_topology_common(args->event, args->dnode, "ipv4-mgmt",
- false);
+ return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
+ "ipv4-mgmt", false);
}
/*
struct nb_cb_create_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv6-unicast", true);
}
struct nb_cb_destroy_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv6-unicast", false);
}
struct nb_cb_create_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv6-multicast", true);
}
struct nb_cb_destroy_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv6-multicast", false);
}
int isis_instance_multi_topology_ipv6_management_create(
struct nb_cb_create_args *args)
{
- return isis_multi_topology_common(args->event, args->dnode, "ipv6-mgmt",
- true);
+ return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
+ "ipv6-mgmt", true);
}
int isis_instance_multi_topology_ipv6_management_destroy(
struct nb_cb_destroy_args *args)
{
- return isis_multi_topology_common(args->event, args->dnode, "ipv6-mgmt",
- false);
+ return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
+ "ipv6-mgmt", false);
}
/*
struct nb_cb_create_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv6-dstsrc", true);
}
struct nb_cb_destroy_args *args)
{
return isis_multi_topology_common(args->event, args->dnode,
+ args->errmsg, args->errmsg_len,
"ipv6-dstsrc", false);
}
min_mtu = DEFAULT_LSP_MTU;
#endif /* ifndef FABRICD */
if (actual_mtu < min_mtu) {
- flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
- "Interface %s has MTU %" PRIu32
- ", minimum MTU for the area is %" PRIu32 "",
- ifp->name, actual_mtu, min_mtu);
+ snprintf(args->errmsg, args->errmsg_len,
+ "Interface %s has MTU %" PRIu32
+ ", minimum MTU for the area is %" PRIu32 "",
+ ifp->name, actual_mtu, min_mtu);
return NB_ERR_VALIDATION;
}
break;
area_tag = yang_dnode_get_string(args->dnode, NULL);
if (circuit && circuit->area && circuit->area->area_tag
&& strcmp(circuit->area->area_tag, area_tag)) {
- flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
- "ISIS circuit is already defined on %s",
- circuit->area->area_tag);
+ snprintf(args->errmsg, args->errmsg_len,
+ "ISIS circuit is already defined on %s",
+ circuit->area->area_tag);
return NB_ERR_VALIDATION;
}
}
if (circuit && circuit->state == C_STATE_UP
&& circuit->area->is_type != IS_LEVEL_1_AND_2
&& circuit->area->is_type != circ_type) {
- flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
- "Invalid circuit level for area %s",
- circuit->area->area_tag);
+ snprintf(args->errmsg, args->errmsg_len,
+ "Invalid circuit level for area %s",
+ circuit->area->area_tag);
return NB_ERR_VALIDATION;
}
break;
if (!circuit)
break;
if (circuit->circ_type == CIRCUIT_T_LOOPBACK) {
- flog_warn(
- EC_LIB_NB_CB_CONFIG_VALIDATE,
+ snprintf(
+ args->errmsg, args->errmsg_len,
"Cannot change network type on loopback interface");
return NB_ERR_VALIDATION;
}
if (net_type == CIRCUIT_T_BROADCAST
&& circuit->state == C_STATE_UP
&& !if_is_broadcast(circuit->interface)) {
- flog_warn(
- EC_LIB_NB_CB_CONFIG_VALIDATE,
+ snprintf(
+ args->errmsg, args->errmsg_len,
"Cannot configure non-broadcast interface for broadcast operation");
return NB_ERR_VALIDATION;
}
if (!ifp)
return NB_OK;
if (if_is_loopback(ifp)) {
- flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
- "Loopback is always passive");
+ snprintf(args->errmsg, args->errmsg_len,
+ "Loopback is always passive");
return NB_ERR_VALIDATION;
}
}
* /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
*/
static int lib_interface_isis_multi_topology_common(
- enum nb_event event, const struct lyd_node *dnode, uint16_t mtid)
+ enum nb_event event, const struct lyd_node *dnode, char *errmsg,
+ size_t errmsg_len, uint16_t mtid)
{
struct isis_circuit *circuit;
bool value;
case NB_EV_VALIDATE:
circuit = nb_running_get_entry(dnode, NULL, false);
if (circuit && circuit->area && circuit->area->oldmetric) {
- flog_warn(
- EC_LIB_NB_CB_CONFIG_VALIDATE,
+ snprintf(
+ errmsg, errmsg_len,
"Multi topology IS-IS can only be used with wide metrics");
return NB_ERR_VALIDATION;
}
struct nb_cb_modify_args *args)
{
return lib_interface_isis_multi_topology_common(
- args->event, args->dnode, ISIS_MT_IPV4_UNICAST);
+ args->event, args->dnode, args->errmsg, args->errmsg_len,
+ ISIS_MT_IPV4_UNICAST);
}
/*
struct nb_cb_modify_args *args)
{
return lib_interface_isis_multi_topology_common(
- args->event, args->dnode, ISIS_MT_IPV4_MULTICAST);
+ args->event, args->dnode, args->errmsg, args->errmsg_len,
+ ISIS_MT_IPV4_MULTICAST);
}
/*
struct nb_cb_modify_args *args)
{
return lib_interface_isis_multi_topology_common(
- args->event, args->dnode, ISIS_MT_IPV4_MGMT);
+ args->event, args->dnode, args->errmsg, args->errmsg_len,
+ ISIS_MT_IPV4_MGMT);
}
/*
struct nb_cb_modify_args *args)
{
return lib_interface_isis_multi_topology_common(
- args->event, args->dnode, ISIS_MT_IPV6_UNICAST);
+ args->event, args->dnode, args->errmsg, args->errmsg_len,
+ ISIS_MT_IPV6_UNICAST);
}
/*
struct nb_cb_modify_args *args)
{
return lib_interface_isis_multi_topology_common(
- args->event, args->dnode, ISIS_MT_IPV6_MULTICAST);
+ args->event, args->dnode, args->errmsg, args->errmsg_len,
+ ISIS_MT_IPV6_MULTICAST);
}
/*
struct nb_cb_modify_args *args)
{
return lib_interface_isis_multi_topology_common(
- args->event, args->dnode, ISIS_MT_IPV6_MGMT);
+ args->event, args->dnode, args->errmsg, args->errmsg_len,
+ ISIS_MT_IPV6_MGMT);
}
/*
struct nb_cb_modify_args *args)
{
return lib_interface_isis_multi_topology_common(
- args->event, args->dnode, ISIS_MT_IPV6_DSTSRC);
+ args->event, args->dnode, args->errmsg, args->errmsg_len,
+ ISIS_MT_IPV6_DSTSRC);
}
case NB_EV_VALIDATE:
if (prefix.family == AF_INET
&& ipv4_martian(&prefix.u.prefix4)) {
- zlog_debug("invalid address %s",
- prefix2str(&prefix, buf, sizeof(buf)));
+ snprintf(args->errmsg, args->errmsg_len,
+ "invalid address %s",
+ prefix2str(&prefix, buf, sizeof(buf)));
return NB_ERR_VALIDATION;
} else if (prefix.family == AF_INET6
&& ipv6_martian(&prefix.u.prefix6)) {
- zlog_debug("invalid address %s",
- prefix2str(&prefix, buf, sizeof(buf)));
+ snprintf(args->errmsg, args->errmsg_len,
+ "invalid address %s",
+ prefix2str(&prefix, buf, sizeof(buf)));
return NB_ERR_VALIDATION;
}
break;
/* Check current interface address. */
ifc = connected_check_ptp(ifp, &prefix, NULL);
if (!ifc) {
- zlog_debug("interface %s Can't find address\n",
- ifp->name);
+ snprintf(args->errmsg, args->errmsg_len,
+ "interface %s Can't find address\n",
+ ifp->name);
return NB_ERR_VALIDATION;
}
} else if (prefix.family == AF_INET6) {
/* Check current interface address. */
ifc = connected_check(ifp, &prefix);
if (!ifc) {
- zlog_debug("interface can't find address %s",
- ifp->name);
+ snprintf(args->errmsg, args->errmsg_len,
+ "interface can't find address %s",
+ ifp->name);
return NB_ERR_VALIDATION;
}
} else
/* This is not configured address. */
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_CONFIGURED)) {
- zlog_debug("interface %s not configured", ifp->name);
+ snprintf(args->errmsg, args->errmsg_len,
+ "interface %s not configured", ifp->name);
return NB_ERR_VALIDATION;
}
switch (args->event) {
case NB_EV_VALIDATE:
if (!zrt) {
- zlog_debug("%s: vrf %s table is not found.", __func__,
- vrf->name);
+ snprintf(args->errmsg, args->errmsg_len,
+ "vrf %s table is not found.", vrf->name);
return NB_ERR_VALIDATION;
}
break;
case NB_EV_VALIDATE:
type = yang_dnode_get_string(args->dnode, NULL);
if (proto_name2num(type) == -1) {
- zlog_warn("%s: invalid protocol: %s", __func__, type);
+ snprintf(args->errmsg, args->errmsg_len,
+ "invalid protocol: %s", type);
return NB_ERR_VALIDATION;
}
return NB_OK;
memset(&p, 0, sizeof(p));
yang_dnode_get_ipv4p(&p, args->dnode, NULL);
if (zebra_check_addr(&p) == 0) {
- zlog_warn("%s: invalid IPv4 address: %s", __func__,
- yang_dnode_get_string(args->dnode, NULL));
+ snprintf(args->errmsg, args->errmsg_len,
+ "invalid IPv4 address: %s",
+ yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
break;
}
if (pif == NULL) {
- zlog_warn("%s: is not a local adddress: %s", __func__,
- yang_dnode_get_string(args->dnode, NULL));
+ snprintf(args->errmsg, args->errmsg_len,
+ "is not a local adddress: %s",
+ yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
return NB_OK;
memset(&p, 0, sizeof(p));
yang_dnode_get_ipv6p(&p, args->dnode, NULL);
if (zebra_check_addr(&p) == 0) {
- zlog_warn("%s: invalid IPv6 address: %s", __func__,
- yang_dnode_get_string(args->dnode, NULL));
+ snprintf(args->errmsg, args->errmsg_len,
+ "invalid IPv6 address: %s",
+ yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
break;
}
if (pif == NULL) {
- zlog_warn("%s: is not a local adddress: %s", __func__,
- yang_dnode_get_string(args->dnode, NULL));
+ snprintf(args->errmsg, args->errmsg_len,
+ "is not a local adddress: %s",
+ yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
return NB_OK;