]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_msdp_socket.c
pimd: Remove pim->vrf_id and use pim->vrf->vrf_id
[mirror_frr.git] / pimd / pim_msdp_socket.c
index b613937f59bc7a51eb9756c522df40aaf95edb34..78a8265a1c88362c68743ad61112150efb57af47 100644 (file)
@@ -35,6 +35,8 @@
 #include "pim_msdp.h"
 #include "pim_msdp_socket.h"
 
+#include "sockopt.h"
+
 /* increase socket send buffer size */
 static void pim_msdp_update_sock_send_buffer_size(int fd)
 {
@@ -154,9 +156,9 @@ int pim_msdp_sock_listen(struct pim_instance *pim)
        sockopt_reuseaddr(sock);
        sockopt_reuseport(sock);
 
-       if (pim->vrf_id != VRF_DEFAULT) {
+       if (pim->vrf->vrf_id != VRF_DEFAULT) {
                struct interface *ifp =
-                       if_lookup_by_name(pim->vrf->name, pim->vrf_id);
+                       if_lookup_by_name(pim->vrf->name, pim->vrf->vrf_id);
                if (!ifp) {
                        flog_err(EC_LIB_INTERFACE,
                                 "%s: Unable to lookup vrf interface: %s",
@@ -194,6 +196,12 @@ int pim_msdp_sock_listen(struct pim_instance *pim)
                return rc;
        }
 
+       /* Set socket DSCP byte */
+       if (setsockopt_ipv4_tos(sock, IPTOS_PREC_INTERNETCONTROL)) {
+               zlog_warn("can't set sockopt IP_TOS to MSDP socket %d: %s",
+                               sock, safe_strerror(errno));
+       }
+
        /* add accept thread */
        listener->fd = sock;
        memcpy(&listener->su, &sin, socklen);
@@ -235,9 +243,9 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp)
                return -1;
        }
 
-       if (mp->pim->vrf_id != VRF_DEFAULT) {
-               struct interface *ifp =
-                       if_lookup_by_name(mp->pim->vrf->name, mp->pim->vrf_id);
+       if (mp->pim->vrf->vrf_id != VRF_DEFAULT) {
+               struct interface *ifp = if_lookup_by_name(mp->pim->vrf->name,
+                                                         mp->pim->vrf->vrf_id);
                if (!ifp) {
                        flog_err(EC_LIB_INTERFACE,
                                 "%s: Unable to lookup vrf interface: %s",
@@ -272,6 +280,12 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp)
                return rc;
        }
 
+       /* Set socket DSCP byte */
+       if (setsockopt_ipv4_tos(mp->fd, IPTOS_PREC_INTERNETCONTROL)) {
+               zlog_warn("can't set sockopt IP_TOS to MSDP socket %d: %s",
+                               mp->fd, safe_strerror(errno));
+       }
+
        /* Connect to the remote mp. */
        return (sockunion_connect(mp->fd, &mp->su_peer,
                                  htons(PIM_MSDP_TCP_PORT), 0));