--- zebra-0.91a/zebra/rt_netlink.c.netlink Tue Jan 23 03:10:04 2001 +++ zebra-0.91a/zebra/rt_netlink.c Wed Oct 29 22:46:44 2003 @@ -46,9 +46,8 @@ int seq; struct sockaddr_nl snl; char *name; -} netlink = { -1, 0, {0}, "netlink-listen" }, /* kernel messages */ - netlink_cmd = { -1, 0, {0}, "netlink-cmd" }, /* command channel */ - netlink_addr = {-1, 0, {0}, "netlink-addr" }; /* address channel */ +} netlink_sock ={ -1, 0, {0}, "netlink-listen" }, /* kernel messages */ + netlink_cmd = { -1, 0, {0}, "netlink-cmd" }; /* command channel */ struct message nlmsg_str[] = { @@ -206,6 +205,13 @@ return -1; } + /* JF: Ignore messages that aren't from the kernel */ + if ( snl.nl_pid != 0 ) + { + zlog ( NULL, LOG_ERR, "Ignoring message from pid %u", snl.nl_pid ); + continue; + } + for (h = (struct nlmsghdr *) buf; NLMSG_OK (h, status); h = NLMSG_NEXT (h, status)) { @@ -1052,7 +1058,7 @@ snl.nl_family = AF_NETLINK; /* Talk to netlink socket. */ - ret = netlink_talk (&req.n, &netlink); + ret = netlink_talk (&req.n, &netlink_sock); if (ret < 0) return -1; @@ -1270,7 +1276,7 @@ if (family == AF_INET) nl = &netlink_cmd; else - nl = &netlink; + nl = &netlink_sock; /* Talk to netlink socket. */ return netlink_talk (&req.n, nl); @@ -1384,8 +1390,8 @@ int sock; sock = THREAD_FD (thread); - ret = netlink_parse_info (netlink_information_fetch, &netlink); - thread_add_read (master, kernel_read, NULL, netlink.sock); + ret = netlink_parse_info (netlink_information_fetch, &netlink_sock); + thread_add_read (master, kernel_read, NULL, netlink_sock.sock); return 0; } @@ -1401,10 +1407,10 @@ #ifdef HAVE_IPV6 groups |= RTMGRP_IPV6_ROUTE|RTMGRP_IPV6_IFADDR; #endif /* HAVE_IPV6 */ - netlink_socket (&netlink, groups); + netlink_socket (&netlink_sock, groups); netlink_socket (&netlink_cmd, 0); /* Register kernel socket. */ - if (netlink.sock > 0) - thread_add_read (master, kernel_read, NULL, netlink.sock); + if (netlink_sock.sock > 0) + thread_add_read (master, kernel_read, NULL, netlink_sock.sock); }