如何使用代码添加额外 IP,并获得额外 IP 对应网卡接口名称

如何使用代码添加额外 IP,并获得额外 IP 对应网卡接口名称

Q:如何使用代码添加额外 IP,并获得额外 IP 对应网卡接口名称
使用 ifmip 命令给指定网卡添加 IP 地址后,会生成 "mi" 开头的虚拟网卡。同样也可以使用 API 来添加网卡。
这里只进行代码分析和思路的展示,示例代码可见附件。
添加额外 IP,主要使用的是 netdev_mipif_add 函数。该函数原型为:
int  netdev_mipif_add(
      netdev_t *netdev,
      const ip4_addr_t *ip4, 
      const ip4_addr_t *netmask4,
      const ip4_addr_t *gw4);
可见要使用该函数,需要 netdev 结构体,以及 IP 地址、子网掩码以及网关(可选)三个参数。
其中,IP 地址、子网掩码以及网关可以通过字符串转换得到;而 netdev 结构体,可以通过网卡接口名称拿到,
使用的函数为 netdev_find_by_ifname,该函数原型为:
netdev_t *netdev_find_by_ifname(const char *if_name);
其中,入参 if_name 是网卡接口名称,如 "en1"。
 
至此,额外 IP 添加完毕。
获取额外 IP 对应的网卡名称,可以使用网卡 ioctl 命令字 SIOCGIFCONF该命令字可以获得网卡列表。
得到网卡列表后,将网卡的 IP 地址与设置的额外 IP 进行比较,若匹配,则取出网卡名称即可。
 
获取网卡列表的示例代码,可见《SylixOS 应用开发手册》中,15.11.1.3 网络 ioctl 命令章节。
更多扩展知识见:

    • Related Articles

    • gethostbyname 函数如何获取自定义主机映射 IP 地址?

      问:gethostbyname 函数如何获取自定义主机映射 IP 地址? 答:gethostbyname 函数可以通过主机名获取对应 IP 地址,因此我们可以在 /etc/hosts 文件中添加 自己定义的主机名以及对应的 IP 地址。 注:自定义主机名不要设置为 sylix 、 sylixos 等默认名称,这些默认名称都对应了 IP 127.0.0.1 ,因 此返回值不会是自己定义的IP地址。 以下为函数测试代码: #include <stdio.h> #include <netdb.h> ...
    • Failed to setting the IP address of ethernet

      Q:在硬件仿真器中创建网络适配器时,无法设置 IP 地址? 在硬件仿真器中创建网络适配器时,无法设置 IP 地址,报如下图所示错误         通过多种方式排查后,发现是杀毒软件和电脑管家的问题,因此,当出现 “Failed to setting the IP address of ethernet“ 错误提示时,应先关闭杀毒软件和电脑管家,重试应能正常创建了。
    • SylixOS 如何配置 IP 地址?

      (1) 使用 ifconfig 命令进行配置(临时配置,重启无效) 可手动创建 shell 脚本 /etc/startup.sh,并写入 ifconfig 配置(脚本生效,重启有效) ifconfig [ifname] [{inet | netmask | gateway}] [address] eg: ifconfig en1 inet 192.168.0.3 ifconfig en1 netmask 255.255.255.0 ifconfig en1 gateway 192.168.0.1 ...
    • SylixOS 网卡初始化配置参数设置

      Q:如何配置 SylixOS 网卡的初始化参数? ifconfig 命令对 ip 地址的修改仅仅是一个临时修改,当系统掉电重启后,设备ip地址还是由相应 bsp 文件来配置的,但是系统每次启动都会读取 ifparam.ini 文件,该文件存储着系统网络方面的配置信息且掉电不丢失。 ifparam.ini 文件存储在根目录 etc 文件夹下(可自行创建),文件内容如: [dw_0]                                     // 网卡型号,可以在系统下通过 ...
    • 如何配置网卡的默认网关到附加的 IP 地址上

      Q:如何配置网卡的默认网关到附加的 IP 地址上? 使用 ifmip 命令给指定网卡添加 IP 地址后,会生成 "mi" 开头的虚拟网卡。若只用 ifconfig 配置 "mi" 网卡的网关地址, SylixOS 是无法通过配置的网关,访问外部 IP 地址的。需要再进行路由表配置,将默认网关切换至 "mi" 网卡。 这里进行设置的举例: ifmip en1 add 192.168.1.101 255.255.255.0 该步骤在 en1 网卡上添加额外 IP ...