Hi,
I reported a problem and gave hints to the solution, but nobody seemed to
react. So I prepared a patch against 2.6.14.4.
Tested on 2.6.14.4 with "ip monitor addr" and with the program attached,
while adding and removing IPv6 address. Both programs didn't receive any
messages.
Tested 2.6.14.4 + this patch, and both programs received add and remove
messages.
Signed-off-by: Kristian Slavov <[EMAIL PROTECTED]>
Cheers,
--
Krisu
diff -Naur linux-2.6.14.4/include/linux/rtnetlink.h
linux-2.6.14.4-patched/include/linux/rtnetlink.h
--- linux-2.6.14.4/include/linux/rtnetlink.h 2005-12-15 01:50:41.000000000
+0200
+++ linux-2.6.14.4-patched/include/linux/rtnetlink.h 2005-12-19
12:30:04.000000000 +0200
@@ -866,6 +866,7 @@
#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE
RTNLGRP_IPV4_ROUTE,
#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE
+ RTNLGRP_NOP1,
RTNLGRP_IPV6_IFADDR,
#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR
RTNLGRP_IPV6_MROUTE,
@@ -876,8 +877,11 @@
#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO
RTNLGRP_DECnet_IFADDR,
#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR
+ RTNLGRP_NOP2,
RTNLGRP_DECnet_ROUTE,
#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE
+ RTNLGRP_NOP3,
+ RTNLGRP_NOP4,
RTNLGRP_IPV6_PREFIX,
#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX
__RTNLGRP_MAX
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <linux/rtnetlink.h>
#include <errno.h>
#include <string.h>
#define MLEN 1024
int main()
{
struct sockaddr_nl nlserver;
size_t z;
char *buffer;
int rtsock, k;
buffer = malloc(MLEN);
if (!buffer)
return 0;
memset(buffer, 0, MLEN);
memset(&nlserver, 0, sizeof(nlserver));
nlserver.nl_family = AF_NETLINK;
nlserver.nl_groups = RTMGRP_IPV6_IFADDR;
rtsock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (rtsock < 0)
return 0;
k = bind(rtsock, (struct sockaddr *)&nlserver, sizeof(nlserver));
if (k < 0)
return 0;
z = sizeof(nlserver);
k = recvfrom(rtsock, buffer, MLEN, 0,
(struct sockaddr *)&nlserver, &z);
printf("recvfrom() = %d, errno = %d\n",k,errno);
close(rtsock);
return 1;
}