Skip to content

Commit

Permalink
net: dcb: For wild-card lookups, use priority -1, not 0
Browse files Browse the repository at this point in the history
The function dcb_app_lookup walks the list of specified DCB APP entries,
looking for one that matches a given criteria: ifindex, selector,
protocol ID and optionally also priority. The "don't care" value for
priority is set to 0, because that priority has not been allowed under
CEE regime, which predates the IEEE standardization.

Under IEEE, 0 is a valid priority number. But because dcb_app_lookup
considers zero a wild card, attempts to add an APP entry with priority 0
fail when other entries exist for a given ifindex / selector / PID
triplet.

Fix by changing the wild-card value to -1.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: Ido Schimmel <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
pmachata authored and davem330 committed Jul 27, 2018
1 parent 1f3ed38 commit 08193d1
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions net/dcb/dcbnl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1786,7 +1786,7 @@ static struct dcb_app_type *dcb_app_lookup(const struct dcb_app *app,
if (itr->app.selector == app->selector &&
itr->app.protocol == app->protocol &&
itr->ifindex == ifindex &&
(!prio || itr->app.priority == prio))
((prio == -1) || itr->app.priority == prio))
return itr;
}

Expand Down Expand Up @@ -1821,7 +1821,8 @@ u8 dcb_getapp(struct net_device *dev, struct dcb_app *app)
u8 prio = 0;

spin_lock_bh(&dcb_lock);
if ((itr = dcb_app_lookup(app, dev->ifindex, 0)))
itr = dcb_app_lookup(app, dev->ifindex, -1);
if (itr)
prio = itr->app.priority;
spin_unlock_bh(&dcb_lock);

Expand Down Expand Up @@ -1849,7 +1850,8 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new)

spin_lock_bh(&dcb_lock);
/* Search for existing match and replace */
if ((itr = dcb_app_lookup(new, dev->ifindex, 0))) {
itr = dcb_app_lookup(new, dev->ifindex, -1);
if (itr) {
if (new->priority)
itr->app.priority = new->priority;
else {
Expand Down Expand Up @@ -1882,7 +1884,8 @@ u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app)
u8 prio = 0;

spin_lock_bh(&dcb_lock);
if ((itr = dcb_app_lookup(app, dev->ifindex, 0)))
itr = dcb_app_lookup(app, dev->ifindex, -1);
if (itr)
prio |= 1 << itr->app.priority;
spin_unlock_bh(&dcb_lock);

Expand Down

0 comments on commit 08193d1

Please sign in to comment.