【问题标题】:How to get linux interface alias(IFLA_IFALIAS) programatically for an interface?如何以编程方式为接口获取 linux 接口别名(IFLA IFALIAS)?
【发布时间】:2016-04-01 12:40:18
【问题描述】:

我们可以使用命令为接口设置别名

ip link set eth0 alias somename

看到那个;

ip link show eth0

它被设置为别名。现在我想在 C 程序中阅读这个,但我不知道。我确实进行了谷歌搜索,甚至尝试查看 iproute2(此 cli 的提供者),但无济于事。你们中的任何人都可以帮助我吗?

请不要将 cli 输出提供给文件和正则表达式解决方案。

【问题讨论】:

  • 我的错误,设置别名命令是错误输入“ip link set eth0 alias somename”
  • "alias command is mis-typed" 那么你可能想编辑你的问题。
  • 感谢 jbm,正如我评论的那样,我已经在问题中修复了它。

标签: c linux networking


【解决方案1】:

如果你想在 C 中做到这一点,你必须做一些netlink 编程:

https://www.infradead.org/~tgr/libnl/

请参阅here about interfaces 及其“3.5.11. IfAlias”部分。

Netlink 套接字是一种非常通用、可扩展且因此功能强大的机制,但它的代价是复杂性和陡峭的学习曲线。文档是相当,呃,“原始的”,与一步一步的广泛教程相去甚远。您仍然可以在这里和那里找到一些简短的教程,尽管适用于有限的简单用例。因此,期待相当多的工作。

另一种选择是研究iproute2 的源代码,它确实使用 netlink 套接字,但依赖于 libnl* 库,而是通过本身,这 0/ (除其他外)使其非常复杂 1/ 无助于在 iproute2 实现之外创建可重用的。我推荐这种方法:与使用 libnl* 一样困难,而且 libnl* 知识是一项可重复使用的投资。

http://git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/

PS:

在 SO[https://stackoverflow.com/questions/tagged/netlink] 上有一个 ("netlink") 标签。

【讨论】:

  • 非常感谢,我将与 netlink 合作。这看起来是我正在寻找的解决方案。让我验证一下。
  • 不客气。现在准备好用 netlink 破解几天的艰难日子(取决于你的 C 经验)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 2014-06-02
相关资源
最近更新 更多