On Tue, Mar 22, 2022 at 10:55:48AM +0100, Claudio Jeker wrote:
> As mentioned I need a TAILQ for the list of prefixes that belong to a rib
> entry. Mainly because I need TAILQ_PREV. This diff does this replacement.
> I did not change the nexhtop LIST of prefixes to a TAILQ. Maybe something
> to consider but there is no real need for that.
> 
> This is mostly a mechanical change. The only thing that had to change is
> rde_softreconfig_sync_reeval() where before the LIST_HEAD was copied which
> is not possible with TAILQ (there is a pointer to the TAILQ_HEAD struct
> from inside the TAILQ). Instead use TAILQ_CONCAT() to move the queue from
> the rib_entry to the local tailq head. I checked the rest of the code and
> did not find any other case where the rib_entry prefix_h was copied
> around.
> 
> I also have a fix for the unittest regress ready for this change. I left
> that one out since it is just a trivial mechanical change.

ok

One question on the changes in prefix_{insert,remove}():

> @@ -321,14 +321,8 @@ prefix_insert(struct prefix *new, struct
>                                * MED inversion, take out prefix and
>                                * put it onto redo queue.
>                                */
> -                             LIST_REMOVE(xp, entry.list.rib);
> -                             if (tailp == NULL)
> -                                     LIST_INSERT_HEAD(&redo, xp,
> -                                         entry.list.rib);
> -                             else
> -                                     LIST_INSERT_AFTER(tailp, xp,
> -                                         entry.list.rib);
> -                             tailp = xp;
> +                             TAILQ_REMOVE(&re->prefix_h, xp, entry.list.rib);
> +                             TAILQ_INSERT_TAIL(&redo, xp, entry.list.rib);

The above looks right: you keep appending at the end. In prefix_remove()
you flipped the insertion to the start. Shouldn't the below be changed
to use TAILQ_INSERT_TAIL() as well?

> @@ -402,22 +396,16 @@ prefix_remove(struct prefix *old, struct
>                                * possible MED inversion, take out prefix and
>                                * put it onto redo queue.
>                                */
> -                             LIST_REMOVE(xp, entry.list.rib);
> -                             if (tailp == NULL)
> -                                     LIST_INSERT_HEAD(&redo, xp,
> -                                         entry.list.rib);
> -                             else
> -                                     LIST_INSERT_AFTER(tailp, xp,
> -                                         entry.list.rib);
> -                             tailp = xp;
> +                             TAILQ_REMOVE(&re->prefix_h, xp, entry.list.rib);
> +                             TAILQ_INSERT_HEAD(&redo, xp, entry.list.rib);

Reply via email to