Commit a364c8cf authored by John Fastabend's avatar John Fastabend Committed by David S. Miller

dcb: Add dcb_ieee_getapp_mask() for drivers to query APP settings

With multiple APP entries per selector and protocol drivers
or stacks may want to pick a specific value or stripe traffic
across many priorities. Also if an APP entry in use is
deleted the stack/driver may want to choose from the existing
APP entries.

To facilitate this and avoid having duplicate code to walk
the APP ring provide a routine dcb_ieee_getapp_mask() to
return a u8 bitmask of all priorities set for the specified
selector and protocol. This routine and bitmask is a helper
for DCB kernel users.
Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f9ae7e4b
...@@ -32,6 +32,7 @@ u8 dcb_setapp(struct net_device *, struct dcb_app *); ...@@ -32,6 +32,7 @@ u8 dcb_setapp(struct net_device *, struct dcb_app *);
u8 dcb_getapp(struct net_device *, struct dcb_app *); u8 dcb_getapp(struct net_device *, struct dcb_app *);
int dcb_ieee_setapp(struct net_device *, struct dcb_app *); int dcb_ieee_setapp(struct net_device *, struct dcb_app *);
int dcb_ieee_delapp(struct net_device *, struct dcb_app *); int dcb_ieee_delapp(struct net_device *, struct dcb_app *);
u8 dcb_ieee_getapp_mask(struct net_device *, struct dcb_app *);
int dcbnl_notify(struct net_device *dev, int event, int cmd, u32 seq, u32 pid); int dcbnl_notify(struct net_device *dev, int event, int cmd, u32 seq, u32 pid);
......
...@@ -1928,6 +1928,32 @@ u8 dcb_setapp(struct net_device *dev, struct dcb_app *new) ...@@ -1928,6 +1928,32 @@ u8 dcb_setapp(struct net_device *dev, struct dcb_app *new)
} }
EXPORT_SYMBOL(dcb_setapp); EXPORT_SYMBOL(dcb_setapp);
/**
* dcb_ieee_getapp_mask - retrieve the IEEE DCB application priority
*
* Helper routine which on success returns a non-zero 802.1Qaz user
* priority bitmap otherwise returns 0 to indicate the dcb_app was
* not found in APP list.
*/
u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app)
{
struct dcb_app_type *itr;
u8 prio = 0;
spin_lock(&dcb_lock);
list_for_each_entry(itr, &dcb_app_list, list) {
if (itr->app.selector == app->selector &&
itr->app.protocol == app->protocol &&
(strncmp(itr->name, dev->name, IFNAMSIZ) == 0)) {
prio |= 1 << itr->app.priority;
}
}
spin_unlock(&dcb_lock);
return prio;
}
EXPORT_SYMBOL(dcb_ieee_getapp_mask);
/** /**
* dcb_ieee_setapp - add IEEE dcb application data to app list * dcb_ieee_setapp - add IEEE dcb application data to app list
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment