summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_open_state.h
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_open_state.h')
-rw-r--r--bgpd/bgp_open_state.h61
1 files changed, 40 insertions, 21 deletions
diff --git a/bgpd/bgp_open_state.h b/bgpd/bgp_open_state.h
index 413fc07d..0612bbff 100644
--- a/bgpd/bgp_open_state.h
+++ b/bgpd/bgp_open_state.h
@@ -33,21 +33,6 @@
#endif
/*==============================================================================
- * Some BGP Capabilities have old and new forms. Wish to control whether to
- * send both old and/or new forms, and to track what form(s) received the
- * capability in.
- */
-typedef enum bgp_cap_form bgp_cap_form_t ;
-
-enum bgp_cap_form
-{
- bgp_cap_form_none = 0,
- bgp_cap_form_old = 1,
- bgp_cap_form_new = 2,
- bgp_cap_form_both = 3 /* _old and _new are bits ! */
-} ;
-
-/*==============================================================================
* BGP Open State.
*
* This structure encapsulates all the information that may be sent/received
@@ -63,20 +48,44 @@ struct bgp_cap_unknown /* to capture unknown capability */
uint8_t value[] ;
} ;
+typedef struct bgp_cap_mp* bgp_cap_mp ;
+struct bgp_cap_mp
+{
+} ;
+
typedef struct bgp_cap_orf* bgp_cap_orf ;
struct bgp_cap_orf
{
- flag_t known_afi_safi ;
flag_t known_orf_type ;
- iAFI_t afi ;
- iSAFI_t safi ;
-
uint8_t type ;
flag_t send ;
flag_t recv ;
} ;
+typedef struct bgp_cap_gr* bgp_cap_gr ;
+struct bgp_cap_gr
+{
+ flag_t has_preserved ;
+} ;
+
+typedef struct bgp_cap_afi_safi* bgp_cap_afi_safi ;
+struct bgp_cap_afi_safi
+{
+ flag_t known_afi_safi ;
+
+ iAFI_t afi ;
+ iSAFI_t safi ;
+
+ uint8_t cap_code ; /* eg BGP_CAN_MP_EXT */
+ union
+ {
+ struct bgp_cap_mp mp ;
+ struct bgp_cap_orf orf ;
+ struct bgp_cap_gr gr ;
+ } caps ;
+} ;
+
struct bgp_open_state
{
as_t my_as ; /* generic ASN */
@@ -90,8 +99,8 @@ struct bgp_open_state
qafx_set_t can_mp_ext ; /* will accept, may send these */
- bgp_cap_form_t can_r_refresh ; /* none/old/new/both */
- bgp_cap_form_t can_orf_prefix ; /* none/old/new/both */
+ bgp_form_t can_r_refresh ; /* none/old/new/both */
+ bgp_form_t can_orf_prefix ; /* none/old/new/both */
qafx_set_t can_orf_prefix_send ; /* wish to send ORF Prefix-List */
qafx_set_t can_orf_prefix_recv ; /* will accept ORF Prefix-List */
@@ -106,6 +115,7 @@ struct bgp_open_state
int restart_time ; /* Restart Time in seconds */
struct vector unknowns ; /* list of bgp_cap_unknown */
+ struct vector afi_safi ; /* various afi/safi capabilities */
} ;
/*==============================================================================
@@ -133,6 +143,15 @@ bgp_open_state_unknown_count(bgp_open_state state) ;
extern bgp_cap_unknown
bgp_open_state_unknown_cap(bgp_open_state state, unsigned index) ;
+extern bgp_cap_afi_safi
+bgp_open_state_afi_safi_add(bgp_open_state state, iAFI_t afi, iSAFI_t safi,
+ flag_t known, uint8_t cap_code) ;
+extern int
+bgp_open_state_afi_safi_count(bgp_open_state state) ;
+
+extern bgp_cap_afi_safi
+bgp_open_state_afi_safi_cap(bgp_open_state state, unsigned index) ;
+
extern bgp_open_state
bgp_peer_open_state_init_new(bgp_open_state state, bgp_peer peer);