summaryrefslogtreecommitdiffstats
path: root/zebra/kernel_socket.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2010-02-05 04:31:56 +0100
committerDavid Lamparter <equinox@diac24.net>2010-02-05 04:39:55 +0100
commitcf245afd5dd1f8c7c80089465e610acaaa1e2f24 (patch)
tree6065436c819b730b20a5bd30ae281e272bdfeeb1 /zebra/kernel_socket.c
parentada3758d3977726fa3140a27a0e503787a83ab71 (diff)
downloadquagga-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.c15
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) \