]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
dcb: app: modify dcb_app_table_remove_replaced() for dcb-rewr reuse
authorDaniel Machon <daniel.machon@microchip.com>
Tue, 6 Jun 2023 07:19:41 +0000 (09:19 +0200)
committerDavid Ahern <dsahern@kernel.org>
Fri, 9 Jun 2023 21:43:55 +0000 (15:43 -0600)
When doing a replace command, entries are checked against selector and
protocol. Rewrite requires the check to be against selector and
priority.

Adapt the existing dcb_app_table_remove_replace function for this, by
using callback functions for selector, pid and prio checks.

Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
Reviewed-by: Petr Machata <me@pmachata.org>
Signed-off-by: David Ahern <dsahern@kernel.org>
dcb/dcb_app.c

index aa248cc40bdf6ce3ce80e879ba029f71b7caab18..4b309016fb652e08fc8dc4248f4746eeeae0b803 100644 (file)
@@ -153,8 +153,16 @@ static void dcb_app_table_remove_existing(struct dcb_app_table *a,
        a->n_apps = ja;
 }
 
+static bool dcb_app_pid_eq(const struct dcb_app *aa, const struct dcb_app *ab)
+{
+       return aa->selector == ab->selector &&
+              aa->protocol == ab->protocol;
+}
+
 static void dcb_app_table_remove_replaced(struct dcb_app_table *a,
-                                         const struct dcb_app_table *b)
+                                  const struct dcb_app_table *b,
+                                  bool (*key_eq)(const struct dcb_app *aa,
+                                                 const struct dcb_app *ab))
 {
        size_t ia, ja;
        size_t ib;
@@ -167,13 +175,13 @@ static void dcb_app_table_remove_replaced(struct dcb_app_table *a,
                for (ib = 0; ib < b->n_apps; ib++) {
                        const struct dcb_app *ab = &b->apps[ib];
 
-                       if (aa->selector == ab->selector &&
-                           aa->protocol == ab->protocol)
+                       if (key_eq(aa, ab))
                                present = true;
                        else
                                continue;
 
-                       if (aa->priority == ab->priority) {
+                       if (aa->protocol == ab->protocol &&
+                           aa->priority == ab->priority) {
                                found = true;
                                break;
                        }
@@ -892,7 +900,7 @@ static int dcb_cmd_app_replace(struct dcb *dcb, const char *dev, int argc, char
        }
 
        /* Remove the obsolete entries. */
-       dcb_app_table_remove_replaced(&orig, &tab);
+       dcb_app_table_remove_replaced(&orig, &tab, dcb_app_pid_eq);
        ret = dcb_app_add_del(dcb, dev, DCB_CMD_IEEE_DEL, &orig, NULL);
        if (ret != 0) {
                fprintf(stderr, "Could not remove replaced APP entries\n");