/* Leave from the RIP version 2 multicast group. */
static int
ipv4_multicast_leave (int sock, 
		      struct in_addr group, 
		      struct in_addr ifa,
		      unsigned int ifindex)
{
  int ret;

  ret = setsockopt_ipv4_multicast (sock,
				   IP_DROP_MEMBERSHIP, 
				   group.s_addr, 
				   ifindex);

  if (ret < 0) 
    zlog (NULL, LOG_INFO, "can't setsockopt IP_DROP_MEMBERSHIP");

  return ret;
}
/* Join to the RIP version 2 multicast group. */
static int
ipv4_multicast_join (int sock, 
		     struct in_addr group, 
		     struct in_addr ifa,
		     unsigned int ifindex)
{
  int ret;

  ret = setsockopt_ipv4_multicast (sock,
				   IP_ADD_MEMBERSHIP, 
				   group.s_addr, 
				   ifindex); 

  if (ret < 0) 
    zlog (NULL, LOG_INFO, "can't setsockopt IP_ADD_MEMBERSHIP %s",
	  safe_strerror (errno));

  return ret;
}
예제 #3
0
mpls_return_enum mpls_socket_multicast_if_tx(mpls_socket_mgr_handle handle,
  mpls_socket_handle socket, const ldp_if * iff)
{
  struct in_addr addr;
  unsigned int ifindex = 0;
  addr.s_addr = 0;

  if (iff == NULL) {
    addr.s_addr = ntohl(INADDR_ANY);
  } else {
    ifindex = iff->handle->ifindex;
  }

  if (setsockopt_ipv4_multicast (socket->fd, IP_MULTICAST_IF, 0, ifindex)<0) {
    return MPLS_FAILURE;
  }

  return MPLS_SUCCESS;
}
예제 #4
0
void mpls_socket_multicast_if_drop(mpls_socket_mgr_handle handle,
  mpls_socket_handle socket, const ldp_if * iff, const mpls_inet_addr * mult)
{
  struct in_addr addr;
  unsigned int ifindex = 0;
  addr.s_addr = 0;

  if (iff == NULL) {
    addr.s_addr = ntohl(INADDR_ANY);
  } else {
    ifindex = iff->handle->ifindex;
  }

  if (setsockopt_ipv4_multicast(socket->fd, IP_DROP_MEMBERSHIP,
    htonl(mult->u.ipv4), ifindex)<0) {
    return;
  }

  return;
}
예제 #5
0
mpls_return_enum mpls_socket_multicast_if_join(mpls_socket_mgr_handle handle,
  mpls_socket_handle socket, const ldp_if * iff, const mpls_inet_addr * mult)
{
  struct in_addr addr;
  unsigned int ifindex = 0;
  addr.s_addr = 0;

  if (iff == NULL) {
    addr.s_addr = ntohl(INADDR_ANY);
  } else {
    ifindex = iff->handle->ifindex;
  }

  if (setsockopt_ipv4_multicast (socket->fd, IP_ADD_MEMBERSHIP, 
    htonl(mult->u.ipv4), ifindex)<0) {
    return MPLS_FAILURE;
  }

  return MPLS_SUCCESS;
}