summaryrefslogtreecommitdiff
path: root/net/openbgpd/files/patch-bgpd_rde.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/openbgpd/files/patch-bgpd_rde.h')
-rw-r--r--net/openbgpd/files/patch-bgpd_rde.h361
1 files changed, 0 insertions, 361 deletions
diff --git a/net/openbgpd/files/patch-bgpd_rde.h b/net/openbgpd/files/patch-bgpd_rde.h
deleted file mode 100644
index ba7d2d095891..000000000000
--- a/net/openbgpd/files/patch-bgpd_rde.h
+++ /dev/null
@@ -1,361 +0,0 @@
-Index: bgpd/rde.h
-===================================================================
-RCS file: /home/cvs/private/hrs/openbgpd/bgpd/rde.h,v
-retrieving revision 1.1.1.8
-retrieving revision 1.1.1.13
-diff -u -p -r1.1.1.8 -r1.1.1.13
---- bgpd/rde.h 14 Feb 2010 20:19:57 -0000 1.1.1.8
-+++ bgpd/rde.h 8 Dec 2012 10:37:09 -0000 1.1.1.13
-@@ -1,8 +1,8 @@
--/* $OpenBSD: rde.h,v 1.120 2009/06/06 01:10:29 claudio Exp $ */
-+/* $OpenBSD: rde.h,v 1.144 2012/09/12 05:56:22 claudio Exp $ */
-
- /*
- * Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> and
-- * Andre Oppermann <oppermann@pipeline.ch>
-+ * Andre Oppermann <oppermann@networx.ch>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
-@@ -56,16 +56,16 @@ struct rde_peer {
- struct bgpd_addr local_v6_addr;
- struct uptree_prefix up_prefix;
- struct uptree_attr up_attrs;
-- struct uplist_attr updates;
-- struct uplist_prefix withdraws;
-- struct uplist_attr updates6;
-- struct uplist_prefix withdraws6;
-- struct capabilities capa_announced;
-- struct capabilities capa_received;
-+ struct uplist_attr updates[AID_MAX];
-+ struct uplist_prefix withdraws[AID_MAX];
-+ struct capabilities capa;
-+ time_t staletime[AID_MAX];
- u_int64_t prefix_rcvd_update;
- u_int64_t prefix_rcvd_withdraw;
-+ u_int64_t prefix_rcvd_eor;
- u_int64_t prefix_sent_update;
- u_int64_t prefix_sent_withdraw;
-+ u_int64_t prefix_sent_eor;
- u_int32_t prefix_cnt; /* # of prefixes */
- u_int32_t remote_bgpid; /* host byte order! */
- u_int32_t up_pcnt;
-@@ -75,12 +75,16 @@ struct rde_peer {
- enum peer_state state;
- u_int16_t ribid;
- u_int16_t short_as;
-+ u_int16_t mrt_idx;
- u_int8_t reconf_in; /* in filter changed */
- u_int8_t reconf_out; /* out filter changed */
-+ u_int8_t reconf_rib; /* rib changed */
- };
-
- #define AS_SET 1
- #define AS_SEQUENCE 2
-+#define AS_CONFED_SEQUENCE 3
-+#define AS_CONFED_SET 4
- #define ASPATH_HEADER_SIZE (sizeof(struct aspath) - sizeof(u_char))
-
- LIST_HEAD(aspath_list, aspath);
-@@ -117,6 +121,9 @@ enum attrtypes {
- #define ATTR_PARTIAL 0x20
- #define ATTR_TRANSITIVE 0x40
- #define ATTR_OPTIONAL 0x80
-+#define ATTR_RESERVED 0x0f
-+/* by default mask the reserved bits and the ext len bit */
-+#define ATTR_DEFMASK (ATTR_RESERVED | ATTR_EXTLEN)
-
- /* default attribute flags for well known attributes */
- #define ATTR_WELL_KNOWN ATTR_TRANSITIVE
-@@ -163,6 +170,8 @@ LIST_HEAD(prefix_head, prefix);
- #define F_NEXTHOP_REJECT 0x02000
- #define F_NEXTHOP_BLACKHOLE 0x04000
- #define F_NEXTHOP_NOMODIFY 0x08000
-+#define F_NEXTHOP_MASK 0x0f000
-+#define F_ATTR_PARSE_ERR 0x10000
- #define F_ATTR_LINKED 0x20000
-
-
-@@ -220,14 +229,14 @@ struct nexthop {
- /* generic entry without address specific part */
- struct pt_entry {
- RB_ENTRY(pt_entry) pt_e;
-- sa_family_t af;
-+ u_int8_t aid;
- u_int8_t prefixlen;
- u_int16_t refcnt;
- };
-
- struct pt_entry4 {
- RB_ENTRY(pt_entry) pt_e;
-- sa_family_t af;
-+ u_int8_t aid;
- u_int8_t prefixlen;
- u_int16_t refcnt;
- struct in_addr prefix4;
-@@ -235,12 +244,25 @@ struct pt_entry4 {
-
- struct pt_entry6 {
- RB_ENTRY(pt_entry) pt_e;
-- sa_family_t af;
-+ u_int8_t aid;
- u_int8_t prefixlen;
- u_int16_t refcnt;
- struct in6_addr prefix6;
- };
-
-+struct pt_entry_vpn4 {
-+ RB_ENTRY(pt_entry) pt_e;
-+ u_int8_t aid;
-+ u_int8_t prefixlen;
-+ u_int16_t refcnt;
-+ struct in_addr prefix4;
-+ u_int64_t rd;
-+ u_int8_t labelstack[21];
-+ u_int8_t labellen;
-+ u_int8_t pad1;
-+ u_int8_t pad2;
-+};
-+
- struct rib_context {
- LIST_ENTRY(rib_context) entry;
- struct rib_entry *ctx_re;
-@@ -250,7 +272,7 @@ struct rib_context {
- void (*ctx_wait)(void *);
- void *ctx_arg;
- unsigned int ctx_count;
-- sa_family_t ctx_af;
-+ u_int8_t ctx_aid;
- };
-
- struct rib_entry {
-@@ -262,23 +284,15 @@ struct rib_entry {
- u_int16_t flags;
- };
-
--enum rib_state {
-- RIB_NONE,
-- RIB_ACTIVE,
-- RIB_DELETE
--};
--
- struct rib {
- char name[PEER_DESCR_LEN];
- struct rib_tree rib;
-- enum rib_state state;
-+ u_int rtableid;
- u_int16_t flags;
- u_int16_t id;
-+ enum reconf_action state;
- };
-
--#define F_RIB_ENTRYLOCK 0x0001
--#define F_RIB_NOEVALUATE 0x0002
--#define F_RIB_NOFIB 0x0004
- #define RIB_FAILED 0xffff
-
- struct prefix {
-@@ -292,8 +306,14 @@ struct prefix {
- extern struct rde_memstats rdemem;
-
- /* prototypes */
-+/* mrt.c */
-+int mrt_dump_v2_hdr(struct mrt *, struct bgpd_config *,
-+ struct rde_peer_head *);
-+void mrt_dump_upcall(struct rib_entry *, void *);
-+void mrt_done(void *);
-+
- /* rde.c */
--void rde_send_kroute(struct prefix *, struct prefix *);
-+void rde_send_kroute(struct prefix *, struct prefix *, u_int16_t);
- void rde_send_nexthop(struct bgpd_addr *, int);
- void rde_send_pftable(u_int16_t, struct bgpd_addr *,
- u_int8_t, int);
-@@ -309,7 +329,7 @@ int rde_as4byte(struct rde_peer *);
- /* rde_attr.c */
- int attr_write(void *, u_int16_t, u_int8_t, u_int8_t, void *,
- u_int16_t);
--int attr_writebuf(struct buf *, u_int8_t, u_int8_t, void *,
-+int attr_writebuf(struct ibuf *, u_int8_t, u_int8_t, void *,
- u_int16_t);
- void attr_init(u_int32_t);
- void attr_shutdown(void);
-@@ -327,6 +347,7 @@ int aspath_verify(void *, u_int16_t, i
- #define AS_ERR_LEN -1
- #define AS_ERR_TYPE -2
- #define AS_ERR_BAD -3
-+#define AS_ERR_SOFT -4
- void aspath_init(u_int32_t);
- void aspath_shutdown(void);
- struct aspath *aspath_get(void *, u_int16_t);
-@@ -341,22 +362,66 @@ u_int32_t aspath_neighbor(struct aspath
- int aspath_loopfree(struct aspath *, u_int32_t);
- int aspath_compare(struct aspath *, struct aspath *);
- u_char *aspath_prepend(struct aspath *, u_int32_t, int, u_int16_t *);
--int aspath_match(struct aspath *, enum as_spec, u_int32_t);
--int community_match(void *, u_int16_t, int, int);
-+int aspath_lenmatch(struct aspath *, enum aslen_spec, u_int);
-+int community_match(struct rde_aspath *, int, int);
- int community_set(struct rde_aspath *, int, int);
- void community_delete(struct rde_aspath *, int, int);
-+int community_ext_match(struct rde_aspath *,
-+ struct filter_extcommunity *, u_int16_t);
-+int community_ext_set(struct rde_aspath *,
-+ struct filter_extcommunity *, u_int16_t);
-+void community_ext_delete(struct rde_aspath *,
-+ struct filter_extcommunity *, u_int16_t);
-+int community_ext_conv(struct filter_extcommunity *, u_int16_t,
-+ u_int64_t *);
-+
-+/* rde_decide.c */
-+void prefix_evaluate(struct prefix *, struct rib_entry *);
-+
-+/* rde_filter.c */
-+enum filter_actions rde_filter(u_int16_t, struct rde_aspath **,
-+ struct filter_head *, struct rde_peer *,
-+ struct rde_aspath *, struct bgpd_addr *, u_int8_t,
-+ struct rde_peer *, enum directions);
-+void rde_apply_set(struct rde_aspath *, struct filter_set_head *,
-+ u_int8_t, struct rde_peer *, struct rde_peer *);
-+int rde_filter_equal(struct filter_head *, struct filter_head *,
-+ struct rde_peer *, enum directions);
-+
-+/* rde_prefix.c */
-+#define pt_empty(pt) ((pt)->refcnt == 0)
-+#define pt_ref(pt) do { \
-+ ++(pt)->refcnt; \
-+ if ((pt)->refcnt == 0) \
-+ fatalx("pt_ref: overflow"); \
-+} while(0)
-+#define pt_unref(pt) do { \
-+ if ((pt)->refcnt == 0) \
-+ fatalx("pt_unref: underflow"); \
-+ --(pt)->refcnt; \
-+} while(0)
-+
-+void pt_init(void);
-+void pt_shutdown(void);
-+void pt_getaddr(struct pt_entry *, struct bgpd_addr *);
-+struct pt_entry *pt_fill(struct bgpd_addr *, int);
-+struct pt_entry *pt_get(struct bgpd_addr *, int);
-+struct pt_entry *pt_add(struct bgpd_addr *, int);
-+void pt_remove(struct pt_entry *);
-+struct pt_entry *pt_lookup(struct bgpd_addr *);
-+int pt_prefix_cmp(const struct pt_entry *, const struct pt_entry *);
-
- /* rde_rib.c */
- extern u_int16_t rib_size;
- extern struct rib *ribs;
-
--u_int16_t rib_new(int, char *, u_int16_t);
-+u_int16_t rib_new(char *, u_int, u_int16_t);
- u_int16_t rib_find(char *);
- void rib_free(struct rib *);
- struct rib_entry *rib_get(struct rib *, struct bgpd_addr *, int);
- struct rib_entry *rib_lookup(struct rib *, struct bgpd_addr *);
- void rib_dump(struct rib *, void (*)(struct rib_entry *, void *),
-- void *, sa_family_t);
-+ void *, u_int8_t);
- void rib_dump_r(struct rib_context *);
- void rib_dump_runner(void);
- int rib_dump_pending(void);
-@@ -368,6 +433,7 @@ int path_update(struct rib *, struct r
- int path_compare(struct rde_aspath *, struct rde_aspath *);
- struct rde_aspath *path_lookup(struct rde_aspath *, struct rde_peer *);
- void path_remove(struct rde_aspath *);
-+void path_remove_stale(struct rde_aspath *, u_int8_t);
- void path_destroy(struct rde_aspath *);
- int path_empty(struct rde_aspath *);
- struct rde_aspath *path_copy(struct rde_aspath *);
-@@ -375,8 +441,6 @@ struct rde_aspath *path_get(void);
- void path_put(struct rde_aspath *);
-
- #define PREFIX_SIZE(x) (((x) + 7) / 8 + 1)
--int prefix_compare(const struct bgpd_addr *,
-- const struct bgpd_addr *, int);
- struct prefix *prefix_get(struct rib *, struct rde_peer *,
- struct bgpd_addr *, int, u_int32_t);
- int prefix_add(struct rib *, struct rde_aspath *,
-@@ -385,6 +449,7 @@ void prefix_move(struct rde_aspath *,
- int prefix_remove(struct rib *, struct rde_peer *,
- struct bgpd_addr *, int, u_int32_t);
- int prefix_write(u_char *, int, struct bgpd_addr *, u_int8_t);
-+int prefix_writebuf(struct ibuf *, struct bgpd_addr *, u_int8_t);
- struct prefix *prefix_bypeer(struct rib_entry *, struct rde_peer *,
- u_int32_t);
- void prefix_updateall(struct rde_aspath *, enum nexthop_state,
-@@ -395,7 +460,7 @@ void prefix_network_clean(struct rde_p
- void nexthop_init(u_int32_t);
- void nexthop_shutdown(void);
- void nexthop_modify(struct rde_aspath *, struct bgpd_addr *,
-- enum action_types, sa_family_t);
-+ enum action_types, u_int8_t);
- void nexthop_link(struct rde_aspath *);
- void nexthop_unlink(struct rde_aspath *);
- int nexthop_delete(struct nexthop *);
-@@ -403,9 +468,6 @@ void nexthop_update(struct kroute_next
- struct nexthop *nexthop_get(struct bgpd_addr *);
- int nexthop_compare(struct nexthop *, struct nexthop *);
-
--/* rde_decide.c */
--void prefix_evaluate(struct prefix *, struct rib_entry *);
--
- /* rde_update.c */
- void up_init(struct rde_peer *);
- void up_down(struct rde_peer *);
-@@ -415,49 +477,14 @@ int up_generate(struct rde_peer *, str
- void up_generate_updates(struct filter_head *, struct rde_peer *,
- struct prefix *, struct prefix *);
- void up_generate_default(struct filter_head *, struct rde_peer *,
-- sa_family_t);
-+ u_int8_t);
-+int up_generate_marker(struct rde_peer *, u_int8_t);
- int up_dump_prefix(u_char *, int, struct uplist_prefix *,
- struct rde_peer *);
- int up_dump_attrnlri(u_char *, int, struct rde_peer *);
--u_char *up_dump_mp_unreach(u_char *, u_int16_t *, struct rde_peer *);
--u_char *up_dump_mp_reach(u_char *, u_int16_t *, struct rde_peer *);
--
--/* rde_prefix.c */
--#define pt_empty(pt) ((pt)->refcnt == 0)
--#define pt_ref(pt) do { \
-- ++(pt)->refcnt; \
-- if ((pt)->refcnt == 0) \
-- fatalx("pt_ref: overflow"); \
--} while(0)
--#define pt_unref(pt) do { \
-- if ((pt)->refcnt == 0) \
-- fatalx("pt_unref: underflow"); \
-- --(pt)->refcnt; \
--} while(0)
--
--void pt_init(void);
--void pt_shutdown(void);
--void pt_getaddr(struct pt_entry *, struct bgpd_addr *);
--struct pt_entry *pt_fill(struct bgpd_addr *, int);
--struct pt_entry *pt_get(struct bgpd_addr *, int);
--struct pt_entry *pt_add(struct bgpd_addr *, int);
--void pt_remove(struct pt_entry *);
--struct pt_entry *pt_lookup(struct bgpd_addr *);
--int pt_prefix_cmp(const struct pt_entry *, const struct pt_entry *);
--
--
--/* rde_filter.c */
--enum filter_actions rde_filter(u_int16_t, struct rde_aspath **,
-- struct filter_head *, struct rde_peer *,
-- struct rde_aspath *, struct bgpd_addr *, u_int8_t,
-- struct rde_peer *, enum directions);
--void rde_apply_set(struct rde_aspath *, struct filter_set_head *,
-- sa_family_t, struct rde_peer *, struct rde_peer *);
--int rde_filter_community(struct rde_aspath *, int, int);
--int rde_filter_equal(struct filter_head *, struct filter_head *,
-- struct rde_peer *, enum directions);
--
--/* util.c */
--u_int32_t aspath_extract(const void *, int);
-+u_char *up_dump_mp_unreach(u_char *, u_int16_t *, struct rde_peer *,
-+ u_int8_t);
-+int up_dump_mp_reach(u_char *, u_int16_t *, struct rde_peer *,
-+ u_int8_t);
-
- #endif /* __RDE_H__ */