summaryrefslogtreecommitdiff
path: root/usr.sbin/bgpd/mrt.h
diff options
context:
space:
mode:
authorClaudio Jeker <claudio@cvs.openbsd.org>2009-03-19 07:00:08 +0000
committerClaudio Jeker <claudio@cvs.openbsd.org>2009-03-19 07:00:08 +0000
commita416ef2579f9f2fef5f7e79c894ef1d26960149b (patch)
tree076e6dc5e1e311d62dd556d266d95b18762c50e2 /usr.sbin/bgpd/mrt.h
parent7ce2d296a96fe58889baaa6681aa25aa393cc95d (diff)
First big chunk of mrt rewrite. Simplifies code hopefully and fixes table
dumps that were wrong because of the 4byte AS support. Dumps I took seemed to work so far. "Put it in" henning@
Diffstat (limited to 'usr.sbin/bgpd/mrt.h')
-rw-r--r--usr.sbin/bgpd/mrt.h72
1 files changed, 44 insertions, 28 deletions
diff --git a/usr.sbin/bgpd/mrt.h b/usr.sbin/bgpd/mrt.h
index 2998c18cbec..6a6bc805987 100644
--- a/usr.sbin/bgpd/mrt.h
+++ b/usr.sbin/bgpd/mrt.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mrt.h,v 1.18 2009/03/13 06:25:04 claudio Exp $ */
+/* $OpenBSD: mrt.h,v 1.19 2009/03/19 07:00:07 claudio Exp $ */
/*
* Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org>
@@ -20,12 +20,10 @@
#include "bgpd.h"
-/* In cases of failure wait at least MRT_MIN_RETRY. */
-#define MRT_MIN_RETRY 300
-
/*
- * MRT binary packet format as used by zebra.
+ * MRT binary packet format
* For more info see:
+ * draft-ietf-grow-mrt-04.txt, "MRT routing information export format"
* http://www.quagga.net/docs/docs-multi/Packet-Binary-Dump-Format.html
*/
@@ -38,24 +36,33 @@
* +--------+--------+--------+--------+
* | length | length of packet excluding this header
* +--------+--------+--------+--------+
+ *
+ * ET types include an additional 32bit microsecond field comming after the
+ * length field.
*/
#define MRT_HEADER_SIZE 12
enum MRT_MSG_TYPES {
- MSG_NULL,
+ MSG_NULL, /* 0 empty msg (deprecated) */
MSG_START, /* 1 sender is starting up */
- MSG_DIE, /* 2 receiver should shut down */
+ MSG_DIE, /* 2 receiver should shut down (deprecated) */
MSG_I_AM_DEAD, /* 3 sender is shutting down */
- MSG_PEER_DOWN, /* 4 sender's peer is down */
- MSG_PROTOCOL_BGP, /* 5 msg is a BGP packet */
+ MSG_PEER_DOWN, /* 4 sender's peer is down (deprecated) */
+ MSG_PROTOCOL_BGP, /* 5 msg is a BGP packet (deprecated) */
MSG_PROTOCOL_RIP, /* 6 msg is a RIP packet */
- MSG_PROTOCOL_IDRP, /* 7 msg is an IDRP packet */
+ MSG_PROTOCOL_IDRP, /* 7 msg is an IDRP packet (deprecated) */
MSG_PROTOCOL_RIPNG, /* 8 msg is a RIPNG packet */
- MSG_PROTOCOL_BGP4PLUS, /* 9 msg is a BGP4+ packet */
- MSG_PROTOCOL_BGP4PLUS1, /* 10 msg is a BGP4+ (draft 01) packet */
+ MSG_PROTOCOL_BGP4PLUS, /* 9 msg is a BGP4+ packet (deprecated) */
+ MSG_PROTOCOL_BGP4PLUS1, /* 10 msg is a BGP4+ (draft 01) (deprecated) */
MSG_PROTOCOL_OSPF, /* 11 msg is an OSPF packet */
MSG_TABLE_DUMP, /* 12 routing table dump */
- MSG_PROTOCOL_BGP4MP=16 /* 16 zebras own packet format */
+ MSG_TABLE_DUMP_V2, /* 13 routing table dump */
+ MSG_PROTOCOL_BGP4MP=16, /* 16 zebras own packet format */
+ MSG_PROTOCOL_BGP4MP_ET=17,
+ MSG_PROTOCOL_ISIS=32, /* 32 msg is a ISIS package */
+ MSG_PROTOCOL_ISIS_ET=33,
+ MSG_PROTOCOL_OSPFV3=48, /* 48 msg is a OSPFv3 package */
+ MSG_PROTOCOL_OSPFV3_ET=49
};
/*
@@ -64,15 +71,20 @@ enum MRT_MSG_TYPES {
* In most cases this is the format to choose to dump updates et al.
*/
enum MRT_BGP4MP_TYPES {
- BGP4MP_STATE_CHANGE=0, /* state change */
- BGP4MP_MESSAGE=1, /* bgp message */
- BGP4MP_ENTRY=2, /* table dumps */
- BGP4MP_SNAPSHOT=3
+ BGP4MP_STATE_CHANGE, /* state change */
+ BGP4MP_MESSAGE, /* bgp message */
+ BGP4MP_ENTRY, /* table dumps (deprecated) */
+ BGP4MP_SNAPSHOT, /* file name for dump (deprecated) */
+ BGP4MP_STATE_CHANGE_AS4,
+ BGP4MP_MESSAGE_AS4 /* same as BGP4MP_MESSAGE with 4byte AS */
};
/* size of the BGP4MP headers without payload */
#define MRT_BGP4MP_IPv4_HEADER_SIZE 16
#define MRT_BGP4MP_IPv6_HEADER_SIZE 40
+/* 4-byte AS variants of the previous */
+#define MRT_BGP4MP_AS4_IPv4_HEADER_SIZE 20
+#define MRT_BGP4MP_AS4_IPv6_HEADER_SIZE 44
/* If the type is PROTOCOL_BGP4MP and the subtype is either BGP4MP_STATE_CHANGE
* or BGP4MP_MESSAGE the message consists of a common header plus the payload.
@@ -110,6 +122,7 @@ enum MRT_BGP4MP_TYPES {
*/
#define MRT_BGP4MP_IPv4_ENTRY_SIZE 18
#define MRT_BGP4MP_IPv6_ENTRY_SIZE 30
+#define MRT_BGP4MP_MAX_PREFIXLEN 17
/*
* The "new" table dump format consists of messages of type PROTOCOL_BGP4MP
* and subtype BGP4MP_ENTRY.
@@ -151,9 +164,9 @@ enum MRT_BGP4MP_TYPES {
* +--------+--------+--------+--------+
* | prefix |
* +--------+--------+--------+--------+
- * | plen | status | originated
+ * | plen | status | originated time
* +--------+--------+--------+--------+
- * originated | peer_ip
+ * originated time | peer_ip
* +--------+--------+--------+--------+
* peer_ip | peer_as |
* +--------+--------+--------+--------+
@@ -166,8 +179,7 @@ enum MRT_BGP4MP_TYPES {
*
*
* View is normaly 0 and seqnum just a simple counter for this dump.
- * The status seems to be 1 by default but probably something to indicate
- * the status of a prefix would be more useful.
+ * The status field is unused and should be set to 1.
*/
/* size of the dump header until attr_len */
@@ -186,10 +198,14 @@ enum MRT_BGP_TYPES {
and announcements) */
MSG_BGP_PREF_UPDATE, /* tlv preferences followed by raw update */
MSG_BGP_STATE_CHANGE, /* state change */
- MSG_BGP_SYNC
+ MSG_BGP_SYNC, /* file name for a table dump */
+ MSG_BGP_OPEN, /* BGP open messages */
+ MSG_BGP_NOTIFY, /* BGP notify messages */
+ MSG_BGP_KEEPALIVE /* BGP keepalives */
};
-/* if type MSG_PROTOCOL_BGP and subtype MSG_BGP_UPDATE
+/* if type MSG_PROTOCOL_BGP and subtype MSG_BGP_UPDATE, MSG_BGP_OPEN,
+ * MSG_BGP_NOTIFY or MSG_BGP_KEEPALIVE
*
* +--------+--------+--------+--------+
* | source_as | source_ip
@@ -225,7 +241,7 @@ enum MRT_BGP_TYPES {
/*
* if type MSG_PROTOCOL_BGP and subtype MSG_BGP_SYNC OR
* if type MSG_PROTOCOL_BGP4MP and subtype BGP4MP_SNAPSHOT
- * What is this for?
+ * *DEPRECATED*
*
* +--------+--------+--------+--------+
* | view | filename
@@ -279,10 +295,10 @@ struct prefix;
struct pt_entry;
/* prototypes */
-int mrt_dump_bgp_msg(struct mrt *, void *, u_int16_t,
- struct peer *, struct bgpd_config *);
-int mrt_dump_state(struct mrt *, u_int16_t, u_int16_t,
- struct peer *, struct bgpd_config *);
+void mrt_dump_bgp_msg(struct mrt *, void *, u_int16_t,
+ struct peer *);
+void mrt_dump_state(struct mrt *, u_int16_t, u_int16_t,
+ struct peer *);
void mrt_clear_seq(void);
void mrt_dump_upcall(struct pt_entry *, void *);
void mrt_write(struct mrt *);