X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=zebra%2Fzebra_mpls_openbsd.c;h=542de27e83c35c5b981de702691c903a7cca29a2;hb=01b9e3fd0d354d7d4c60b1c0240f269a4fd08990;hp=44f89f0b3bd5faacdfe99b7fbcafedb21077850c;hpb=09c0e3c04a710c67c950a140af293f9b29d8e5c3;p=mirror_frr.git diff --git a/zebra/zebra_mpls_openbsd.c b/zebra/zebra_mpls_openbsd.c index 44f89f0b3..542de27e8 100644 --- a/zebra/zebra_mpls_openbsd.c +++ b/zebra/zebra_mpls_openbsd.c @@ -31,11 +31,12 @@ #include "prefix.h" #include "interface.h" #include "log.h" +#include "lib_errors.h" extern struct zebra_privs_t zserv_privs; struct { - u_int32_t rtseq; + uint32_t rtseq; int fd; int ioctl_fd; } kr_state; @@ -116,14 +117,13 @@ static int kernel_send_rtmsg_v4(int action, mpls_label_t in_label, hdr.rtm_mpls = MPLS_OP_SWAP; } - if (zserv_privs.change(ZPRIVS_RAISE)) - zlog_err("Can't raise privileges"); - ret = writev(kr_state.fd, iov, iovcnt); - if (zserv_privs.change(ZPRIVS_LOWER)) - zlog_err("Can't lower privileges"); + frr_elevate_privs(&zserv_privs) { + ret = writev(kr_state.fd, iov, iovcnt); + } if (ret == -1) - zlog_err("%s: %s", __func__, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, "%s: %s", __func__, + safe_strerror(errno)); return ret; } @@ -224,14 +224,13 @@ static int kernel_send_rtmsg_v6(int action, mpls_label_t in_label, hdr.rtm_mpls = MPLS_OP_SWAP; } - if (zserv_privs.change(ZPRIVS_RAISE)) - zlog_err("Can't raise privileges"); - ret = writev(kr_state.fd, iov, iovcnt); - if (zserv_privs.change(ZPRIVS_LOWER)) - zlog_err("Can't lower privileges"); + frr_elevate_privs(&zserv_privs) { + ret = writev(kr_state.fd, iov, iovcnt); + } if (ret == -1) - zlog_err("%s: %s", __func__, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, "%s: %s", __func__, + safe_strerror(errno)); return ret; } @@ -279,56 +278,68 @@ static int kernel_lsp_cmd(int action, zebra_lsp_t *lsp) default: break; } - if (action == RTM_ADD || action == RTM_CHANGE) { - SET_FLAG(nhlfe->flags, NHLFE_FLAG_INSTALLED); - SET_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB); - } else { - UNSET_FLAG(nhlfe->flags, NHLFE_FLAG_INSTALLED); - UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB); - } } } return (0); } -int kernel_add_lsp(zebra_lsp_t *lsp) +enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp) { int ret; - if (!lsp || !lsp->best_nhlfe) // unexpected - return -1; + if (!lsp || !lsp->best_nhlfe) { // unexpected + kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE); + return DP_REQUEST_FAILURE; + } ret = kernel_lsp_cmd(RTM_ADD, lsp); - return ret; + kernel_lsp_pass_fail(lsp, + (!ret) ? DP_INSTALL_SUCCESS + : DP_INSTALL_FAILURE); + + return DP_REQUEST_SUCCESS; } -int kernel_upd_lsp(zebra_lsp_t *lsp) +enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp) { int ret; - if (!lsp || !lsp->best_nhlfe) // unexpected - return -1; + if (!lsp || !lsp->best_nhlfe) { // unexpected + kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE); + return DP_REQUEST_FAILURE; + } ret = kernel_lsp_cmd(RTM_CHANGE, lsp); - return ret; + kernel_lsp_pass_fail(lsp, + (!ret) ? DP_INSTALL_SUCCESS + : DP_INSTALL_FAILURE); + return DP_REQUEST_SUCCESS; } -int kernel_del_lsp(zebra_lsp_t *lsp) +enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp) { int ret; - if (!lsp) // unexpected - return -1; + if (!lsp) { // unexpected + kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE); + return DP_REQUEST_FAILURE; + } - if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) - return -1; + if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) { + kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE); + return DP_REQUEST_FAILURE; + } ret = kernel_lsp_cmd(RTM_DELETE, lsp); - return ret; + kernel_lsp_pass_fail(lsp, + (!ret) ? DP_DELETE_SUCCESS + : DP_DELETE_FAILURE); + + return DP_REQUEST_SUCCESS; } static int kmpw_install(struct zebra_pw *pw) @@ -348,8 +359,8 @@ static int kmpw_install(struct zebra_pw *pw) imr.imr_type = IMR_TYPE_ETHERNET_TAGGED; break; default: - zlog_err("%s: unhandled pseudowire type (%#X)", __func__, - pw->type); + zlog_warn("%s: unhandled pseudowire type (%#X)", __func__, + pw->type); return -1; } @@ -370,8 +381,8 @@ static int kmpw_install(struct zebra_pw *pw) sa_in6->sin6_addr = pw->nexthop.ipv6; break; default: - zlog_err("%s: unhandled pseudowire address-family (%u)", - __func__, pw->af); + zlog_warn("%s: unhandled pseudowire address-family (%u)", + __func__, pw->af); return -1; } memcpy(&imr.imr_nexthop, (struct sockaddr *)&ss, @@ -386,7 +397,8 @@ static int kmpw_install(struct zebra_pw *pw) strlcpy(ifr.ifr_name, pw->ifname, sizeof(ifr.ifr_name)); ifr.ifr_data = (caddr_t)&imr; if (ioctl(kr_state.ioctl_fd, SIOCSETMPWCFG, &ifr) == -1) { - zlog_err("ioctl SIOCSETMPWCFG: %s", safe_strerror(errno)); + flog_err_sys(LIB_ERR_SYSTEM_CALL, "ioctl SIOCSETMPWCFG: %s", + safe_strerror(errno)); return -1; } @@ -403,7 +415,8 @@ static int kmpw_uninstall(struct zebra_pw *pw) strlcpy(ifr.ifr_name, pw->ifname, sizeof(ifr.ifr_name)); ifr.ifr_data = (caddr_t)&imr; if (ioctl(kr_state.ioctl_fd, SIOCSETMPWCFG, &ifr) == -1) { - zlog_err("ioctl SIOCSETMPWCFG: %s", safe_strerror(errno)); + flog_err_sys(LIB_ERR_SYSTEM_CALL, "ioctl SIOCSETMPWCFG: %s", + safe_strerror(errno)); return -1; }