ethtool 调用流程

2024-05-11 11:12
文章标签 流程 调用 ethtool

本文主要是介绍ethtool 调用流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. bcmgenet_ethtool_ops 分析

static const struct ethtool_ops bcmgenet_ethtool_ops = {.begin            = bcmgenet_begin,.complete        = bcmgenet_complete,.get_strings        = bcmgenet_get_strings,.get_sset_count        = bcmgenet_get_sset_count,.get_ethtool_stats    = bcmgenet_get_ethtool_stats,.get_drvinfo        = bcmgenet_get_drvinfo,.get_link        = ethtool_op_get_link,.get_msglevel        = bcmgenet_get_msglevel,.set_msglevel        = bcmgenet_set_msglevel,.get_wol        = bcmgenet_get_wol,.set_wol        = bcmgenet_set_wol,.get_eee        = bcmgenet_get_eee,.set_eee        = bcmgenet_set_eee,.nway_reset        = phy_ethtool_nway_reset,.get_coalesce        = bcmgenet_get_coalesce,.set_coalesce        = bcmgenet_set_coalesce,.get_link_ksettings    = bcmgenet_get_link_ksettings,.set_link_ksettings    = bcmgenet_set_link_ksettings,
};


2.核心转换层

net/core/ethtool.c
int dev_ethtool(struct net *net, struct ifreq *ifr)
int dev_ethtool(struct net *net, struct ifreq *ifr)
{struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name);void __user *useraddr = ifr->ifr_data;u32 ethcmd, sub_cmd;switch (ethcmd) {.....case ETHTOOL_GEEE:rc = ethtool_get_eee(dev, useraddr);break;....}if (dev->ethtool_ops->complete)dev->ethtool_ops->complete(dev);if (old_features != dev->features)netdev_features_change(dev);return rc;
}

3. ethtool源码=>确定cmd 

static int do_geee(struct cmd_context *ctx)
{struct ethtool_eee eeecmd;if (ctx->argc != 0)exit_bad_args();eeecmd.cmd = ETHTOOL_GEEE;if (send_ioctl(ctx, &eeecmd)) {perror("Cannot get EEE settings");return 1;}fprintf(stdout, "EEE Settings for %s:\n", ctx->devname);dump_eeecmd(&eeecmd);return 0;
}
static const struct option {const char *opts;int want_device;int (*func)(struct cmd_context *);char *help;char *opthelp;
} args[] = {...{ "--show-eee", 1, do_geee, "Show EEE settings"},}

4. ethtool调用分析实战


root@raspberrypi:/home/niyu# ethtool --show-eee eth0
EEE Settings for eth0:
        EEE status: disabled
        Tx LPI: disabled
        Supported EEE link modes:  100baseT/Full 
                                   1000baseT/Full 
        Advertised EEE link modes:  100baseT/Full 
                                    1000baseT/Full 
        Link partner advertised EEE link modes:  Not reported

root@raspberrypi:/home/niyu# dmesg 
[ 2379.731178] bcmgenet fd580000.genet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[ 2395.556547] CPU: 0 PID: 812 Comm: ethtool Not tainted 4.19.127-v8+ #38
[ 2395.556561] Hardware name: Raspberry Pi 4 Model B Rev 1.5 (DT)
[ 2395.556569] Call trace:
[ 2395.556590]  dump_backtrace+0x0/0x178
[ 2395.556600]  show_stack+0x28/0x34
[ 2395.556612]  __dump_stack+0x20/0x28
[ 2395.556621]  dump_stack+0x88/0xc4
[ 2395.556646]  bcmgenet_get_eee+0x24/0x88 [genet]  //结束
[ 2395.556657]  ethtool_get_eee+0x5c/0xe8
[ 2395.556666]  dev_ethtool+0x2a8/0x75c    
[ 2395.556675]  dev_ioctl+0xf8/0x288               //开始

[ 2395.556686]  sock_do_ioctl+0xf8/0x284
[ 2395.556696]  sock_ioctl+0x320/0x484
[ 2395.556708]  vfs_ioctl+0x44/0x74
[ 2395.556717]  do_vfs_ioctl+0x2d0/0x304
[ 2395.556726]  ksys_ioctl+0x54/0x88
[ 2395.556735]  __se_sys_ioctl+0x38/0x4c
[ 2395.556744]  __arm64_sys_ioctl+0x2c/0x38
[ 2395.556753]  __invoke_syscall+0x28/0x34
[ 2395.556761]  invoke_syscall+0x58/0x7c
[ 2395.556769]  el0_svc_common+0x74/0xec
[ 2395.556777]  el0_svc_handler+0x70/0x94
[ 2395.556786]  el0_svc+0x8/0xc

5 补充

struct cmd_context {const char *devname;    /* net device name */int fd;        /* socket suitable for ethtool ioctl */struct ifreq ifr;    /* ifreq suitable for ethtool ioctl */int argc;        /* number of arguments to the sub-command */char **argp;        /* arguments to the sub-command */
};struct ifreq{
# define IFHWADDRLEN    6
# define IFNAMSIZ    IF_NAMESIZEunion{char ifrn_name[IFNAMSIZ];    /* Interface name, e.g. "en0".  */} ifr_ifrn;union{struct sockaddr ifru_addr;struct sockaddr ifru_dstaddr;struct sockaddr ifru_broadaddr;struct sockaddr ifru_netmask;struct sockaddr ifru_hwaddr;short int ifru_flags;int ifru_ivalue;int ifru_mtu;struct ifmap ifru_map;char ifru_slave[IFNAMSIZ];    char ifru_newname[IFNAMSIZ];__caddr_t ifru_data;   //填充cmd} ifr_ifru;};


 

这篇关于ethtool 调用流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979370

相关文章

工作流Activiti初体验—流程撤回【二】

已经玩工作流了,打算还是研究一下撤回的功能。但是流程图里面并不带撤回的组件,所以需要自己动态改造一下,还是延续上一个流程继续试验撤回功能。《工作流Activiti初体验【一】》 完整流程图 我们研究一下分发任务撤回到发起任务,其他环节的撤回类似 撤回的原理大概如下: 将分发任务后面的方向清空,把发起任务拼接到原来的判断网关,然后结束分发任务,这样流程就到发起任务了 此时的流程如上图,

ROS话题通信流程自定义数据格式

ROS话题通信流程自定义数据格式 需求流程实现步骤定义msg文件编辑配置文件编译 在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如:

ScrollView 非手动调用的方法

1. /**  *  非人为的时候调用这个方法  *  *  @param scrollView <#scrollView description#>  */ - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {           } 2.判断控制器的view是否加载过 [willShowVC

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)  标签: 编码邓白氏编码申请流程苹果开发者账号申请 2016-07-08 16:13  2274人阅读  评论(2)  收藏  举报   分类: 技术  苹果开发  邓白氏编码申请 版权声明:本文为博主原创文章,未经博主允许不得转载。     申请公司的苹果开发者账号和企业级的苹

办理河南建筑工程乙级设计资质的流程与要点

办理河南建筑工程乙级设计资质的流程与要点 办理河南建筑工程乙级设计资质的流程与要点主要包括以下几个方面: 流程: 工商注册与资质规划:确保企业具有独立法人资格,完成工商注册,并明确乙级设计资质的具体要求,包括注册资本、人员配置、技术条件等。 专业技术人员配置: 雇佣或签约符合资质要求的专业技术人员,包括但不限于:一级注册结构工程师2名、一级注册建筑师2名、注册暖通工程师1名、注册供配电工

黑龙江等保测评的具体流程是怎样的

黑龙江等保测评的具体流程 黑龙江等保测评是根据《中华人民共和国网络安全法》及相关法律法规,对信息系统安全保护能力进行评估和验证的过程。以下是黑龙江等保测评的具体流程: 系统定级:根据业务、资产、安全技术、安全管理等方面的情况,对企业的安全防护水平进行评估,编制定级报告,为客户提供技术支持,协助客户编制定级报告,并组织相关专家对定级报告进行评估。 系统备案:持定级报告及登记表到当地的公安网监

Eclipse使用git最基本流程

Eclipse使用git最基本流程,eclipsegit流程 git有诸多好处,网上都说的很清楚了,在这里我不再赘述。对于我来说,私下里想做一些项目,而又不能很好的保存自己的代码和进行版本控制,这时候,就用到了git。下面,就以我个人为例讲讲git从0开始如何安装使用。 Step1 准备工作 msysgit,下载地址为http://msysgit.github.io/

Android Framework学习(四)之Launcher启动流程解析

在之前的博客中,我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,我们知道SystemServer进程主要用于启动系统的各种服务,二者其中就包含了负责启动Launcher的服务,LauncherAppService,本篇博客我们将一起学习Launcher相关的知识。 Launcher概述 Launcher程序就是我们平时看到的桌面程序,它其实也是一个Androi

在WinCE的C#编程中,需要静态调用C++的动态库,需要添加using System.Runtime.InteropServices

using System.Runtime.InteropServices;         [DllImport("Win32DLL.dll", EntryPoint = "WriteREG_SZToRegTCHAR")]         private static extern bool WriteREG_SZToRegTCHAR(int iFlag, string regKeyP

对接Shopify电商平台的流程

对接Shopify平台的流程通常包括以下关键步骤,在整个对接过程中,需要密切关注Shopify的API使用限制、认证机制、数据隐私政策等,确保应用的安全性和合规性。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.创建Shopify应用: 在Shopify后台创建一个新的应用或合作伙伴应用,并获取API密钥和密码。 2.设置OAuth认证: 配置OAuth 2.0认