diff options
author | Chris Hall <GMCH@hestia.halldom.com> | 2010-01-27 11:11:54 +0000 |
---|---|---|
committer | Chris Hall <GMCH@hestia.halldom.com> | 2010-01-27 11:11:54 +0000 |
commit | ffb52b1a705814c52d2d1b41c7058897f11b5aa3 (patch) | |
tree | c3887b034c37b95577390c5d33d6d26c347975b2 /bgpd/bgp_route_refresh.c | |
parent | 8bfae24fc3a8baaca3e419f261f132e454163f57 (diff) | |
download | quagga-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.c | 28 |
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) |