diff options
author | David Lamparter <equinox@diac24.net> | 2010-02-05 04:31:56 +0100 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2010-02-05 04:39:55 +0100 |
commit | cf245afd5dd1f8c7c80089465e610acaaa1e2f24 (patch) | |
tree | 6065436c819b730b20a5bd30ae281e272bdfeeb1 /zebra/kernel_socket.c | |
parent | ada3758d3977726fa3140a27a0e503787a83ab71 (diff) | |
download | quagga-cf245afd5dd1f8c7c80089465e610acaaa1e2f24.tar.bz2 quagga-cf245afd5dd1f8c7c80089465e610acaaa1e2f24.tar.xz |
zebra: cleanup blackhole support
blackhole support was horribly broken. cleanup by removing blackhole
stuff from ZEBRA_FLAG_*, instead add a "zflags" field inside struct rib.
introduces support for "prohibit" routes (Linux/netlink only)
also clean up blackhole options on "ip route" vty commands.
Diffstat (limited to 'zebra/kernel_socket.c')
-rw-r--r-- | zebra/kernel_socket.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index aa962a35..ea630c6a 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -827,9 +827,9 @@ rtm_read (struct rt_msghdr *rtm) /* This is a reject or blackhole route */ if (flags & RTF_REJECT) - SET_FLAG (zebra_flags, ZEBRA_FLAG_REJECT); + SET_FLAG (zebra_flags, RIB_ZF_REJECT << 8); if (flags & RTF_BLACKHOLE) - SET_FLAG (zebra_flags, ZEBRA_FLAG_BLACKHOLE); + SET_FLAG (zebra_flags, RIB_ZF_BLACKHOLE << 8); if (dest.sa.sa_family == AF_INET) { @@ -1060,11 +1060,12 @@ rtm_write (int message, msg.rtm.rtm_flags |= (RTF_PROTO1); /* Additional flags. */ - if (zebra_flags & ZEBRA_FLAG_BLACKHOLE) - msg.rtm.rtm_flags |= RTF_BLACKHOLE; - if (zebra_flags & ZEBRA_FLAG_REJECT) - msg.rtm.rtm_flags |= RTF_REJECT; - + if (RIB_ZF_BLACKHOLE_FLAGS (zebra_flags >> 8)) + { + unsigned bh_type = RIB_ZF_BLACKHOLE_FLAGS(zebra_flags >> 8); + msg.rtm.rtm_flags |= (bh_type == RIB_ZF_REJECT) + ? RTF_REJECT : RTF_BLACKHOLE; + } #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN #define SOCKADDRSET(X,R) \ |