RE: speed specific port cost calculation in br_if.c and how to make it generic based on 802.1d Table-17-3?

From: <hidden>
Date: 2012-07-07 05:54:43

Can any one point me on how to go about it?
Parav
-----Original Message-----
From: Pandit, Parav
Sent: Tuesday, July 03, 2012 6:10 PM
To: 'netdev@vger.kernel.org'
Cc: Parav Pandit
Subject: speed specific port cost calculation in br_if.c and how to make it
generic based on 802.1d Table-17-3?

Hi,

I am trying to add further support to bridging portion of stack for 40G and
100G speeds.
net/bridge/br_if.c function port_cost() has hard coded values of 2, 4, 19, 100
for speed of 10G, 1G, 100M, 10Mbps respectively.
Comment mentions about based on 802.1d standard.

I am referring to 802.1d-2004 Table 17-3-Port Path Cost values.
It mentions port cost value of 2000, 20000, 200000 respectively for speed of
10G, 1G, 100Mbps respectively.
This makes sense to me as the post cost value is inversely proportional and
scalar function of its speed.

Can anyone please guide me on
1. how the current calculation of path/port cost is being done so that I can
enhance it for other speeds too in generic way if possible?
2. How can I incorporate for other speed settings in generic way based on
802.1a-2004 spec, Table 17-3?

Current code snippet:
/* Determine initial path cost based on speed.
 * using recommendations from 802.1d standard
 *
 * Since driver might sleep need to not be holding any locks.
 */
static int port_cost(struct net_device *dev) {
        struct ethtool_cmd ecmd;

        if (!__ethtool_get_settings(dev, &ecmd)) {
                switch (ethtool_cmd_speed(&ecmd)) {
                case SPEED_10000:
                        return 2;
                case SPEED_1000:
                        return 4;
                case SPEED_100:
                        return 19;
                case SPEED_10:
                        return 100;
                }
        }

        /* Old silly heuristics based on name */
        if (!strncmp(dev->name, "lec", 3))
                return 7;

        if (!strncmp(dev->name, "plip", 4))
                return 2500;

        return 100;     /* assume old 10Mbps */
}

Regards,
Parav Pandit
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help