diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2017-04-21 22:10:42 -0300 | 
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2017-04-26 10:36:33 -0300 | 
| commit | 7c2abbd734a8dab416e378be7b200797b2331e47 (patch) | |
| tree | a30b027de4f3c5be5f63bd53690733a63c479594 /ldpd/lde.h | |
| parent | 1f2ff5b5cd56a237b38fa7e46784594280c12075 (diff) | |
ldpd: schedule the sending of label messages when necessary
Once we send a Label Withdraw, we can't send a Label Mapping for the
same FEC until we receive a Label Release from the peer. This is due to
some limitations in the LDP algorithms described in Appendix A. ("LDP
Label Distribution Procedures") of RFC 5036.
To workaround this issue, make it possible to schedule the sending of
a Label Mapping as soon as a Label Release is received for the same FEC.
The easiest way to test this patch is by typing the "label local advertise
explicit-null" command. ldpd will withdraw all null labels using a
Wildcard FEC and then send new Label Mappings as soon the corresponding
Label Releases are received.
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'ldpd/lde.h')
| -rw-r--r-- | ldpd/lde.h | 3 | 
1 files changed, 3 insertions, 0 deletions
diff --git a/ldpd/lde.h b/ldpd/lde.h index c1d66f9fff..1cce483832 100644 --- a/ldpd/lde.h +++ b/ldpd/lde.h @@ -95,6 +95,7 @@ struct lde_nbr {  	struct fec_tree		 sent_req;  	struct fec_tree		 recv_map;  	struct fec_tree		 sent_map; +	struct fec_tree		 sent_map_pending;  	struct fec_tree		 sent_wdraw;  	TAILQ_HEAD(, lde_addr)	 addr_list;  }; @@ -171,6 +172,8 @@ struct lde_nbr	*lde_nbr_find_by_lsrid(struct in_addr);  struct lde_nbr	*lde_nbr_find_by_addr(int, union ldpd_addr *);  struct lde_map	*lde_map_add(struct lde_nbr *, struct fec_node *, int);  void		 lde_map_del(struct lde_nbr *, struct lde_map *, int); +struct fec 	*lde_map_pending_add(struct lde_nbr *, struct fec_node *); +void		 lde_map_pending_del(struct lde_nbr *, struct fec *);  struct lde_req	*lde_req_add(struct lde_nbr *, struct fec *, int);  void		 lde_req_del(struct lde_nbr *, struct lde_req *, int);  struct lde_wdraw *lde_wdraw_add(struct lde_nbr *, struct fec_node *);  | 
