X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=pimd%2Fpim_sock.c;h=c4538a4ac52e83d4ccbae8d25b88320c981899f4;hb=2569910bb6e5c00ececc60ed15b182e14a88cb9d;hp=a5a842ceee8a2d1e7e92d26b920d48037a728c79;hpb=5c4dc90307b3718ea5f9ed093b994d0c586d370a;p=mirror_frr.git diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c index a5a842cee..c4538a4ac 100644 --- a/pimd/pim_sock.c +++ b/pimd/pim_sock.c @@ -33,12 +33,12 @@ #include "if.h" #include "vrf.h" #include "sockopt.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_mroute.h" #include "pim_sock.h" #include "pim_str.h" -#include "pim_igmp_join.h" /* GLOBAL VARS */ @@ -46,15 +46,11 @@ int pim_socket_raw(int protocol) { int fd; - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err("pim_sockek_raw: could not raise privs, %s", - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - fd = socket(AF_INET, SOCK_RAW, protocol); + fd = socket(AF_INET, SOCK_RAW, protocol); - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err("pim_socket_raw: could not lower privs, %s", - safe_strerror(errno)); + } if (fd < 0) { zlog_warn("Could not create raw socket: errno=%d: %s", errno, @@ -69,17 +65,13 @@ void pim_socket_ip_hdr(int fd) { const int on = 1; - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))) - zlog_err("%s: Could not turn on IP_HDRINCL option: %s", - __PRETTY_FUNCTION__, safe_strerror(errno)); + if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))) + zlog_err("%s: Could not turn on IP_HDRINCL option: %s", + __PRETTY_FUNCTION__, safe_strerror(errno)); - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + } } /* @@ -91,23 +83,19 @@ int pim_socket_bind(int fd, struct interface *ifp) int ret = 0; #ifdef SO_BINDTODEVICE - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifp->name, - strlen(ifp->name)); + ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifp->name, + strlen(ifp->name)); - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + } #endif return ret; } int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp, - u_char loop) + uint8_t loop) { int rcvbuf = 1024 * 1024 * 8; #ifdef HAVE_STRUCT_IP_MREQN_IMR_IFINDEX @@ -162,7 +150,8 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp, fd, errno, safe_strerror(errno)); } #else - zlog_err( + flog_err( + EC_LIB_DEVELOPMENT, "%s %s: Missing IP_PKTINFO and IP_RECVDSTADDR: unable to get dst addr from recvmsg()", __FILE__, __PRETTY_FUNCTION__); close(fd); @@ -299,7 +288,8 @@ int pim_socket_join(int fd, struct in_addr group, struct in_addr ifaddr, sizeof(ifaddr_str))) sprintf(ifaddr_str, ""); - zlog_err( + flog_err( + EC_LIB_SOCKET, "Failure socket joining fd=%d group %s on interface address %s: errno=%d: %s", fd, group_str, ifaddr_str, errno, safe_strerror(errno)); return ret; @@ -322,26 +312,6 @@ int pim_socket_join(int fd, struct in_addr group, struct in_addr ifaddr, return ret; } -int pim_socket_join_source(int fd, ifindex_t ifindex, struct in_addr group_addr, - struct in_addr source_addr, const char *ifname) -{ - if (pim_igmp_join_source(fd, ifindex, group_addr, source_addr)) { - char group_str[INET_ADDRSTRLEN]; - char source_str[INET_ADDRSTRLEN]; - pim_inet4_dump("", group_addr, group_str, - sizeof(group_str)); - pim_inet4_dump("", source_addr, source_str, - sizeof(source_str)); - zlog_warn( - "%s: setsockopt(fd=%d) failure for IGMP group %s source %s ifindex %d on interface %s: errno=%d: %s", - __PRETTY_FUNCTION__, fd, group_str, source_str, ifindex, - ifname, errno, safe_strerror(errno)); - return -1; - } - - return 0; -} - int pim_socket_recvfromto(int fd, uint8_t *buf, size_t len, struct sockaddr_in *from, socklen_t *fromlen, struct sockaddr_in *to, socklen_t *tolen,