dcb: Use ifindex instead of ifname
Use ifindex instead of ifname in the DCB app ring. This makes for a smaller data structure and faster comparisons. It also avoids possible issues when a net device is renamed. Signed-off-by: Mark Rustad <mark.d.rustad@intel.com> Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
e878d78b9a
commit
e290ed8130
@@ -23,7 +23,7 @@
|
|||||||
#include <linux/dcbnl.h>
|
#include <linux/dcbnl.h>
|
||||||
|
|
||||||
struct dcb_app_type {
|
struct dcb_app_type {
|
||||||
char name[IFNAMSIZ];
|
int ifindex;
|
||||||
struct dcb_app app;
|
struct dcb_app app;
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
};
|
};
|
||||||
|
@@ -1255,7 +1255,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
|
|
||||||
spin_lock(&dcb_lock);
|
spin_lock(&dcb_lock);
|
||||||
list_for_each_entry(itr, &dcb_app_list, list) {
|
list_for_each_entry(itr, &dcb_app_list, list) {
|
||||||
if (strncmp(itr->name, netdev->name, IFNAMSIZ) == 0) {
|
if (itr->ifindex == netdev->ifindex) {
|
||||||
err = nla_put(skb, DCB_ATTR_IEEE_APP, sizeof(itr->app),
|
err = nla_put(skb, DCB_ATTR_IEEE_APP, sizeof(itr->app),
|
||||||
&itr->app);
|
&itr->app);
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -1412,7 +1412,7 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
goto dcb_unlock;
|
goto dcb_unlock;
|
||||||
|
|
||||||
list_for_each_entry(itr, &dcb_app_list, list) {
|
list_for_each_entry(itr, &dcb_app_list, list) {
|
||||||
if (strncmp(itr->name, netdev->name, IFNAMSIZ) == 0) {
|
if (itr->ifindex == netdev->ifindex) {
|
||||||
struct nlattr *app_nest = nla_nest_start(skb,
|
struct nlattr *app_nest = nla_nest_start(skb,
|
||||||
DCB_ATTR_APP);
|
DCB_ATTR_APP);
|
||||||
if (!app_nest)
|
if (!app_nest)
|
||||||
@@ -2050,7 +2050,7 @@ u8 dcb_getapp(struct net_device *dev, struct dcb_app *app)
|
|||||||
list_for_each_entry(itr, &dcb_app_list, list) {
|
list_for_each_entry(itr, &dcb_app_list, list) {
|
||||||
if (itr->app.selector == app->selector &&
|
if (itr->app.selector == app->selector &&
|
||||||
itr->app.protocol == app->protocol &&
|
itr->app.protocol == app->protocol &&
|
||||||
(strncmp(itr->name, dev->name, IFNAMSIZ) == 0)) {
|
itr->ifindex == dev->ifindex) {
|
||||||
prio = itr->app.priority;
|
prio = itr->app.priority;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2073,7 +2073,7 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new)
|
|||||||
struct dcb_app_type *itr;
|
struct dcb_app_type *itr;
|
||||||
struct dcb_app_type event;
|
struct dcb_app_type event;
|
||||||
|
|
||||||
memcpy(&event.name, dev->name, sizeof(event.name));
|
event.ifindex = dev->ifindex;
|
||||||
memcpy(&event.app, new, sizeof(event.app));
|
memcpy(&event.app, new, sizeof(event.app));
|
||||||
|
|
||||||
spin_lock(&dcb_lock);
|
spin_lock(&dcb_lock);
|
||||||
@@ -2081,7 +2081,7 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new)
|
|||||||
list_for_each_entry(itr, &dcb_app_list, list) {
|
list_for_each_entry(itr, &dcb_app_list, list) {
|
||||||
if (itr->app.selector == new->selector &&
|
if (itr->app.selector == new->selector &&
|
||||||
itr->app.protocol == new->protocol &&
|
itr->app.protocol == new->protocol &&
|
||||||
(strncmp(itr->name, dev->name, IFNAMSIZ) == 0)) {
|
itr->ifindex == dev->ifindex) {
|
||||||
if (new->priority)
|
if (new->priority)
|
||||||
itr->app.priority = new->priority;
|
itr->app.priority = new->priority;
|
||||||
else {
|
else {
|
||||||
@@ -2101,7 +2101,7 @@ int dcb_setapp(struct net_device *dev, struct dcb_app *new)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&entry->app, new, sizeof(*new));
|
memcpy(&entry->app, new, sizeof(*new));
|
||||||
strncpy(entry->name, dev->name, IFNAMSIZ);
|
entry->ifindex = dev->ifindex;
|
||||||
list_add(&entry->list, &dcb_app_list);
|
list_add(&entry->list, &dcb_app_list);
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
@@ -2127,7 +2127,7 @@ u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app)
|
|||||||
list_for_each_entry(itr, &dcb_app_list, list) {
|
list_for_each_entry(itr, &dcb_app_list, list) {
|
||||||
if (itr->app.selector == app->selector &&
|
if (itr->app.selector == app->selector &&
|
||||||
itr->app.protocol == app->protocol &&
|
itr->app.protocol == app->protocol &&
|
||||||
(strncmp(itr->name, dev->name, IFNAMSIZ) == 0)) {
|
itr->ifindex == dev->ifindex) {
|
||||||
prio |= 1 << itr->app.priority;
|
prio |= 1 << itr->app.priority;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2150,7 +2150,7 @@ int dcb_ieee_setapp(struct net_device *dev, struct dcb_app *new)
|
|||||||
struct dcb_app_type event;
|
struct dcb_app_type event;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
memcpy(&event.name, dev->name, sizeof(event.name));
|
event.ifindex = dev->ifindex;
|
||||||
memcpy(&event.app, new, sizeof(event.app));
|
memcpy(&event.app, new, sizeof(event.app));
|
||||||
|
|
||||||
spin_lock(&dcb_lock);
|
spin_lock(&dcb_lock);
|
||||||
@@ -2159,7 +2159,7 @@ int dcb_ieee_setapp(struct net_device *dev, struct dcb_app *new)
|
|||||||
if (itr->app.selector == new->selector &&
|
if (itr->app.selector == new->selector &&
|
||||||
itr->app.protocol == new->protocol &&
|
itr->app.protocol == new->protocol &&
|
||||||
itr->app.priority == new->priority &&
|
itr->app.priority == new->priority &&
|
||||||
(strncmp(itr->name, dev->name, IFNAMSIZ) == 0)) {
|
itr->ifindex == dev->ifindex) {
|
||||||
err = -EEXIST;
|
err = -EEXIST;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@@ -2173,7 +2173,7 @@ int dcb_ieee_setapp(struct net_device *dev, struct dcb_app *new)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&entry->app, new, sizeof(*new));
|
memcpy(&entry->app, new, sizeof(*new));
|
||||||
strncpy(entry->name, dev->name, IFNAMSIZ);
|
entry->ifindex = dev->ifindex;
|
||||||
list_add(&entry->list, &dcb_app_list);
|
list_add(&entry->list, &dcb_app_list);
|
||||||
out:
|
out:
|
||||||
spin_unlock(&dcb_lock);
|
spin_unlock(&dcb_lock);
|
||||||
@@ -2194,7 +2194,7 @@ int dcb_ieee_delapp(struct net_device *dev, struct dcb_app *del)
|
|||||||
struct dcb_app_type event;
|
struct dcb_app_type event;
|
||||||
int err = -ENOENT;
|
int err = -ENOENT;
|
||||||
|
|
||||||
memcpy(&event.name, dev->name, sizeof(event.name));
|
event.ifindex = dev->ifindex;
|
||||||
memcpy(&event.app, del, sizeof(event.app));
|
memcpy(&event.app, del, sizeof(event.app));
|
||||||
|
|
||||||
spin_lock(&dcb_lock);
|
spin_lock(&dcb_lock);
|
||||||
@@ -2203,7 +2203,7 @@ int dcb_ieee_delapp(struct net_device *dev, struct dcb_app *del)
|
|||||||
if (itr->app.selector == del->selector &&
|
if (itr->app.selector == del->selector &&
|
||||||
itr->app.protocol == del->protocol &&
|
itr->app.protocol == del->protocol &&
|
||||||
itr->app.priority == del->priority &&
|
itr->app.priority == del->priority &&
|
||||||
(strncmp(itr->name, dev->name, IFNAMSIZ) == 0)) {
|
itr->ifindex == dev->ifindex) {
|
||||||
list_del(&itr->list);
|
list_del(&itr->list);
|
||||||
kfree(itr);
|
kfree(itr);
|
||||||
err = 0;
|
err = 0;
|
||||||
|
Reference in New Issue
Block a user