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.h872
1 files changed, 0 insertions, 872 deletions
diff --git a/net/openbgpd/files/patch-bgpd_bgpd.h b/net/openbgpd/files/patch-bgpd_bgpd.h
deleted file mode 100644
index 2ce5fe58102f..000000000000
--- a/net/openbgpd/files/patch-bgpd_bgpd.h
+++ /dev/null
@@ -1,872 +0,0 @@
-Index: bgpd/bgpd.h
-===================================================================
-RCS file: /home/cvs/private/hrs/openbgpd/bgpd/bgpd.h,v
-retrieving revision 1.1.1.8
-retrieving revision 1.15
-diff -u -p -r1.1.1.8 -r1.15
---- bgpd/bgpd.h 14 Feb 2010 20:19:57 -0000 1.1.1.8
-+++ bgpd/bgpd.h 16 May 2014 00:36:26 -0000 1.15
-@@ -1,4 +1,4 @@
--/* $OpenBSD: bgpd.h,v 1.241 2009/06/12 16:42:53 claudio Exp $ */
-+/* $OpenBSD: bgpd.h,v 1.273 2012/09/18 10:10:00 claudio Exp $ */
-
- /*
- * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
-@@ -21,6 +21,7 @@
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/queue.h>
-+#include <sys/tree.h>
- #include <net/route.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
-@@ -30,11 +31,16 @@
- #include <poll.h>
- #include <stdarg.h>
-
--#include <imsg.h>
-+#if defined(__FreeBSD__) /* compat */
-+#include "openbsd-compat.h"
-+#endif /* defined(__FreeBSD__) */
-+#include "imsg.h"
-
- #define BGP_VERSION 4
- #define BGP_PORT 179
-+#ifndef CONFFILE
- #define CONFFILE "/etc/bgpd.conf"
-+#endif /* !CONFFILE */
- #define BGPD_USER "_bgpd"
- #define PEER_DESCR_LEN 32
- #define PFTABLE_LEN 16
-@@ -42,8 +48,6 @@
- #define IPSEC_ENC_KEY_LEN 32
- #define IPSEC_AUTH_KEY_LEN 20
-
--#define ASNUM_MAX 0xffffffff
--
- #define MAX_PKTSIZE 4096
- #define MIN_HOLDTIME 3
- #define READ_BUF_SIZE 65535
-@@ -55,13 +59,8 @@
- #define BGPD_OPT_NOACTION 0x0004
- #define BGPD_OPT_FORCE_DEMOTE 0x0008
-
--#define BGPD_FLAG_NO_FIB_UPDATE 0x0001
- #define BGPD_FLAG_NO_EVALUATE 0x0002
- #define BGPD_FLAG_REFLECTOR 0x0004
--#define BGPD_FLAG_REDIST_STATIC 0x0008
--#define BGPD_FLAG_REDIST_CONNECTED 0x0010
--#define BGPD_FLAG_REDIST6_STATIC 0x0020
--#define BGPD_FLAG_REDIST6_CONNECTED 0x0040
- #define BGPD_FLAG_NEXTHOP_BGP 0x0080
- #define BGPD_FLAG_NEXTHOP_DEFAULT 0x1000
- #define BGPD_FLAG_DECISION_MASK 0x0f00
-@@ -83,9 +82,12 @@
- #define F_REJECT 0x0080
- #define F_BLACKHOLE 0x0100
- #define F_LONGER 0x0200
-+#define F_MPLS 0x0400
-+#define F_REDISTRIBUTED 0x0800
- #define F_CTL_DETAIL 0x1000 /* only used by bgpctl */
- #define F_CTL_ADJ_IN 0x2000
- #define F_CTL_ADJ_OUT 0x4000
-+#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
- };
-
-+/* Address Family Numbers as per RFC 1700 */
-+#define AFI_UNSPEC 0
-+#define AFI_IPv4 1
-+#define AFI_IPv6 2
-+
-+/* Subsequent Address Family Identifier as per RFC 4760 */
-+#define SAFI_NONE 0
-+#define SAFI_UNICAST 1
-+#define SAFI_MULTICAST 2
-+#define SAFI_MPLS 4
-+#define SAFI_MPLSVPN 128
-+
-+struct aid {
-+ u_int16_t afi;
-+ sa_family_t af;
-+ u_int8_t safi;
-+ char *name;
-+};
-+
-+extern const struct aid aid_vals[];
-+
-+#define AID_UNSPEC 0
-+#define AID_INET 1
-+#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 */ \
-+ { AFI_UNSPEC, AF_UNSPEC, SAFI_NONE, "unspec"}, \
-+ { AFI_IPv4, AF_INET, SAFI_UNICAST, "IPv4 unicast" }, \
-+ { AFI_IPv6, AF_INET6, SAFI_UNICAST, "IPv6 unicast" }, \
-+ { AFI_IPv4, AF_INET, SAFI_MPLSVPN, "IPv4 vpn" } \
-+}
-+
-+#define AID_PTSIZE { \
-+ 0, \
-+ sizeof(struct pt_entry4), \
-+ sizeof(struct pt_entry6), \
-+ sizeof(struct pt_entry_vpn4) \
-+}
-+
-+struct vpn4_addr {
-+ u_int64_t rd;
-+ struct in_addr addr;
-+ u_int8_t labelstack[21]; /* max that makes sense */
-+ u_int8_t labellen;
-+ u_int8_t pad1;
-+ u_int8_t pad2;
-+};
-+
-+#define BGP_MPLS_BOS 0x01
-+
- struct bgpd_addr {
-- sa_family_t af;
- union {
- struct in_addr v4;
- struct in6_addr v6;
-- u_int8_t addr8[16];
-- u_int16_t addr16[8];
-- u_int32_t addr32[4];
-+ struct vpn4_addr vpn4;
-+ /* maximum size for a prefix is 256 bits */
-+ u_int8_t addr8[32];
-+ u_int16_t addr16[16];
-+ u_int32_t addr32[8];
- } ba; /* 128-bit address */
- u_int32_t scope_id; /* iface scope id for v6 */
-+ u_int8_t aid;
- #define v4 ba.v4
- #define v6 ba.v6
-+#define vpn4 ba.vpn4
- #define addr8 ba.addr8
- #define addr16 ba.addr16
- #define addr32 ba.addr32
-@@ -141,17 +200,12 @@ TAILQ_HEAD(listen_addrs, listen_addr);
- TAILQ_HEAD(filter_set_head, filter_set);
-
- struct bgpd_config {
-- struct filter_set_head connectset;
-- struct filter_set_head connectset6;
-- struct filter_set_head staticset;
-- struct filter_set_head staticset6;
- struct listen_addrs *listen_addrs;
- char *csock;
- char *rcsock;
- int opts;
- int flags;
- int log;
-- u_int rtableid;
- u_int32_t bgpid;
- u_int32_t clusterid;
- u_int32_t as;
-@@ -205,12 +259,24 @@ struct peer_auth {
- };
-
- struct capabilities {
-- u_int8_t mp_v4; /* multiprotocol extensions, RFC 4760 */
-- u_int8_t mp_v6;
-- 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 */
--};
-+ 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 {
- 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];
-+ char lliface[IFNAMSIZ];
- };
-
- #define PEERFLAG_TRANS_AS 0x01
-
-+enum network_type {
-+ NETWORK_DEFAULT,
-+ NETWORK_STATIC,
-+ NETWORK_CONNECTED,
-+ NETWORK_MRTCLONE
-+};
-+
- struct network_config {
-- 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);
-
- struct network {
-- struct network_config net;
-- TAILQ_ENTRY(network) entry;
-+ struct network_config net;
-+ TAILQ_ENTRY(network) entry;
- };
-
- enum imsg_type {
-@@ -276,7 +354,6 @@ enum imsg_type {
- IMSG_CTL_NEIGHBOR_CLEAR,
- IMSG_CTL_NEIGHBOR_RREFRESH,
- IMSG_CTL_KROUTE,
-- IMSG_CTL_KROUTE6,
- IMSG_CTL_KROUTE_ADDR,
- IMSG_CTL_RESULT,
- IMSG_CTL_SHOW_NEIGHBOR,
-@@ -288,11 +365,14 @@ enum imsg_type {
- IMSG_CTL_SHOW_RIB_ATTR,
- IMSG_CTL_SHOW_RIB_COMMUNITY,
- IMSG_CTL_SHOW_NETWORK,
-- IMSG_CTL_SHOW_NETWORK6,
- IMSG_CTL_SHOW_RIB_MEM,
- IMSG_CTL_SHOW_TERSE,
- IMSG_CTL_SHOW_TIMER,
-+ IMSG_CTL_LOG_VERBOSE,
-+ IMSG_CTL_SHOW_FIB_TABLES,
- IMSG_NETWORK_ADD,
-+ IMSG_NETWORK_ASPATH,
-+ IMSG_NETWORK_ATTR,
- IMSG_NETWORK_REMOVE,
- IMSG_NETWORK_FLUSH,
- IMSG_NETWORK_DONE,
-@@ -302,19 +382,25 @@ enum imsg_type {
- IMSG_RECONF_PEER,
- IMSG_RECONF_FILTER,
- IMSG_RECONF_LISTENER,
-+ IMSG_RECONF_CTRL,
-+ IMSG_RECONF_RDOMAIN,
-+ IMSG_RECONF_RDOMAIN_EXPORT,
-+ IMSG_RECONF_RDOMAIN_IMPORT,
-+ IMSG_RECONF_RDOMAIN_DONE,
- IMSG_RECONF_DONE,
- IMSG_UPDATE,
- IMSG_UPDATE_ERR,
- 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,
-- IMSG_KROUTE6_CHANGE,
-- IMSG_KROUTE6_DELETE,
- IMSG_NEXTHOP_ADD,
- IMSG_NEXTHOP_REMOVE,
- IMSG_NEXTHOP_UPDATE,
-@@ -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
- };
-
-+struct kroute_node;
-+struct kroute6_node;
-+struct knexthop_node;
-+RB_HEAD(kroute_tree, kroute_node);
-+RB_HEAD(kroute6_tree, kroute6_node);
-+RB_HEAD(knexthop_tree, knexthop_node);
-+
-+struct ktable {
-+ char descr[PEER_DESCR_LEN];
-+ char ifmpe[IFNAMSIZ];
-+ struct kroute_tree krt;
-+ struct kroute6_tree krt6;
-+ struct knexthop_tree knt;
-+ struct network_head krn;
-+ u_int rtableid;
-+ u_int nhtableid; /* rdomain id for nexthop lookup */
-+ u_int ifindex; /* ifindex of ifmpe */
-+ int nhrefcnt; /* refcnt for nexthop table */
-+ enum reconf_action state;
-+ u_int8_t fib_conf; /* configured FIB sync flag */
-+ u_int8_t fib_sync; /* is FIB synced with kernel? */
-+};
-+
-+struct kroute_full {
-+ struct bgpd_addr prefix;
-+ struct bgpd_addr nexthop;
-+ char label[RTLABEL_LEN];
-+ u_int16_t flags;
-+ u_short ifindex;
-+ u_int8_t prefixlen;
-+ u_int8_t priority;
-+};
-+
- struct kroute {
- struct in_addr prefix;
- struct in_addr nexthop;
-+ u_int32_t mplslabel;
- u_int16_t flags;
- u_int16_t labelid;
- u_short ifindex;
-@@ -400,14 +521,12 @@ struct kroute6 {
- };
-
- struct kroute_nexthop {
-- union {
-- struct kroute kr4;
-- struct kroute6 kr6;
-- } kr;
- struct bgpd_addr nexthop;
- struct bgpd_addr gateway;
-+ struct bgpd_addr net;
- u_int8_t valid;
- u_int8_t connected;
-+ u_int8_t netlen;
- };
-
- struct kif {
-@@ -423,8 +542,7 @@ struct kif {
- struct session_up {
- struct bgpd_addr local_addr;
- struct bgpd_addr remote_addr;
-- struct capabilities capa_announced;
-- struct capabilities capa_received;
-+ struct capabilities capa;
- u_int32_t remote_bgpid;
- u_int16_t short_as;
- };
-@@ -437,8 +555,13 @@ struct pftable_msg {
-
- struct ctl_show_nexthop {
- struct bgpd_addr addr;
-- u_int8_t valid;
- struct kif kif;
-+ union {
-+ struct kroute kr4;
-+ struct kroute6 kr6;
-+ } kr;
-+ u_int8_t valid;
-+ u_int8_t krvalid;
- };
-
- struct ctl_neighbor {
-@@ -447,20 +570,11 @@ struct ctl_neighbor {
- int show_timers;
- };
-
--struct kroute_label {
-- struct kroute kr;
-- char label[RTLABEL_LEN];
--};
--
--struct kroute6_label {
-- struct kroute6 kr;
-- char label[RTLABEL_LEN];
--};
--
--#define F_RIB_ELIGIBLE 0x01
--#define F_RIB_ACTIVE 0x02
--#define F_RIB_INTERNAL 0x04
--#define F_RIB_ANNOUNCE 0x08
-+#define F_PREF_ELIGIBLE 0x01
-+#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;
-@@ -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
- };
-
-+enum aslen_spec {
-+ ASLEN_NONE,
-+ ASLEN_MAX,
-+ ASLEN_SEQ
-+};
-+
- struct filter_as {
-- enum as_spec type;
- 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 {
-- int as;
-- int type;
-+ int as;
-+ int type;
- };
-
-+struct filter_extcommunity {
-+ u_int16_t flags;
-+ u_int8_t type;
-+ u_int8_t subtype; /* if extended type */
-+ union {
-+ struct ext_as {
-+ u_int16_t as;
-+ u_int32_t val;
-+ } ext_as;
-+ struct ext_as4 {
-+ u_int32_t as4;
-+ u_int16_t val;
-+ } ext_as4;
-+ struct ext_ip {
-+ struct in_addr addr;
-+ u_int16_t val;
-+ } ext_ip;
-+ u_int64_t ext_opaq; /* only 48 bits */
-+ } data;
-+};
-+
-+
- struct ctl_show_rib_request {
- char rib[PEER_DESCR_LEN];
- struct ctl_neighbor neighbor;
-@@ -518,8 +659,8 @@ struct ctl_show_rib_request {
- pid_t pid;
- u_int16_t flags;
- enum imsg_type type;
-- sa_family_t af;
- u_int8_t prefixlen;
-+ u_int8_t aid;
- };
-
- enum filter_actions {
-@@ -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 */
-+/* other handy defines */
-+#define EXT_COMMUNITY_OPAQUE_MAX 0xffffffffffffULL
-+#define EXT_COMMUNITY_FLAG_VALID 0x01
-+
-+struct ext_comm_pairs {
-+ u_int8_t type;
-+ u_int8_t subtype;
-+ u_int8_t transitive; /* transitive bit needs to be set */
-+};
-+
-+#define IANA_EXT_COMMUNITIES { \
-+ { EXT_COMMUNITY_TWO_AS, EXT_COMMUNITY_ROUTE_TGT, 0 }, \
-+ { EXT_COMMUNITY_TWO_AS, EXT_CUMMUNITY_ROUTE_ORIG, 0 }, \
-+ { EXT_COMMUNITY_TWO_AS, EXT_COMMUNITY_OSPF_DOM_ID, 0 }, \
-+ { EXT_COMMUNITY_TWO_AS, EXT_COMMUNITY_BGP_COLLECT, 0 }, \
-+ { EXT_COMMUNITY_FOUR_AS, EXT_COMMUNITY_ROUTE_TGT, 0 }, \
-+ { EXT_COMMUNITY_FOUR_AS, EXT_CUMMUNITY_ROUTE_ORIG, 0 }, \
-+ { EXT_COMMUNITY_IPV4, EXT_COMMUNITY_ROUTE_TGT, 0 }, \
-+ { EXT_COMMUNITY_IPV4, EXT_CUMMUNITY_ROUTE_ORIG, 0 }, \
-+ { EXT_COMMUNITY_IPV4, EXT_COMMUNITY_OSPF_RTR_ID, 0 }, \
-+ { EXT_COMMUNITY_OPAQUE, EXT_COMMUNITY_OSPF_RTR_TYPE, 0 } \
-+}
-
-
- struct filter_prefix {
-@@ -592,18 +755,28 @@ struct filter_prefix {
- u_int8_t len;
- };
-
-+struct filter_nexthop {
-+ struct bgpd_addr addr;
-+ u_int8_t flags;
-+#define FILTER_NEXTHOP_ADDR 1
-+#define FILTER_NEXTHOP_NEIGHBOR 2
-+};
-+
- struct filter_prefixlen {
- enum comp_ops op;
-- sa_family_t af;
-+ u_int8_t aid;
- u_int8_t len_min;
- u_int8_t len_max;
- };
-
- struct filter_match {
-- struct filter_prefix prefix;
-- struct filter_prefixlen prefixlen;
-- struct filter_as as;
-- struct filter_community community;
-+ struct filter_prefix prefix;
-+ struct filter_prefixlen prefixlen;
-+ struct filter_nexthop nexthop;
-+ struct filter_as as;
-+ struct filter_aslen aslen;
-+ struct filter_community community;
-+ struct filter_extcommunity ext_community;
- };
-
- TAILQ_HEAD(filter_head, filter_rule);
-@@ -635,10 +808,13 @@ enum action_types {
- ACTION_SET_NEXTHOP_SELF,
- ACTION_SET_COMMUNITY,
- ACTION_DEL_COMMUNITY,
-+ ACTION_SET_EXT_COMMUNITY,
-+ ACTION_DEL_EXT_COMMUNITY,
- ACTION_PFTABLE,
- ACTION_PFTABLE_ID,
- ACTION_RTLABEL,
-- ACTION_RTLABEL_ID
-+ ACTION_RTLABEL_ID,
-+ ACTION_SET_ORIGIN
- };
-
- struct filter_set {
-@@ -650,23 +826,53 @@ struct filter_set {
- int32_t relative;
- struct bgpd_addr nexthop;
- struct filter_community community;
-+ struct filter_extcommunity ext_community;
- char pftable[PFTABLE_LEN];
- char rtlabel[RTLABEL_LEN];
-+ u_int8_t origin;
- } action;
- enum action_types type;
- };
-
--struct rrefresh {
-- u_int16_t afi;
-- u_int8_t safi;
-+struct rdomain {
-+ SIMPLEQ_ENTRY(rdomain) entry;
-+ char descr[PEER_DESCR_LEN];
-+ char ifmpe[IFNAMSIZ];
-+ struct filter_set_head import;
-+ struct filter_set_head export;
-+ struct network_head net_l;
-+ u_int64_t rd;
-+ u_int rtableid;
-+ u_int label;
-+ int flags;
- };
-+SIMPLEQ_HEAD(rdomain_head, rdomain);
-+
-+struct rde_rib {
-+ SIMPLEQ_ENTRY(rde_rib) entry;
-+ char name[PEER_DESCR_LEN];
-+ u_int rtableid;
-+ u_int16_t id;
-+ u_int16_t flags;
-+};
-+SIMPLEQ_HEAD(rib_names, rde_rib);
-+extern struct rib_names ribnames;
-+
-+/* rde_rib flags */
-+#define F_RIB_ENTRYLOCK 0x0001
-+#define F_RIB_NOEVALUATE 0x0002
-+#define F_RIB_NOFIB 0x0004
-+#define F_RIB_NOFIBSYNC 0x0008
-+#define F_RIB_HASNOFIB (F_RIB_NOFIB | F_RIB_NOEVALUATE)
-+
-+/* 4-byte magic AS number */
-+#define AS_TRANS 23456
-
- struct rde_memstats {
- int64_t path_cnt;
- int64_t prefix_cnt;
- int64_t rib_cnt;
-- int64_t pt4_cnt;
-- int64_t pt6_cnt;
-+ int64_t pt_cnt[AID_MAX];
- int64_t nexthop_cnt;
- int64_t aspath_cnt;
- int64_t aspath_size;
-@@ -677,82 +883,117 @@ struct rde_memstats {
- int64_t attr_dcnt;
- };
-
--struct rde_rib {
-- SIMPLEQ_ENTRY(rde_rib) entry;
-- char name[PEER_DESCR_LEN];
-- u_int16_t id;
-- u_int16_t flags;
-+/* macros for IPv6 link-local address */
-+#ifdef __KAME__
-+#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;
-
--/* Address Family Numbers as per RFC 1700 */
--#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
-+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 */
- void send_nexthop_update(struct kroute_nexthop *);
- void send_imsg_session(int, pid_t, void *, u_int16_t);
--int bgpd_redistribute(int, struct kroute *, struct kroute6 *);
-+int send_network(int, struct network_config *,
-+ struct filter_set_head *);
- int bgpd_filternexthop(struct kroute *, struct kroute6 *);
-
--/* 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 */
--int kr_init(int, u_int);
--int kr_change(struct kroute_label *);
--int kr_delete(struct kroute_label *);
--int kr6_change(struct kroute6_label *);
--int kr6_delete(struct kroute6_label *);
-+int kr_init(void);
-+int ktable_update(u_int, char *, char *, int);
-+void ktable_preload(void);
-+void ktable_postload(void);
-+int ktable_exists(u_int, u_int *);
-+int kr_change(u_int, struct kroute_full *);
-+int kr_delete(u_int, struct kroute_full *);
- void kr_shutdown(void);
--void kr_fib_couple(void);
--void kr_fib_decouple(void);
-+void kr_fib_couple(u_int);
-+void kr_fib_decouple(u_int);
- int kr_dispatch_msg(void);
--int kr_nexthop_add(struct bgpd_addr *);
--void kr_nexthop_delete(struct bgpd_addr *);
-+int kr_nexthop_add(u_int32_t, struct bgpd_addr *);
-+void kr_nexthop_delete(u_int32_t, struct bgpd_addr *);
- void kr_show_route(struct imsg *);
- void kr_ifinfo(char *);
-+int kr_net_reload(u_int, struct network_head *);
- int kr_reload(void);
- struct in6_addr *prefixlen2mask6(u_int8_t prefixlen);
-
--/* 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 +1009,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 *);
-+void filterset_move(struct filter_set_head *,
-+ struct filter_set_head *);
- const char *filterset_name(enum action_types);
-
- /* util.c */
-@@ -779,11 +1032,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);
-+const char *log_rd(u_int64_t);
-+const char *log_ext_subtype(u_int8_t);
- 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);
-+const char *aid2str(u_int8_t);
-+int aid2afi(u_int8_t, u_int16_t *, u_int8_t *);
-+int afi2aid(u_int16_t, u_int8_t, u_int8_t *);
-+sa_family_t aid2af(u_int8_t);
-+int af2aid(sa_family_t, u_int8_t, u_int8_t *);
-+struct sockaddr *addr2sa(struct bgpd_addr *, u_int16_t);
-+void sa2addr(struct sockaddr *, struct bgpd_addr *);
-
- #endif /* __BGPD_H__ */