summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_route_refresh.c
diff options
context:
space:
mode:
authorChris Hall <GMCH@hestia.halldom.com>2010-01-27 11:11:54 +0000
committerChris Hall <GMCH@hestia.halldom.com>2010-01-27 11:11:54 +0000
commitffb52b1a705814c52d2d1b41c7058897f11b5aa3 (patch)
treec3887b034c37b95577390c5d33d6d26c347975b2 /bgpd/bgp_route_refresh.c
parent8bfae24fc3a8baaca3e419f261f132e454163f57 (diff)
downloadquagga-ffb52b1a705814c52d2d1b41c7058897f11b5aa3.tar.bz2
quagga-ffb52b1a705814c52d2d1b41c7058897f11b5aa3.tar.xz
Wiring up ROUTE-REFRESH and ORF handling. Work-in-progress.
modified: bgpd/bgp.h modified: bgpd/bgp_common.c modified: bgpd/bgp_common.h modified: bgpd/bgp_connection.c modified: bgpd/bgp_connection.h modified: bgpd/bgp_fsm.c modified: bgpd/bgp_fsm.h modified: bgpd/bgp_msg_read.c modified: bgpd/bgp_msg_read.h modified: bgpd/bgp_msg_write.c modified: bgpd/bgp_notification.c modified: bgpd/bgp_notification.h modified: bgpd/bgp_open_state.c modified: bgpd/bgp_open_state.h modified: bgpd/bgp_route_refresh.c modified: bgpd/bgp_route_refresh.h modified: lib/qafi_safi.h
Diffstat (limited to 'bgpd/bgp_route_refresh.c')
-rw-r--r--bgpd/bgp_route_refresh.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/bgpd/bgp_route_refresh.c b/bgpd/bgp_route_refresh.c
index d50f977b..11448e67 100644
--- a/bgpd/bgp_route_refresh.c
+++ b/bgpd/bgp_route_refresh.c
@@ -81,6 +81,15 @@ bgp_route_refresh_free(bgp_route_refresh rr)
} ;
/*------------------------------------------------------------------------------
+ * Set the defer flag as required
+ */
+extern void
+bgp_route_refresh_set_orf_defer(bgp_route_refresh rr, flag_t defer)
+{
+ rr->defer = (defer != 0) ;
+} ;
+
+/*------------------------------------------------------------------------------
* Allocate new bgp_orf_entry -- for known or unknown type.
*
* Is for known type if unknown_size == 0 !
@@ -95,7 +104,8 @@ bgp_route_refresh_free(bgp_route_refresh rr)
* Pushes entry onto the bgp_route_refresh list.
*/
static bgp_orf_entry
-bgp_orf_entry_new(bgp_route_refresh rr, uint8_t orf_type, size_t unknown_size)
+bgp_orf_entry_new(bgp_route_refresh rr, uint8_t orf_type, bgp_form_t form,
+ size_t unknown_size)
{
bgp_orf_entry orfe ;
size_t e_size ;
@@ -117,6 +127,7 @@ bgp_orf_entry_new(bgp_route_refresh rr, uint8_t orf_type, size_t unknown_size)
orfe = XCALLOC(MTYPE_BGP_ORF_ENTRY, sizeof(struct bgp_orf_entry) + e_size) ;
orfe->orf_type = orf_type ;
+ orfe->form = form ;
orfe->unknown = (unknown_size != 0) ;
vector_push_item(&rr->entries, orfe) ;
@@ -141,15 +152,16 @@ bgp_orf_entry_new(bgp_route_refresh rr, uint8_t orf_type, size_t unknown_size)
*
* NB: it is a FATAL error to set an unknown ORF type
*/
-extern void*
-bgp_orf_add(bgp_route_refresh rr, uint8_t orf_type, flag_t remove, flag_t deny)
+extern bgp_orf_entry
+bgp_orf_add(bgp_route_refresh rr, uint8_t orf_type, bgp_form_t form,
+ flag_t remove, flag_t deny)
{
- bgp_orf_entry orfe = bgp_orf_entry_new(rr, orf_type, 0) ;
+ bgp_orf_entry orfe = bgp_orf_entry_new(rr, orf_type, form, 0) ;
orfe->remove = (remove != 0) ;
orfe->deny = (deny != 0) ;
- return &orfe->body ;
+ return orfe ;
} ;
/*------------------------------------------------------------------------------
@@ -162,9 +174,9 @@ bgp_orf_add(bgp_route_refresh rr, uint8_t orf_type, flag_t remove, flag_t deny)
* NB: it is a FATAL error to set an unknown ORF type
*/
extern void
-bgp_orf_add_remove_all(bgp_route_refresh rr, uint8_t orf_type)
+bgp_orf_add_remove_all(bgp_route_refresh rr, uint8_t orf_type, bgp_form_t form)
{
- bgp_orf_entry orfe = bgp_orf_entry_new(rr, orf_type, 0) ;
+ bgp_orf_entry orfe = bgp_orf_entry_new(rr, orf_type, form, 0) ;
orfe->remove_all = 1 ;
} ;
@@ -178,7 +190,7 @@ extern void
bgp_orf_add_unknown(bgp_route_refresh rr, uint8_t orf_type, bgp_size_t length,
const void* entries)
{
- bgp_orf_entry orfe = bgp_orf_entry_new(rr, orf_type,
+ bgp_orf_entry orfe = bgp_orf_entry_new(rr, orf_type, bgp_form_none,
(length > 0) ? length : 1) ;
if (length != 0)