ifreq ifr 配置网口信息
//通过ifreq结构体来获取接口信息
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;/*
enum net_device_flags {IFF_UP = 1<<0, /* sysfs */IFF_BROADCAST = 1<<1, /* __volatile__ */IFF_DEBUG = 1<<2, /* sysfs */IFF_LOOPBACK = 1<<3, /* __volatile__ */IFF_POINTOPOINT = 1<<4, /* __volatile__ */IFF_NOTRAILERS = 1<<5, /* sysfs */IFF_RUNNING = 1<<6, /* __volatile__ */IFF_NOARP = 1<<7, /* sysfs */IFF_PROMISC = 1<<8, /* sysfs */IFF_ALLMULTI = 1<<9, /* sysfs */IFF_MASTER = 1<<10, /* __volatile__ */IFF_SLAVE = 1<<11, /* __volatile__ */IFF_MULTICAST = 1<<12, /* sysfs */IFF_PORTSEL = 1<<13, /* sysfs */IFF_AUTOMEDIA = 1<<14, /* sysfs */IFF_DYNAMIC = 1<<15, /* sysfs */IFF_LOWER_UP = 1<<16, /* __volatile__ */IFF_DORMANT = 1<<17, /* __volatile__ */IFF_ECHO = 1<<18, /* __volatile__ */
};*/ int ifru_ivalue; int ifru_mtu; struct ifmap ifru_map; char ifru_slave[IFNAMSIZ]; /* Just fits the size */char ifru_newname[IFNAMSIZ]; __caddr_t ifru_data; } ifr_ifru;};int connman_inet_ifindex(const char *name)
{struct ifreq ifr; int sk, err; if (!name)return -1;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0) return -1;memset(&ifr, 0, sizeof(ifr));strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name) - 1);err = ioctl(sk, SIOCGIFINDEX, &ifr);close(sk);if (err < 0)return -1;return ifr.ifr_ifindex;
}char *connman_inet_ifname(int index)
{struct ifreq ifr;int sk, err;if (index < 0)return NULL;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0)return NULL;memset(&ifr, 0, sizeof(ifr));ifr.ifr_ifindex = index;err = ioctl(sk, SIOCGIFNAME, &ifr);close(sk);if (err < 0)return NULL;return strdup(ifr.ifr_name); //需要手动释放内存 free
}int connman_inet_ifup(int index) //类似于 ifconfig up
{struct ifreq ifr;int sk, err;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0)return -errno;memset(&ifr, 0, sizeof(ifr));ifr.ifr_ifindex = index;if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {err = -errno;goto done;}if (ioctl(sk, SIOCGIFFLAGS, &ifr) < 0) {err = -errno;goto done;}if (ifr.ifr_flags & IFF_UP) {err = -EALREADY;goto done;}ifr.ifr_flags |= (IFF_UP|IFF_DYNAMIC);if (ioctl(sk, SIOCSIFFLAGS, &ifr) < 0) {err = -errno;goto done;}err = 0;done:close(sk);return err;
}///sys/class/net/xxx/flags 最终就是修改内核,在应用层映射出来就是这个配置文件 内核映射在sys文件中
int connman_inet_ifdown(int index) //类似于 ifconfig down
{struct ifreq ifr, addr_ifr;struct sockaddr_in *addr;int sk, err;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0)return -errno;memset(&ifr, 0, sizeof(ifr));ifr.ifr_ifindex = index;if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {err = -errno;goto done;}if (ioctl(sk, SIOCGIFFLAGS, &ifr) < 0) {err = -errno;goto done;}memset(&addr_ifr, 0, sizeof(addr_ifr));memcpy(&addr_ifr.ifr_name, &ifr.ifr_name, sizeof(ifr.ifr_name) - 1);addr = (struct sockaddr_in *)&addr_ifr.ifr_addr;addr->sin_family = AF_INET;if (ioctl(sk, SIOCSIFADDR, &addr_ifr) < 0)connman_warn("Could not clear IPv4 address index %d", index);if (!(ifr.ifr_flags & IFF_UP)) {err = -EALREADY;goto done;}ifr.ifr_flags = (ifr.ifr_flags & ~IFF_UP) | IFF_DYNAMIC;if (ioctl(sk, SIOCSIFFLAGS, &ifr) < 0)err = -errno;elseerr = 0;done:close(sk);return err;
}
ifreq ifr 配置网口信息相关推荐
- Linux系统利用C语言获取网口信息(IP地址,MAC地址,状态,带宽speed等)
目录 设计思路 ioctl操作参数 获取网口的遍历结构 获取对应的参数信息 源代码 ifinfo.c ifinfo.h test.c 测试结果 设计思路 首先给需要查询的信息定义个结构(当然,这里可以 ...
- 【linux】配置网口IP|RDMA配置IP|ens、eno、enp网口的区别|ping不通问题排查|DNS设置
目录 linux网口配置IP 1.查看接口信息 2.配置IP 3.重启网络服务确认ip配置结果 一个网卡配置多个IP Centos配置DNS 配置RDMA网卡 查看哪个网口连线方法 ens.eno.e ...
- 在web.xml文件中配置Servlet时,主要配置哪些信息?
web前端的学习内容是比较多的,其中有一部分就是关于在web.xml文件中配置Servlet时的相关内容,在web.xml文件中配置Servlet时,主要配置哪些信息?来看看下面的详细介绍. 使用ID ...
- 配置网口相机(大恒水星相机)
配置网口相机(大恒水星相机) 相机参数: 首先查看电脑是否为支持千兆网口. 从这里看的出来(GbE)是千兆的. 也可以用鲁大师,用鲁大师查看,确实是千兆网口. 命令行输入ipconfig/all,可以 ...
- android wifi动画显示,android动态配置Wifi信息
我们找到 android.net.wifi.WifiConfiguration.java 看看如何配置Wifi信息. /**************************************SS ...
- 计算机的相关配置信息,win7系统查看电脑配置相关信息的方案介绍
win7系统使用久了,好多网友反馈说win7系统查看电脑配置相关信息的问题,非常不方便.有什么办法可以永久解决win7系统查看电脑配置相关信息的问题,面对win7系统查看电脑配置相关信息的图文步骤非常 ...
- HttpClient4.5使用RequestConfig配置连接信息
本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 RequestConfig类 超时相关配置 代 ...
- mybatis使用拦截器显示sql,使用druid配置连接信息
mybatis使用拦截器显示sql,使用druid配置连接信息 mybatis sql Druid 1.显示出sql内容: 新建2个类: MybatisInterceptor :拦截sql,并获得输出 ...
- 小程序初始化服务器数据,微信小程序 项目实战(一)生命周期 配置服务器信息 splash启动页...
步骤一:小程序 生命周期 //app.js App({ onLaunch: function () { //当小程序初始化完成时,会触发onLaunch(全局只触发一次) }, onShow: fun ...
最新文章
- 别太把图神经网络当回事儿
- macOS完全卸载Android Studio方法
- Kotlin 在kotlin内使用Java的一些注意(长篇)
- PE文件数据结构汇总
- Metal之探究理解视频渲染RGB与YUV颜色编码
- AdoHelper使用MySQL存储过程示例
- java中nodelist的用法_我可以在Java中使用for-each遍历一个NodeList吗?
- Abaqus二次开发的一些自制脚本
- 6 important .NET concepts: - Stack, heap, Value types, reference types, boxing and Unboxing.
- 安装Firefly错误-Unable to find vcvarsall.bat
- 基于javaweb的学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)
- 锐捷校园网自动认证路由脚本
- HiTool工具烧录uImage过程
- Windows开启卓越性能模式,一键睿频
- 洛谷-UVA12676 Inverting Huffman(反转树)
- java 去系统运行时间_java 如何获取应用的运行时间
- 应用之星推出“图文app”制作工具,并附上教程
- 牛客网练习赛36 Ribbit的数列 分块
- 外网访问内网FTP服务器
- 高压加工食品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告