[dm-devel] simple question... to tough to answer?

Konrad Rzeszutek konrad at virtualiron.com
Thu May 15 17:54:11 UTC 2008


On Thu, May 15, 2008 at 10:09:35AM -0700, Wim Colgate wrote:
> Hi,
> 
>  
> 
> I'm not quite sure why no one in the community hasn't been able to
> answer my questions. 

Probably b/c folks are too busy..

> 
>  
> 
> Simply (re)stated:
> 
>  
> 
> 1) Are there hooks for dm/multipath events to notify software?

You can also listen to the NETLINK_DM socket and parse the data.

But that complicated by the fact that there is only one
socket that the kernel uses and it cannot be shared.

> 
> 2) does path down/up fire up udev rules?

Yes. I am attaching a simple program you can use to listen to the kobject uevents
that get fired.

You can also modify it to use NETLINK_DM instead of NETLINK_KOBJECT_UEVENT  and see
what comes out.

-------------- next part --------------
#include <sys/socket.h>
#include <linux/netlink.h>
#include <stdio.h>
#include <string.h>
#define MAX_PAYLOAD 1024        /* maximum payload size */
struct sockaddr_nl src_addr;
int sock_fd;
static char buff[MAX_PAYLOAD];
ssize_t buflen;

int
main ()
{
  sock_fd = socket (PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);

  memset (&src_addr, 0, sizeof (src_addr));
  src_addr.nl_family = AF_NETLINK;
  src_addr.nl_pid = getpid ();  /* self pid */
  src_addr.nl_groups = 0xffffffff;

  printf ("Listen..\n");
  bind (sock_fd, (struct sockaddr *) &src_addr, sizeof (src_addr));
  printf ("Receiving..\n");
  while (1)
    {
      buflen = recv (sock_fd, &buff, sizeof (buff), 0);
      printf ("Got data: %d\n", buflen);
      int i, bufpos;
      char *key;
      for (i = 0, bufpos = 0; (bufpos < buflen) && i < MAX_PAYLOAD; i++)
        {
          key = &buff[bufpos];
          printf ("[%s]\n", key);
          bufpos += strlen (key) + 1;
        }
      memset (&buff, 0, MAX_PAYLOAD);
    }
  /* Close Netlink Socket */
  close (sock_fd);
  return 0;
}


More information about the dm-devel mailing list