diff options
-rw-r--r-- | debian/changelog | 48 | ||||
-rw-r--r-- | debian/vyatta-quagga.prerm | 2 | ||||
-rw-r--r-- | zebra/rt_netlink.c | 40 |
3 files changed, 75 insertions, 15 deletions
diff --git a/debian/changelog b/debian/changelog index 4b3e200c..8b1075c2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,51 @@ +vyatta-quagga (0.99.9-9) unstable; urgency=low + + 3.0.5 + [ Mark O'Brien ] + + + [ An-Cheng Huang ] + * fix package upgrade problem caused by prerm script. + + [ Mark O'Brien ] + + -- Mark O'Brien <mobrien@vyatta.com> Tue, 06 May 2008 12:43:40 -0700 + +vyatta-quagga (0.99.9-8) unstable; urgency=low + + 3.0.4 + [ Mark O'Brien ] + + + [ Stephen Hemminger ] + * filter out all route change responses on listen socket + * quiet noisy errors from zebra + + [ Mark O'Brien ] + + -- Mark O'Brien <mobrien@vyatta.com> Mon, 05 May 2008 16:40:58 -0700 + +vyatta-quagga (0.99.9-7) unstable; urgency=low + + 3.0.3 + [ Mark O'Brien ] + + + [ Stephen Hemminger ] + * mark static routes as inactive when link is down + * Don't build watchlink + * Don't build watchlink + * Check nexthop for internal routes + * Check nexthop status + * Two passes on update (ipv4 and ipv6) + + [ rbalocca ] + * Indicate the VC4.0.2 release candidate in the changelog + + [ Mark O'Brien ] + + -- Mark O'Brien <mobrien@vyatta.com> Tue, 29 Apr 2008 16:42:45 -0700 + vyatta-quagga (0.99.9-6) unstable; urgency=low VC4.0.2 diff --git a/debian/vyatta-quagga.prerm b/debian/vyatta-quagga.prerm index 4794d342..69792d27 100644 --- a/debian/vyatta-quagga.prerm +++ b/debian/vyatta-quagga.prerm @@ -1 +1,3 @@ +#!/bin/sh + case "$1" in upgrade) exit 0;; esac diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 273c3121..c387917b 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -425,7 +425,13 @@ netlink_parse_info (int (*filter) (struct sockaddr_nl *, struct nlmsghdr *), if (nl == &netlink_cmd && (-errnum == ENODEV || -errnum == ESRCH) && (msg_type == RTM_NEWROUTE || msg_type == RTM_DELROUTE)) - loglvl = LOG_DEBUG; + { + /* These errors are normal during link transistion */ + if (IS_ZEBRA_DEBUG_KERNEL) + loglvl = LOG_DEBUG; + else + return -1; + } zlog (NULL, loglvl, "%s error: %s, type=%s(%u), " "seq=%u, pid=%u", @@ -1939,22 +1945,26 @@ kernel_read (struct thread *thread) return 0; } -/* Filter out messages from self that occur on listener socket */ -static void netlink_install_filter (int sock) +/* Filter out messages from self that occur on listener socket, + caused by our actions on the command socket + */ +static void netlink_install_filter (int sock, __u32 pid) { - /* BPF code to exclude all RTM_NEWROUTE messages from ZEBRA */ struct sock_filter filter[] = { + /* 0: ldh [4] */ BPF_STMT(BPF_LD|BPF_ABS|BPF_H, offsetof(struct nlmsghdr, nlmsg_type)), - /* 0: ldh [4] */ - BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(RTM_NEWROUTE), 0, 3), - /* 1: jeq 0x18 jt 2 jf 5 */ - BPF_STMT(BPF_LD|BPF_ABS|BPF_B, - sizeof(struct nlmsghdr) + offsetof(struct rtmsg, rtm_protocol)), - /* 2: ldb [23] */ - BPF_JUMP(BPF_JMP+ BPF_B, RTPROT_ZEBRA, 0, 1), - /* 3: jeq 0xb jt 4 jf 5 */ - BPF_STMT(BPF_RET|BPF_K, 0), /* 4: ret 0 */ - BPF_STMT(BPF_RET|BPF_K, 0xffff), /* 5: ret 0xffff */ + /* 1: jeq 0x18 jt 3 jf 6 */ + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(RTM_NEWROUTE), 1, 0), + /* 2: jeq 0x19 jt 3 jf 6 */ + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htons(RTM_DELROUTE), 0, 3), + /* 3: ldw [12] */ + BPF_STMT(BPF_LD|BPF_ABS|BPF_W, offsetof(struct nlmsghdr, nlmsg_pid)), + /* 4: jeq XX jt 5 jf 6 */ + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, htonl(pid), 0, 1), + /* 5: ret 0 (skip) */ + BPF_STMT(BPF_RET|BPF_K, 0), + /* 6: ret 0xffff (keep) */ + BPF_STMT(BPF_RET|BPF_K, 0xffff), }; struct sock_fprog prog = { @@ -1983,7 +1993,7 @@ kernel_init (void) /* Register kernel socket. */ if (netlink.sock > 0) { - netlink_install_filter (netlink.sock); + netlink_install_filter (netlink.sock, netlink_cmd.snl.nl_pid); thread_add_read (zebrad.master, kernel_read, NULL, netlink.sock); } } |