Back to index

glibc  2.9
setipv4sourcefilter.c File Reference
#include <alloca.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>

Go to the source code of this file.


int setipv4sourcefilter (int s, struct in_addr interface, struct in_addr group, uint32_t fmode, uint32_t numsrc, const struct in_addr *slist)

Function Documentation

int setipv4sourcefilter ( int  s,
struct in_addr  interface,
struct in_addr  group,
uint32_t  fmode,
uint32_t  numsrc,
const struct in_addr slist 

Definition at line 30 of file setipv4sourcefilter.c.

  /* We have to create an struct ip_msfilter object which we can pass
     to the kernel.  */
  size_t needed = IP_MSFILTER_SIZE (numsrc);
  int use_alloca = __libc_use_alloca (needed);

  struct ip_msfilter *imsf;
  if (use_alloca)
    imsf = (struct ip_msfilter *) alloca (needed);
      imsf = (struct ip_msfilter *) malloc (needed);
      if (imsf == NULL)
       return -1;

  imsf->imsf_multiaddr = group;
  imsf->imsf_interface = interface;
  imsf->imsf_fmode = fmode;
  imsf->imsf_numsrc = numsrc;
  memcpy (imsf->imsf_slist, slist, numsrc * sizeof (struct in_addr));

  int result = __setsockopt (s, SOL_IP, IP_MSFILTER, imsf, needed);

  if (! use_alloca)
      int save_errno = errno;
      free (imsf);
      __set_errno (save_errno);

  return result;

Here is the call graph for this function: