2010-05-15 2 views

ответ

4

Каждый сетевой драйвер имеет реализацию «ethtool» для таких функций. Но вам, вероятно, нужна общая функция, которая может дать вам скорость для общей структуры netdev. Вы можете посмотреть на net/core/net-sysfs.c и посмотреть, как он реализует интерфейс/sys/class/net. Например:

static ssize_t show_speed(struct device *dev, 
      struct device_attribute *attr, char *buf) 
{ 
    struct net_device *netdev = to_net_dev(dev); 
    int ret = -EINVAL; 

    if (!rtnl_trylock()) 
     return restart_syscall(); 

    if (netif_running(netdev) && 
     netdev->ethtool_ops && 
     netdev->ethtool_ops->get_settings) { 
     struct ethtool_cmd cmd = { ETHTOOL_GSET }; 

     if (!netdev->ethtool_ops->get_settings(netdev, &cmd)) 
      ret = sprintf(buf, fmt_dec, ethtool_cmd_speed(&cmd)); 
    } 
    rtnl_unlock(); 
    return ret; 
} 
Смежные вопросы