diff options
Diffstat (limited to 'zebra/rtadv.c')
| -rw-r--r-- | zebra/rtadv.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/zebra/rtadv.c b/zebra/rtadv.c index edc16c549a..43dfca10e6 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -35,6 +35,7 @@ #include "privs.h" #include "vrf.h" #include "ns.h" +#include "lib_errors.h" #include "zebra/interface.h" #include "zebra/rtadv.h" @@ -180,7 +181,7 @@ static void rtadv_send_packet(int sock, struct interface *ifp) adata = calloc(1, CMSG_SPACE(sizeof(struct in6_pktinfo))); if (adata == NULL) { - zlog_err( + zlog_warn( "rtadv_send_packet: can't malloc control data"); exit(-1); } @@ -373,9 +374,10 @@ static void rtadv_send_packet(int sock, struct interface *ifp) ret = sendmsg(sock, &msg, 0); if (ret < 0) { - zlog_err("%s(%u): Tx RA failed, socket %u error %d (%s)", - ifp->name, ifp->ifindex, sock, errno, - safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "%s(%u): Tx RA failed, socket %u error %d (%s)", + ifp->name, ifp->ifindex, sock, errno, + safe_strerror(errno)); } else zif->ra_sent++; } @@ -624,19 +626,15 @@ static int rtadv_read(struct thread *thread) static int rtadv_make_socket(ns_id_t ns_id) { - int sock; + int sock = -1; int ret = 0; struct icmp6_filter filter; - if (zserv_privs.change(ZPRIVS_RAISE)) - zlog_err("rtadv_make_socket: could not raise privs, %s", - safe_strerror(errno)); + frr_elevate_privs(&zserv_privs) { - sock = ns_socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6, ns_id); + sock = ns_socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6, ns_id); - if (zserv_privs.change(ZPRIVS_LOWER)) - zlog_err("rtadv_make_socket: could not lower privs, %s", - safe_strerror(errno)); + } if (sock < 0) { return -1; |
