linux网络编程中遇到的ioctl中的标志

本文介绍了Linux网络设备配置中使用的ioctl接口及其相关结构,包括ifreq和ifconf等,并详细描述了多个ioctl命令的功能,如SIOCGIFNAME、SIOCGIFINDEX等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
u_int16_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};

struct in_addr {
u_int32_t s_addr; /* address in network byte order */
};

struct sockaddr {
ushort sa_family;
char sa_data[14];
};

NAME

netdevice - 底层访问 Linux 网络设备.

总览 (SYNOPSIS)

#include <sys/ioctl.h >
#include <net/if.h >

描述 (DESCRIPTION)

本手册 描述 用于 配置 网络设备 的 套接字(socket) 接口.

Linux 支持 一些 配置 网络设备 的 标准 ioctl. 他们 用于 任意的 套接字 描述符, 而 无须 了解 其 类型 或 系列. 他们 传递 一个 ifreq 结构:

struct ifreq
{
char ifr_name[IFNAMSIZ]; /* Interface name */
union {
struct sockaddr ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_netmask;
struct sockaddr ifr_hwaddr;
short ifr_flags;
int ifr_ifindex;
int ifr_metric;
int ifr_mtu;
struct ifmap ifr_map;
char ifr_slave[IFNAMSIZ];
char ifr_newname[IFNAMSIZ];
char * ifr_data;
};
}

struct ifconf
{
int ifc_len; /* size of buffer */
union {
char * ifc_buf; /* buffer address */
struct ifreq *ifc_req; /* array of structures */
};
};

一般说来, ioctl 通过 把 ifr_name 设置为 接口 的 名字 来 指定 将要 操作 的 设备. 结构的 其他成员 可以 分享 内存.

IOCTLS

如果 某个 ioctl 标记为 特权操作, 那么 操作时 需要 有效uid 为 0, 或者 拥有 CAP_NET_ADMIN 能力. 否则 将 返回 EPERM .

 

SIOCGIFNAME
给定 ifr_ifindex, 返回 ifr_name 中 的 接口名字. 这是 唯一 返回 ifr_name 内容 的 ioctl.
SIOCGIFINDEX
把 接口 的 索引 存入 ifr_ifindex .
SIOCGIFFLAGS , SIOCSIFFLAGS
读取 或 设置 设备的 活动标志字. ifr_flags 包含 下列值 的 屏蔽位:

 

设备标志
IFF_UP接口正在运行.
IFF_BROADCAST有效的广播地址集.
IFF_DEBUG内部调试标志.
IFF_LOOPBACK这是自环接口.
IFF_POINTOPOINT这是点到点的链路接口.
IFF_RUNNING资源已分配.
IFF_NOARP无arp协议, 没有设置第二层目的地址.
IFF_PROMISC接口为杂凑(promiscuous)模式.
IFF_NOTRAILERS避免使用trailer .
IFF_ALLMULTI接收所有组播(multicast)报文.
IFF_MASTER主负载平衡群(bundle).
IFF_SLAVE从负载平衡群(bundle).
IFF_MULTICAST支持组播(multicast).
IFF_PORTSEL可以通过ifmap选择介质(media)类型.
IFF_AUTOMEDIA自动选择介质.
IFF_DYNAMIC接口关闭时丢弃地址.

设置 活动标志字 是 特权操作, 但是 任何进程 都可以 读取 标志字.

SIOCGIFMETRIC , SIOCSIFMETRIC
使用 ifr_metric 读取 或 设置 设备的 metric 值. 该功能 目前 还没有 实现. 读取操作 使 ifr_metric 置 0, 而 设置操作 则 返回 EOPNOTSUPP.
SIOCGIFMTU , SIOCSIFMTU
使用 ifr_mtu 读取 或 设置 设备的 MTU(最大传输单元). 设置 MTU 是 特权操作. 过小的 MTU 可能 导致 内核 崩溃.
SIOCGIFHWADDR , SIOCSIFHWADDR
使用 ifr_hwaddr 读取 或 设置 设备的 硬件地址. 设置 硬件地址 是 特权操作.
SIOCSIFHWBROADCAST
使用 ifr_hwaddr 读取 或 设置 设备的 硬件广播地址. 这是个 特权操作.
SIOCGIFMAP , SIOCSIFMAP
使用 ifr_map 读取 或 设置 接口的 硬件参数. 设置 这个参数 是 特权操作.
struct ifmap 
{
unsigned long mem_start;
unsigned long mem_end;
unsigned short base_addr;
unsigned char irq;
unsigned char dma;
unsigned char port;
};

对 ifmap 结构 的 解释 取决于 设备驱动程序 和 体系结构.

SIOCADDMULTI , SIOCDELMULTI
使用 ifr_hwaddr 在 设备的 链路层 组播过滤器 (multicase filter) 中 添加 或 删除 地址. 这些是 特权操作. 参看 packet (7) .
SIOCGIFTXQLEN , SIOCSIFTXQLEN
使用 ifr_qlen 读取 或 设置 设备的 传输队列长度. 设置 传输队列长度 是 特权操作.
SIOCSIFNAME
ifr_ifindex 中 指定的 接口名字 改成 ifr_newname . 这是个 特权操作.
SIOCGIFCONF
返回 接口地址(传输层) 列表. 出于 兼容性, 目前 只代表 AF_INET 地址. 用户 传送 一个 ifconf 结构 作为 ioctl 的 参数. 其中 ifc_req 包含 一个 指针 指向 ifreq 结构数组, 他的 长度 以字节 为单位 存放在 ifc_len 中. 内核 用 所有 当前的 L3(第三层?) 接口地址 填充 ifreqs, 这些 接口 正在 运行: ifr_name 存放 接口名字 (eth0:1等), ifr_addr 存放 地址. 内核 在 ifc_len 中 返回 实际长度; 如果 他 等于 初始长度, 表示 溢出了, 用户 应该 换一个 大些的 缓冲区 重试 一下. 没有 发生 错误时 ioctl 返回 0, 否则 返回 -1, 溢出 不算 错误.

 

 

 

大多数 协议 使用 自己的 ioctl 配置 协议 特定的 接口 操作. 具体 情况参看 协议的 帮助手册. 要配置 IP 地址 可以 参看 ip (7).

另外, 某些 设备 有 专用的 ioctl, 这里 不做 叙述.

### 如何通过Cheery Studio调用DeepSeek-R1私有模型API 要在Cheery Studio中成功调用DeepSeek-R1私有模型API,需按照以下方法完成配置: #### 1. 获取必要的API信息 在使用Cheery Studio之前,需要先从供应商处获取API密钥和请求地址。这些信息通常可以通过注册账户并申请访问权限获得。对于DeepSeek-R1模型,其默认的API端点可能如下所示[^2]: ```plaintext API 地址: https://api.lkeap.cloud.tencent.com/v1/chat/completions ``` 如果使用的是自定义部署环境,则应替换为实际的服务提供商给出的具体URL。 #### 2. 配置Cheery Studio中的硅基流动服务 进入Cheery Studio应用后,找到设置选项,并选择外部API集成工具——例如“硅基流动”。在此界面内填入所获知的信息[^3]: - **API 密钥**: 将先前复制得到的有效密钥粘贴于此字段。 - **API 地址**: 输入上述提到或者由服务商指定的确切路径。 完成后保存更改即视为初步设定完毕。 #### 3. Cherry Studio具体操作指南 为了进一步细化说明如何利用Cheery Studio来实现对DeepSeek系列大语言模型的支持,这里提供更详细的步骤描述[^4]: - 打开应用程序至主菜单页面; - 进入高级功能区寻找第三方插件管理入口; - 添加新的数据源链接指向目标LLM服务器实例位置; - 根据提示逐步录入必要参数直至确认无误提交为止。 当遇到诸如`连接Custom Provider失败`这样的报错消息时,除了仔细核对自己输入的数据之外,还应注意保持客户端软件处于最新稳定发行版本之上(如建议升级到非特定问题频发版次以外的新近更新),从而减少因程序缺陷引发的技术障碍可能性。 以下是基于Python脚本模拟向此类RESTful风格Web Service发起POST请求的一个简单例子供参考学习之用: ```python import requests import json url = "https://api.lkeap.cloud.tencent.com/v1/chat/completions" headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_API_KEY' } data = { "model": "deepseek-r1", "messages": [{"role": "user", "content": "你好"}], "max_tokens": 50, } response = requests.post(url, headers=headers, data=json.dumps(data)) print(response.json()) ``` 注意:以上代码仅为演示目的编写,请确保替换其中占位符部分为自己真实的凭据资料后再运行测试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值