diff options
Diffstat (limited to 'net/openbgpd/files/patch-bgpd_bgpd.h')
-rw-r--r-- | net/openbgpd/files/patch-bgpd_bgpd.h | 314 |
1 files changed, 248 insertions, 66 deletions
diff --git a/net/openbgpd/files/patch-bgpd_bgpd.h b/net/openbgpd/files/patch-bgpd_bgpd.h index c374b981553c..a624b0796bd8 100644 --- a/net/openbgpd/files/patch-bgpd_bgpd.h +++ b/net/openbgpd/files/patch-bgpd_bgpd.h @@ -2,13 +2,13 @@ Index: bgpd/bgpd.h =================================================================== RCS file: /home/cvs/private/hrs/openbgpd/bgpd/bgpd.h,v retrieving revision 1.1.1.8 -retrieving revision 1.12 -diff -u -p -r1.1.1.8 -r1.12 +retrieving revision 1.13 +diff -u -p -r1.1.1.8 -r1.13 --- bgpd/bgpd.h 14 Feb 2010 20:19:57 -0000 1.1.1.8 -+++ bgpd/bgpd.h 2 Jul 2011 16:06:38 -0000 1.12 ++++ bgpd/bgpd.h 13 Oct 2012 18:36:00 -0000 1.13 @@ -1,4 +1,4 @@ -/* $OpenBSD: bgpd.h,v 1.241 2009/06/12 16:42:53 claudio Exp $ */ -+/* $OpenBSD: bgpd.h,v 1.255 2010/04/06 13:25:08 claudio Exp $ */ ++/* $OpenBSD: bgpd.h,v 1.272 2012/09/18 09:45:51 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -61,7 +61,7 @@ diff -u -p -r1.1.1.8 -r1.12 #define BGPD_FLAG_NEXTHOP_BGP 0x0080 #define BGPD_FLAG_NEXTHOP_DEFAULT 0x1000 #define BGPD_FLAG_DECISION_MASK 0x0f00 -@@ -83,6 +82,8 @@ +@@ -83,9 +82,12 @@ #define F_REJECT 0x0080 #define F_BLACKHOLE 0x0100 #define F_LONGER 0x0200 @@ -70,7 +70,11 @@ diff -u -p -r1.1.1.8 -r1.12 #define F_CTL_DETAIL 0x1000 /* only used by bgpctl */ #define F_CTL_ADJ_IN 0x2000 #define F_CTL_ADJ_OUT 0x4000 -@@ -109,18 +110,74 @@ enum reconf_action { ++#define F_CTL_ACTIVE 0x8000 + + /* + * Limit the number of control messages generated by the RDE and queued in +@@ -109,18 +111,75 @@ enum reconf_action { RECONF_DELETE }; @@ -100,6 +104,7 @@ diff -u -p -r1.1.1.8 -r1.12 +#define AID_INET6 2 +#define AID_VPN_IPv4 3 +#define AID_MAX 4 ++#define AID_MIN 1 /* skip AID_UNSPEC since that is a dummy */ + +#define AID_VALS { \ + /* afi, af, safii, name */ \ @@ -149,7 +154,7 @@ diff -u -p -r1.1.1.8 -r1.12 #define addr8 ba.addr8 #define addr16 ba.addr16 #define addr32 ba.addr32 -@@ -141,17 +198,12 @@ TAILQ_HEAD(listen_addrs, listen_addr); +@@ -141,17 +200,12 @@ TAILQ_HEAD(listen_addrs, listen_addr); TAILQ_HEAD(filter_set_head, filter_set); struct bgpd_config { @@ -167,7 +172,7 @@ diff -u -p -r1.1.1.8 -r1.12 u_int32_t bgpid; u_int32_t clusterid; u_int32_t as; -@@ -205,11 +257,10 @@ struct peer_auth { +@@ -205,12 +259,24 @@ struct peer_auth { }; struct capabilities { @@ -176,14 +181,38 @@ diff -u -p -r1.1.1.8 -r1.12 - u_int8_t refresh; /* route refresh, RFC 2918 */ - u_int8_t restart; /* graceful restart, RFC 4724 */ - u_int8_t as4byte; /* draft-ietf-idr-as4bytes-13 */ -+ int8_t mp[AID_MAX]; /* multiprotocol extensions, RFC 4760 */ -+ int8_t refresh; /* route refresh, RFC 2918 */ -+ int8_t restart; /* graceful restart, RFC 4724 */ -+ int8_t as4byte; /* draft-ietf-idr-as4bytes-13 */ - }; +-}; ++ struct { ++ int16_t timeout; /* graceful restart timeout */ ++ int8_t flags[AID_MAX]; /* graceful restart per AID flags */ ++ int8_t restart; /* graceful restart, RFC 4724 */ ++ } grestart; ++ int8_t mp[AID_MAX]; /* multiprotocol extensions, RFC 4760 */ ++ int8_t refresh; /* route refresh, RFC 2918 */ ++ int8_t as4byte; /* 4-byte ASnum, RFC 4893 */ ++}; ++ ++#define CAPA_GR_PRESENT 0x01 ++#define CAPA_GR_RESTART 0x02 ++#define CAPA_GR_FORWARD 0x04 ++#define CAPA_GR_RESTARTING 0x08 ++ ++#define CAPA_GR_TIMEMASK 0x0fff ++#define CAPA_GR_R_FLAG 0x8000 ++#define CAPA_GR_F_FLAG 0x80 struct peer_config { -@@ -248,21 +299,31 @@ struct peer_config { + struct bgpd_addr remote_addr; +@@ -237,7 +303,7 @@ struct peer_config { + u_int8_t template; + u_int8_t remote_masklen; + u_int8_t cloned; +- u_int8_t ebgp; /* 1 = ebgp, 0 = ibgp */ ++ u_int8_t ebgp; /* 0 = ibgp else ebgp */ + u_int8_t distance; /* 1 = direct, >1 = multihop */ + u_int8_t passive; + u_int8_t down; +@@ -248,21 +314,33 @@ struct peer_config { u_int8_t ttlsec; /* TTL security hack */ u_int8_t flags; u_int8_t pad[3]; @@ -195,16 +224,21 @@ diff -u -p -r1.1.1.8 -r1.12 +enum network_type { + NETWORK_DEFAULT, + NETWORK_STATIC, -+ NETWORK_CONNECTED ++ NETWORK_CONNECTED, ++ NETWORK_MRTCLONE +}; + struct network_config { - struct bgpd_addr prefix; - struct filter_set_head attrset; -+ u_int rtableid; -+ enum network_type type; - u_int8_t prefixlen; -+ u_int8_t old; /* used for reloading */ +- struct bgpd_addr prefix; +- struct filter_set_head attrset; +- u_int8_t prefixlen; ++ struct bgpd_addr prefix; ++ struct filter_set_head attrset; ++ struct rde_aspath *asp; ++ u_int rtableid; ++ enum network_type type; ++ u_int8_t prefixlen; ++ u_int8_t old; /* used for reloading */ }; TAILQ_HEAD(network_head, network); @@ -217,7 +251,7 @@ diff -u -p -r1.1.1.8 -r1.12 }; enum imsg_type { -@@ -276,7 +337,6 @@ enum imsg_type { +@@ -276,7 +354,6 @@ enum imsg_type { IMSG_CTL_NEIGHBOR_CLEAR, IMSG_CTL_NEIGHBOR_RREFRESH, IMSG_CTL_KROUTE, @@ -225,7 +259,7 @@ diff -u -p -r1.1.1.8 -r1.12 IMSG_CTL_KROUTE_ADDR, IMSG_CTL_RESULT, IMSG_CTL_SHOW_NEIGHBOR, -@@ -288,10 +348,11 @@ enum imsg_type { +@@ -288,11 +365,14 @@ enum imsg_type { IMSG_CTL_SHOW_RIB_ATTR, IMSG_CTL_SHOW_RIB_COMMUNITY, IMSG_CTL_SHOW_NETWORK, @@ -236,9 +270,12 @@ diff -u -p -r1.1.1.8 -r1.12 + IMSG_CTL_LOG_VERBOSE, + IMSG_CTL_SHOW_FIB_TABLES, IMSG_NETWORK_ADD, ++ IMSG_NETWORK_ASPATH, ++ IMSG_NETWORK_ATTR, IMSG_NETWORK_REMOVE, IMSG_NETWORK_FLUSH, -@@ -302,6 +363,11 @@ enum imsg_type { + IMSG_NETWORK_DONE, +@@ -302,19 +382,25 @@ enum imsg_type { IMSG_RECONF_PEER, IMSG_RECONF_FILTER, IMSG_RECONF_LISTENER, @@ -250,7 +287,14 @@ diff -u -p -r1.1.1.8 -r1.12 IMSG_RECONF_DONE, IMSG_UPDATE, IMSG_UPDATE_ERR, -@@ -313,8 +379,6 @@ enum imsg_type { + IMSG_SESSION_ADD, + IMSG_SESSION_UP, + IMSG_SESSION_DOWN, ++ IMSG_SESSION_STALE, ++ IMSG_SESSION_FLUSH, ++ IMSG_SESSION_RESTARTED, + IMSG_MRT_OPEN, + IMSG_MRT_REOPEN, IMSG_MRT_CLOSE, IMSG_KROUTE_CHANGE, IMSG_KROUTE_DELETE, @@ -259,7 +303,15 @@ diff -u -p -r1.1.1.8 -r1.12 IMSG_NEXTHOP_ADD, IMSG_NEXTHOP_REMOVE, IMSG_NEXTHOP_UPDATE, -@@ -379,9 +443,43 @@ enum suberr_cease { +@@ -337,6 +423,7 @@ enum ctl_results { + CTL_RES_DENIED, + CTL_RES_NOCAP, + CTL_RES_PARSE_ERROR, ++ CTL_RES_PENDING, + CTL_RES_NOMEM + }; + +@@ -379,9 +466,43 @@ enum suberr_cease { ERR_CEASE_RSRC_EXHAUST }; @@ -303,7 +355,7 @@ diff -u -p -r1.1.1.8 -r1.12 u_int16_t flags; u_int16_t labelid; u_short ifindex; -@@ -400,14 +498,12 @@ struct kroute6 { +@@ -400,14 +521,12 @@ struct kroute6 { }; struct kroute_nexthop { @@ -320,7 +372,7 @@ diff -u -p -r1.1.1.8 -r1.12 }; struct kif { -@@ -423,8 +519,7 @@ struct kif { +@@ -423,8 +542,7 @@ struct kif { struct session_up { struct bgpd_addr local_addr; struct bgpd_addr remote_addr; @@ -330,7 +382,7 @@ diff -u -p -r1.1.1.8 -r1.12 u_int32_t remote_bgpid; u_int16_t short_as; }; -@@ -437,8 +532,13 @@ struct pftable_msg { +@@ -437,8 +555,13 @@ struct pftable_msg { struct ctl_show_nexthop { struct bgpd_addr addr; @@ -345,7 +397,7 @@ diff -u -p -r1.1.1.8 -r1.12 }; struct ctl_neighbor { -@@ -447,20 +547,10 @@ struct ctl_neighbor { +@@ -447,20 +570,11 @@ struct ctl_neighbor { int show_timers; }; @@ -367,10 +419,36 @@ diff -u -p -r1.1.1.8 -r1.12 +#define F_PREF_ACTIVE 0x02 +#define F_PREF_INTERNAL 0x04 +#define F_PREF_ANNOUNCE 0x08 ++#define F_PREF_STALE 0x10 struct ctl_show_rib { struct bgpd_addr true_nexthop; -@@ -498,16 +588,52 @@ enum as_spec { +@@ -472,9 +586,7 @@ struct ctl_show_rib { + u_int32_t remote_id; + u_int32_t local_pref; + u_int32_t med; +- u_int32_t prefix_cnt; +- u_int32_t active_cnt; +- u_int32_t rib_cnt; ++ u_int32_t weight; + u_int16_t aspath_len; + u_int16_t flags; + u_int8_t prefixlen; +@@ -482,13 +594,6 @@ struct ctl_show_rib { + /* plus a aspath_len bytes long aspath */ + }; + +-struct ctl_show_rib_prefix { +- struct bgpd_addr prefix; +- time_t lastchange; +- u_int16_t flags; +- u_int8_t prefixlen; +-}; +- + enum as_spec { + AS_NONE, + AS_ALL, +@@ -498,16 +603,52 @@ enum as_spec { AS_EMPTY }; @@ -385,13 +463,13 @@ diff -u -p -r1.1.1.8 -r1.12 u_int32_t as; + u_int16_t flags; + enum as_spec type; - }; - ++}; ++ +struct filter_aslen { + u_int aslen; + enum aslen_spec type; -+}; -+ + }; + +#define AS_FLAG_NEIGHBORAS 0x01 + struct filter_community { @@ -426,7 +504,7 @@ diff -u -p -r1.1.1.8 -r1.12 struct ctl_show_rib_request { char rib[PEER_DESCR_LEN]; struct ctl_neighbor neighbor; -@@ -518,8 +644,8 @@ struct ctl_show_rib_request { +@@ -518,8 +659,8 @@ struct ctl_show_rib_request { pid_t pid; u_int16_t flags; enum imsg_type type; @@ -436,7 +514,7 @@ diff -u -p -r1.1.1.8 -r1.12 }; enum filter_actions { -@@ -585,6 +711,28 @@ struct filter_peers { +@@ -585,6 +726,28 @@ struct filter_peers { #define EXT_COMMUNITY_OSPF_RTR_TYPE 6 /* RFC 4577 */ #define EXT_COMMUNITY_OSPF_RTR_ID 7 /* RFC 4577 */ #define EXT_COMMUNITY_BGP_COLLECT 8 /* RFC 4384 */ @@ -465,7 +543,7 @@ diff -u -p -r1.1.1.8 -r1.12 struct filter_prefix { -@@ -594,16 +742,18 @@ struct filter_prefix { +@@ -594,16 +757,18 @@ struct filter_prefix { struct filter_prefixlen { enum comp_ops op; @@ -489,7 +567,7 @@ diff -u -p -r1.1.1.8 -r1.12 }; TAILQ_HEAD(filter_head, filter_rule); -@@ -635,10 +785,13 @@ enum action_types { +@@ -635,10 +800,13 @@ enum action_types { ACTION_SET_NEXTHOP_SELF, ACTION_SET_COMMUNITY, ACTION_DEL_COMMUNITY, @@ -504,7 +582,7 @@ diff -u -p -r1.1.1.8 -r1.12 }; struct filter_set { -@@ -650,23 +803,53 @@ struct filter_set { +@@ -650,23 +818,53 @@ struct filter_set { int32_t relative; struct bgpd_addr nexthop; struct filter_community community; @@ -530,7 +608,7 @@ diff -u -p -r1.1.1.8 -r1.12 + u_int rtableid; + u_int label; + int flags; -+}; + }; +SIMPLEQ_HEAD(rdomain_head, rdomain); + +struct rde_rib { @@ -539,7 +617,7 @@ diff -u -p -r1.1.1.8 -r1.12 + u_int rtableid; + u_int16_t id; + u_int16_t flags; - }; ++}; +SIMPLEQ_HEAD(rib_names, rde_rib); +extern struct rib_names ribnames; + @@ -563,7 +641,7 @@ diff -u -p -r1.1.1.8 -r1.12 int64_t nexthop_cnt; int64_t aspath_cnt; int64_t aspath_size; -@@ -677,38 +860,29 @@ struct rde_memstats { +@@ -677,82 +875,117 @@ struct rde_memstats { int64_t attr_dcnt; }; @@ -572,7 +650,39 @@ diff -u -p -r1.1.1.8 -r1.12 - char name[PEER_DESCR_LEN]; - u_int16_t id; - u_int16_t flags; --}; ++/* macros for IPv6 link-local address */ ++#if defined(__KAME__) && defined(IPV6_LINKLOCAL_PEER) ++#define IN6_LINKLOCAL_IFINDEX(addr) \ ++ ((addr).s6_addr[2] << 8 | (addr).s6_addr[3]) ++ ++#define SET_IN6_LINKLOCAL_IFINDEX(addr, index) \ ++ do { \ ++ (addr).s6_addr[2] = ((index) >> 8) & 0xff; \ ++ (addr).s6_addr[3] = (index) & 0xff; \ ++ } while (0) ++#endif ++ ++#define MRT_FILE_LEN 512 ++#define MRT2MC(x) ((struct mrt_config *)(x)) ++#define MRT_MAX_TIMEOUT 7200 ++ ++enum mrt_type { ++ MRT_NONE, ++ MRT_TABLE_DUMP, ++ MRT_TABLE_DUMP_MP, ++ MRT_TABLE_DUMP_V2, ++ MRT_ALL_IN, ++ MRT_ALL_OUT, ++ MRT_UPDATE_IN, ++ MRT_UPDATE_OUT ++}; ++ ++enum mrt_state { ++ MRT_STATE_RUNNING, ++ MRT_STATE_OPEN, ++ MRT_STATE_REOPEN, ++ MRT_STATE_REMOVE + }; -SIMPLEQ_HEAD(rib_names, rde_rib); -extern struct rib_names ribnames; - @@ -580,26 +690,32 @@ diff -u -p -r1.1.1.8 -r1.12 -#define AFI_IPv4 1 -#define AFI_IPv6 2 -#define AFI_ALL 0xffff -- + -/* Subsequent Address Family Identifier as per RFC 4760 */ -#define SAFI_NONE 0x00 -#define SAFI_UNICAST 0x01 -#define SAFI_MULTICAST 0x02 -#define SAFI_ALL 0xff -- ++struct mrt { ++ char rib[PEER_DESCR_LEN]; ++ struct msgbuf wbuf; ++ LIST_ENTRY(mrt) entry; ++ u_int32_t peer_id; ++ u_int32_t group_id; ++ enum mrt_type type; ++ enum mrt_state state; ++ u_int16_t seqnum; ++}; + -/* 4-byte magic AS number */ -#define AS_TRANS 23456 -+/* macros for IPv6 link-local address */ -+#if defined(__KAME__) && defined(IPV6_LINKLOCAL_PEER) -+#define IN6_LINKLOCAL_IFINDEX(addr) \ -+ ((addr).s6_addr[2] << 8 | (addr).s6_addr[3]) -+ -+#define SET_IN6_LINKLOCAL_IFINDEX(addr, index) \ -+ do { \ -+ (addr).s6_addr[2] = ((index) >> 8) & 0xff; \ -+ (addr).s6_addr[3] = (index) & 0xff; \ -+ } while (0) -+#endif ++struct mrt_config { ++ struct mrt conf; ++ char name[MRT_FILE_LEN]; /* base file name */ ++ char file[MRT_FILE_LEN]; /* actual file name */ ++ time_t ReopenTimer; ++ time_t ReopenTimerInterval; ++}; /* prototypes */ /* bgpd.c */ @@ -610,13 +726,25 @@ diff -u -p -r1.1.1.8 -r1.12 + struct filter_set_head *); int bgpd_filternexthop(struct kroute *, struct kroute6 *); - /* log.c */ - void log_init(int); -+void log_verbose(int); - void vlog(int, const char *, va_list); - void log_peer_warn(const struct peer_config *, const char *, ...); - void log_peer_warnx(const struct peer_config *, const char *, ...); -@@ -726,19 +900,22 @@ int cmdline_symset(char *); +-/* log.c */ +-void log_init(int); +-void vlog(int, const char *, va_list); +-void log_peer_warn(const struct peer_config *, const char *, ...); +-void log_peer_warnx(const struct peer_config *, const char *, ...); +-void log_warn(const char *, ...); +-void log_warnx(const char *, ...); +-void log_info(const char *, ...); +-void log_debug(const char *, ...); +-void fatal(const char *) __dead; +-void fatalx(const char *) __dead; +- +-/* parse.y */ +-int cmdline_symset(char *); ++/* control.c */ ++void control_cleanup(const char *); ++int control_imsg_relay(struct imsg *); + + /* config.c */ int host(const char *, struct bgpd_addr *, u_int8_t *); /* kroute.c */ @@ -648,7 +776,57 @@ diff -u -p -r1.1.1.8 -r1.12 int kr_reload(void); struct in6_addr *prefixlen2mask6(u_int8_t prefixlen); -@@ -772,6 +949,8 @@ void pftable_ref(u_int16_t); +-/* control.c */ +-void control_cleanup(const char *); +-int control_imsg_relay(struct imsg *); ++/* log.c */ ++void log_init(int); ++void log_verbose(int); ++void vlog(int, const char *, va_list); ++void log_peer_warn(const struct peer_config *, const char *, ...); ++void log_peer_warnx(const struct peer_config *, const char *, ...); ++void log_warn(const char *, ...); ++void log_warnx(const char *, ...); ++void log_info(const char *, ...); ++void log_debug(const char *, ...); ++void fatal(const char *) __dead; ++void fatalx(const char *) __dead; + +-/* pftable.c */ +-int pftable_exists(const char *); +-int pftable_add(const char *); +-int pftable_clear_all(void); +-int pftable_addr_add(struct pftable_msg *); +-int pftable_addr_remove(struct pftable_msg *); +-int pftable_commit(void); ++/* mrt.c */ ++void mrt_clear_seq(void); ++void mrt_write(struct mrt *); ++void mrt_clean(struct mrt *); ++void mrt_init(struct imsgbuf *, struct imsgbuf *); ++int mrt_timeout(struct mrt_head *); ++void mrt_reconfigure(struct mrt_head *); ++void mrt_handler(struct mrt_head *); ++struct mrt *mrt_get(struct mrt_head *, struct mrt *); ++int mrt_mergeconfig(struct mrt_head *, struct mrt_head *); + + /* name2id.c */ + u_int16_t rib_name2id(const char *); +@@ -768,10 +1001,22 @@ const char *pftable_id2name(u_int16_t); + void pftable_unref(u_int16_t); + void pftable_ref(u_int16_t); + ++/* parse.y */ ++int cmdline_symset(char *); ++ ++/* pftable.c */ ++int pftable_exists(const char *); ++int pftable_add(const char *); ++int pftable_clear_all(void); ++int pftable_addr_add(struct pftable_msg *); ++int pftable_addr_remove(struct pftable_msg *); ++int pftable_commit(void); + /* rde_filter.c */ void filterset_free(struct filter_set_head *); int filterset_cmp(struct filter_set *, struct filter_set *); @@ -657,7 +835,7 @@ diff -u -p -r1.1.1.8 -r1.12 const char *filterset_name(enum action_types); /* util.c */ -@@ -779,11 +958,20 @@ const char *log_addr(const struct bgpd_a +@@ -779,11 +1024,24 @@ const char *log_addr(const struct bgpd_a const char *log_in6addr(const struct in6_addr *); const char *log_sockaddr(struct sockaddr *); const char *log_as(u_int32_t); @@ -666,6 +844,10 @@ diff -u -p -r1.1.1.8 -r1.12 int aspath_snprint(char *, size_t, void *, u_int16_t); int aspath_asprint(char **, void *, u_int16_t); size_t aspath_strlen(void *, u_int16_t); ++int aspath_match(void *, u_int16_t, enum as_spec, u_int32_t); ++u_int32_t aspath_extract(const void *, int); ++int prefix_compare(const struct bgpd_addr *, ++ const struct bgpd_addr *, int); in_addr_t prefixlen2mask(u_int8_t); void inet6applymask(struct in6_addr *, const struct in6_addr *, int); |