diff options
author | Claudio Jeker <claudio@cvs.openbsd.org> | 2009-03-19 07:00:08 +0000 |
---|---|---|
committer | Claudio Jeker <claudio@cvs.openbsd.org> | 2009-03-19 07:00:08 +0000 |
commit | a416ef2579f9f2fef5f7e79c894ef1d26960149b (patch) | |
tree | 076e6dc5e1e311d62dd556d266d95b18762c50e2 /usr.sbin/bgpd/mrt.h | |
parent | 7ce2d296a96fe58889baaa6681aa25aa393cc95d (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.h | 72 |
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 *); |