diff options
author | John Fastabend <john.r.fastabend@intel.com> | 2011-06-21 11:34:53 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-06-22 03:06:12 +0400 |
commit | a364c8cf80251849bab207be8c9e66253c8ca8f8 (patch) | |
tree | 7dfeba7c78081e271b8417fdcb98fe8a475030a8 | |
parent | f9ae7e4b515c4d56baf6e0e84ebee2e03ae57a25 (diff) | |
download | linux-a364c8cf80251849bab207be8c9e66253c8ca8f8.tar.xz |
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: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/dcbnl.h | 1 | ||||
-rw-r--r-- | net/dcb/dcbnl.c | 26 |
2 files changed, 27 insertions, 0 deletions
diff --git a/include/net/dcbnl.h b/include/net/dcbnl.h index 62a268531d4a..c14fd9483e46 100644 --- a/include/net/dcbnl.h +++ b/include/net/dcbnl.h @@ -32,6 +32,7 @@ u8 dcb_setapp(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_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); diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c index 196084f310d2..b7d0be01dcc4 100644 --- a/net/dcb/dcbnl.c +++ b/net/dcb/dcbnl.c @@ -1929,6 +1929,32 @@ out: 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 * * This adds Application data to the list. Multiple application |