#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)
{
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",
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);
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",
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));