]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #1362 from dslicenc/cm18309-label-delete
authorRenato Westphal <renato@openbsd.org>
Wed, 25 Oct 2017 18:56:50 +0000 (16:56 -0200)
committerGitHub <noreply@github.com>
Wed, 25 Oct 2017 18:56:50 +0000 (16:56 -0200)
zebra: only pass mpls proto type if doing install

isisd/isis_circuit.c
isisd/isis_circuit.h
isisd/isis_constants.h
isisd/isis_lsp.c
isisd/isis_pdu.c

index 5e4090facc4be460ad8dde9bbaaf649b74552933..30679367c04df30af569d36be28161dd86b4fbc8 100644 (file)
@@ -676,7 +676,7 @@ int isis_circuit_up(struct isis_circuit *circuit)
 
        circuit->lsp_queue = list_new();
        circuit->lsp_hash = isis_lsp_hash_new();
-       monotime(&circuit->lsp_queue_last_cleared);
+       circuit->lsp_queue_last_push = monotime(NULL);
 
        return ISIS_OK;
 }
index 29694deb349584ccf6de0ab182566c5520f1472c..ac1e15f6bf6f16035b52621df0933a789855bb54 100644 (file)
@@ -84,7 +84,7 @@ struct isis_circuit {
        struct thread *t_send_lsp;
        struct list *lsp_queue; /* LSPs to be txed (both levels) */
        struct isis_lsp_hash *lsp_hash; /* Hashtable synchronized with lsp_queue */
-       struct timeval lsp_queue_last_cleared; /* timestamp used to enforce transmit
+       time_t lsp_queue_last_push;    /* timestamp used to enforce transmit
                                        * interval;
                                        * for scalability, use one timestamp per
                                        * circuit, instead of one per lsp per
index b7b5d35c2e6df30671caab0c452ed0a406a30f4c..1046b0014c4fee743c543412f4aee8a75143b9bf 100644 (file)
@@ -73,7 +73,7 @@
 #define MAX_MIN_LSP_GEN_INTERVAL      120  /* RFC 4444 says 65535 */
 #define DEFAULT_MIN_LSP_GEN_INTERVAL  30
 
-#define MIN_LSP_TRANS_INTERVAL        20000 /* Microseconds */
+#define MIN_LSP_RETRANS_INTERVAL      5 /* Seconds */
 
 #define MIN_CSNP_INTERVAL             1
 #define MAX_CSNP_INTERVAL             600
index 07579446aacfa70ad774f36db05d82fca75bdd45..ff9114c506a63131ba3d4c6c2467105eb0cefeeb 100644 (file)
@@ -454,17 +454,6 @@ void lsp_update(struct isis_lsp *lsp, struct isis_lsp_hdr *hdr,
                struct isis_tlvs *tlvs, struct stream *stream,
                struct isis_area *area, int level, bool confusion)
 {
-       dnode_t *dnode = NULL;
-
-       /* Remove old LSP from database. This is required since the
-        * lsp_update_data will free the lsp->pdu (which has the key, lsp_id)
-        * and will update it with the new data in the stream.
-        * XXX: This doesn't hold true anymore since the header is now a copy.
-        * keeping the LSP in the dict if it is already present should be possible */
-       dnode = dict_lookup(area->lspdb[level - 1], lsp->hdr.lsp_id);
-       if (dnode)
-               dnode_destroy(dict_delete(area->lspdb[level - 1], dnode));
-
        if (lsp->own_lsp) {
                zlog_err(
                        "ISIS-Upd (%s): BUG updating LSP %s still marked as own LSP",
@@ -490,8 +479,8 @@ void lsp_update(struct isis_lsp *lsp, struct isis_lsp_hdr *hdr,
                        lsp_link_fragment(lsp, lsp0);
        }
 
-       /* insert the lsp back into the database */
-       lsp_insert(lsp, area->lspdb[level - 1]);
+       if (lsp->hdr.seqno)
+               isis_spf_schedule(lsp->area, lsp->level);
 }
 
 /* creation of LSP directly from what we received */
@@ -1805,6 +1794,7 @@ int lsp_tick(struct thread *thread)
        dnode_t *dnode, *dnode_next;
        int level;
        u_int16_t rem_lifetime;
+        time_t now = monotime(NULL);
 
        lsp_list = list_new();
 
@@ -1883,12 +1873,13 @@ int lsp_tick(struct thread *thread)
                                        if (!circuit->lsp_queue)
                                                continue;
 
-                                       if (monotime_since(
-                                                 &circuit->lsp_queue_last_cleared,
-                                                 NULL) < MIN_LSP_TRANS_INTERVAL) {
+                                       if (now - circuit->lsp_queue_last_push
+                                           < MIN_LSP_RETRANS_INTERVAL) {
                                                continue;
                                        }
 
+                                       circuit->lsp_queue_last_push = now;
+
                                        for (ALL_LIST_ELEMENTS_RO(
                                                     lsp_list, lspnode, lsp)) {
                                                if (circuit->upadjcount
index 9c68fe5966090b611bb140d2cf391fa2eed7d1e9..2ea1fe0a5f08e4d41ab34c65a7aa17e01c774545 100644 (file)
@@ -2059,12 +2059,8 @@ int send_lsp(struct thread *thread)
        lsp = isis_circuit_lsp_queue_pop(circuit);
        if (!lsp)
                return ISIS_OK;
-       /* Set the last-cleared time if the queue is empty. */
-       /* TODO: Is is possible that new lsps keep being added to the queue
-        * that the queue is never empty? */
-       if (list_isempty(circuit->lsp_queue)) {
-               monotime(&circuit->lsp_queue_last_cleared);
-       } else {
+
+       if (!list_isempty(circuit->lsp_queue)) {
                isis_circuit_schedule_lsp_send(circuit);
        }