]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_sock.c
Merge pull request #5581 from Jafaral/pimroute-rf
[mirror_frr.git] / pimd / pim_sock.c
index 1f584a2f9a2c1f8537ba1ff630ce132f5f64e81f..7f03e18389e879db8275efe4862ae63937a133a1 100644 (file)
@@ -46,7 +46,7 @@ int pim_socket_raw(int protocol)
 {
        int fd;
 
-       frr_elevate_privs(&pimd_privs) {
+       frr_with_privs(&pimd_privs) {
 
                fd = socket(AF_INET, SOCK_RAW, protocol);
 
@@ -65,7 +65,7 @@ void pim_socket_ip_hdr(int fd)
 {
        const int on = 1;
 
-       frr_elevate_privs(&pimd_privs) {
+       frr_with_privs(&pimd_privs) {
 
                if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)))
                        zlog_err("%s: Could not turn on IP_HDRINCL option: %s",
@@ -83,7 +83,7 @@ int pim_socket_bind(int fd, struct interface *ifp)
        int ret = 0;
 #ifdef SO_BINDTODEVICE
 
-       frr_elevate_privs(&pimd_privs) {
+       frr_with_privs(&pimd_privs) {
 
                ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifp->name,
                                 strlen(ifp->name));
@@ -151,7 +151,7 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp,
                }
 #else
                flog_err(
-                       LIB_ERR_DEVELOPMENT,
+                       EC_LIB_DEVELOPMENT,
                        "%s %s: Missing IP_PKTINFO and IP_RECVDSTADDR: unable to get dst addr from recvmsg()",
                        __FILE__, __PRETTY_FUNCTION__);
                close(fd);
@@ -255,6 +255,12 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp,
                }
        }
 
+       /* Set Tx socket DSCP byte */
+       if (setsockopt_ipv4_tos(fd, IPTOS_PREC_INTERNETCONTROL)) {
+               zlog_warn("can't set sockopt IP_TOS to PIM/IGMP socket %d: %s",
+                         fd, safe_strerror(errno));
+       }
+
        return fd;
 }
 
@@ -289,7 +295,7 @@ int pim_socket_join(int fd, struct in_addr group, struct in_addr ifaddr,
                        sprintf(ifaddr_str, "<ifaddr?>");
 
                flog_err(
-                       LIB_ERR_SOCKET,
+                       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;