在内核空间,我如何知道 eth0 属于哪个桥接口?

发布于 2022-07-25 20:38:12 字数 177 浏览 14 评论 9

我在 kernel 中通过 dev_get_by_name("eth0") 就可以取出 eth0 的 struct net_device 结构信息,
那么,我如何知道它是隶属于哪个桥接口的?
谢谢!

[ 本帖最后由 flw 于 2006-10-13 17:13 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

情绪失控 2022-07-27 22:44:39

原帖由 flw 于 2006-10-13 17:13 发表

这是用户层的。

从用户层跟踪下这个函数,看在内核里是怎们实现的,说不定可以找到你想要的API

桃酥萝莉 2022-07-27 22:43:23

原帖由 独孤九贱 于 2006-10-13 20:53 发表

如果你是在处理数据缓存skb的上下文中,还可以:

  1.         struct net_bridge_port *p = skb->dev->br_port;
  2.         struct net_bridge *br = p->br;

复制代码

谢谢!我是在 module_init 里面,那么是不是就只有这一种方法了?
我总觉得 dev->br_port->br->dev->name 这样很罗嗦,有没有 export 出来的 API 可以用?我找了,好像没有。
但是如果不用 API 用这种方法的话,我就得在我的模块里 #include  "../linux/net/bridge/br_private.h",很讨厌。(因为 struct net_bridge_port 结构所在的头文件 br_private.h 不在 include 目录里,所以只能这样)。

东走西顾 2022-07-27 22:42:42

原帖由 flw 于 2006-10-13 18:09 发表
搞定!
谢谢各位!

struct net_device *dev;
dev = dev_get_by_name( "eth0" );
if ( dev->br_port != NULL ){
    printk( KERN_INFO "interface [%s] is a member of bridge [% ...

如果你是在处理数据缓存skb的上下文中,还可以:

  1.         struct net_bridge_port *p = skb->dev->br_port;
  2.         struct net_bridge *br = p->br;

复制代码

╰つ倒转 2022-07-27 22:37:35

搞定!
谢谢各位!

  1. struct net_device *dev;
  2. dev = dev_get_by_name( "eth0" );
  3. if ( dev->br_port != NULL ){
  4.     printk( KERN_INFO "interface [%s] is a member of bridge [%s].n", dev->name, dev->br_port->br->dev->name );
  5. }

复制代码

回首观望 2022-07-27 19:33:47

原帖由 langue 于 2006-10-13 17:16 发表
即使是用户层的程序,如果和驱动关联,也必然和核心有联系。

我想,ioctl() 的地位,应该不用说了吧?

那你告诉我应该怎么写。

小姐丶请自重 2022-07-27 18:54:56

即使是用户层的程序,如果和驱动关联,也必然和核心有联系。

我想,ioctl() 的地位,应该不用说了吧?

⒈起吃苦の倖褔 2022-07-27 14:33:29

原帖由 langue 于 2006-10-13 17:04 发表
brctl 好像可以做到。

这是用户层的。

涙—继续流 2022-07-27 11:16:16

brctl 好像可以做到。

方圜几里 2022-07-26 15:09:21

我是 2.6.16.1 的内核。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文