diff options
author | Vyacheslav Trushkin <me@dogonthesun.net> | 2011-12-11 18:48:47 +0400 |
---|---|---|
committer | Denis Ovsienko <infrastation@yandex.ru> | 2012-01-02 18:37:24 +0400 |
commit | 2ea1ab1c30c765cd4703794fcfaf044454fb533c (patch) | |
tree | 650e97a5a9e8cc1fb8666ff6ce87647df3e0e604 /lib | |
parent | 2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94 (diff) |
zebra: ZEBRA_HELLO and mopping up routes (BZ#448)
ZEBRA_HELLO message is used by routing daemons to inform zebra
what type of routes daemon will be announcing to zebra. Also
zebra uses route_type_oaths array to track which daemon announces
which protocol. Zebra mops up routes if daemon didn't for some
reason.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/zclient.c | 21 | ||||
-rw-r--r-- | lib/zebra.h | 3 |
2 files changed, 23 insertions, 1 deletions
diff --git a/lib/zclient.c b/lib/zclient.c index 5815eaa8..12d113e7 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -318,6 +318,25 @@ zebra_message_send (struct zclient *zclient, int command) return zclient_send_message(zclient); } +static int +zebra_hello_send (struct zclient *zclient) +{ + struct stream *s; + + if (zclient->redist_default) + { + s = zclient->obuf; + stream_reset (s); + + zclient_create_header (s, ZEBRA_HELLO); + stream_putc (s, zclient->redist_default); + stream_putw_at (s, 0, stream_get_endp (s)); + return zclient_send_message(zclient); + } + + return 0; +} + /* Make connection to zebra daemon. */ int zclient_start (struct zclient *zclient) @@ -359,6 +378,8 @@ zclient_start (struct zclient *zclient) /* Create read thread. */ zclient_event (ZCLIENT_READ, zclient); + zebra_hello_send (zclient); + /* We need router-id information. */ zebra_message_send (zclient, ZEBRA_ROUTER_ID_ADD); diff --git a/lib/zebra.h b/lib/zebra.h index 4b4c7c00..ab072d6e 100644 --- a/lib/zebra.h +++ b/lib/zebra.h @@ -417,7 +417,8 @@ struct in_pktinfo #define ZEBRA_ROUTER_ID_ADD 20 #define ZEBRA_ROUTER_ID_DELETE 21 #define ZEBRA_ROUTER_ID_UPDATE 22 -#define ZEBRA_MESSAGE_MAX 23 +#define ZEBRA_HELLO 23 +#define ZEBRA_MESSAGE_MAX 24 /* Marker value used in new Zserv, in the byte location corresponding * the command value in the old zserv header. To allow old and new |