On Thu, 17 Jul 2008 00:35:22 +0200 Johannes Berg <[EMAIL PROTECTED]> wrote:
> > > > (By the way, most uses of rtnl_* seems to be if (rtnl_* < 0) exit(1); in > > > iproute2 currently. The error messages are in libnetlink.) > > > The problem is the driver is responding with an error packet but the > > errno is 0. This looks like a kernel bug, not an library bug. > > I don't think so, the recvmsg() call worked fine, but the message > indicates that the netlink consumer had an error. Or am I missing > something? > > johannes The netlink message in question is marked as type ERROR but the errno encoded in the message is zero. if (h->nlmsg_type == NLMSG_ERROR) { struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(h); if (l < sizeof(struct nlmsgerr)) { fprintf(stderr, "ERROR truncated\n"); } else { errno = -err->error; if (errno == 0) { if (answer) memcpy(answer, h, h->nlmsg_len); return 0; } perror("RTNETLINK answers"); } So the netlink library just treats as a successful return. To me it looks like the problem is in the kernel sending back a NLMSG_ERROR with errno of zero. Some code path isn't setting it up properly. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]