summaryrefslogtreecommitdiff
path: root/net/openbgpd/files/patch-bgpd_bgpd.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/openbgpd/files/patch-bgpd_bgpd.h')
-rw-r--r--net/openbgpd/files/patch-bgpd_bgpd.h314
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);