[ English | 简体中文 ]
网络工具库(netlib)API
openvela 网络工具库(netlib_*)提供了一系列简化 BSD 套接字操作的辅助函数,涵盖 IPv4/IPv6 地址管理、路由、ARP、MAC 地址、MTU、防火墙(iptables/ip6tables)、网络连通性检查等。
头文件:#include <netutils/netlib.h>
openvela 实现说明
- 定位:在 BSD socket API 基础上的便利封装,隐藏
ioctl+SIOCGIF*等底层细节 - 覆盖范围:
- IPv4/IPv6 地址、网关、子网掩码、DNS、路由
- MAC 地址读写、接口上/下、MTU 设置
- VLAN 管理、ARP 表操作
- iptables/ip6tables 操作
- 网络连通性检查(
ping/ HTTP / 接口可达性) - URL 解析工具
- 配置依赖:需启用
CONFIG_NETUTILS_NETLIB,部分子接口另需对应模块配置(如CONFIG_NET_ARP、CONFIG_NET_IPv6等) - 错误处理:多数接口成功时返回
0或OK,失败时返回ERROR(-1)并设置errno
网络工具库
头文件:#include <netutils/netlib.h>
netlib 提供网络配置工具函数,包括接口地址设置、路由管理、ARP 操作等。
IPv4 地址管理
netlib_get_ipv4addr
int netlib_get_ipv4addr(const char *ifname, struct in_addr *addr);
参数:
ifname网络接口名称ipaddr用于存储 IP 地址
netlib_set_ipv4addr
int netlib_set_ipv4addr(const char *ifname, const struct in_addr *addr);
参数:
ifname网络接口名称ipaddr要设置的地址
netlib_set_dripv4addr
int netlib_set_dripv4addr(const char *ifname, const struct in_addr *addr);
参数:
ifname网络接口名称ipaddr要设置的地址
netlib_get_dripv4addr
int netlib_get_dripv4addr(const char *ifname, struct in_addr *addr);
参数:
ifname网络接口名称ipaddr用于存储默认路由地址
netlib_set_ipv4netmask
int netlib_set_ipv4netmask(const char *ifname, const struct in_addr *addr);
参数:
ifname网络接口名称ipaddr要设置的地址
netlib_get_ipv4netmask
int netlib_get_ipv4netmask(const char *ifname, struct in_addr *addr);
参数:
ifname网络接口名称ipaddr用于存储子网掩码
netlib_ipv4adaptor
int netlib_ipv4adaptor(in_addr_t destipaddr, in_addr_t *srcipaddr);
参数:
destipaddr目标 IPv4 地址srcipaddr用于存储适配器地址
netlib_read_ipv4route
ssize_t netlib_read_ipv4route(FILE *stream, struct netlib_ipv4_route_s *route);
参数:
fdprocfs IPv4 路由表的文件描述符route用于存储下一条路由表项
netlib_ipv4router
int netlib_ipv4router(const struct in_addr *destipaddr, struct in_addr *router);
参数:
destipaddr目标 IP 地址。router- 用于存储网关的 IP 地址,即
netlib_obtain_ipv4addr
int netlib_obtain_ipv4addr(const char *ifname);
参数:
ifname网络接口名称
netlib_set_ipv4dnsaddr
int netlib_set_ipv4dnsaddr(const struct in_addr *inaddr);
参数:
inaddr要设置的地址
IPv6 地址管理
netlib_add_ipv6addr
int netlib_add_ipv6addr(const char *ifname, const struct in6_addr *addr, uint8_t preflen);
参数:
ifname网络接口名称ipaddr地址 to addpreflen前缀长度(位)。
netlib_del_ipv6addr
int netlib_del_ipv6addr(const char *ifname, const struct in6_addr *addr, uint8_t preflen);
参数:
ifname网络接口名称ipaddr地址 to deletepreflen前缀长度(位)。
netlib_get_ipv6addr
int netlib_get_ipv6addr(const char *ifname, struct in6_addr *addr);
参数:
ifname网络接口名称ipaddr用于存储 IP 地址
netlib_set_ipv6addr
int netlib_set_ipv6addr(const char *ifname, const struct in6_addr *addr);
参数:
ifname网络接口名称ipaddr要设置的地址
netlib_set_dripv6addr
int netlib_set_dripv6addr(const char *ifname, const struct in6_addr *addr);
参数:
ifname网络接口名称ipaddr要设置的地址
netlib_set_ipv6netmask
int netlib_set_ipv6netmask(const char *ifname, const struct in6_addr *addr);
参数:
ifname网络接口名称ipaddr要设置的地址
netlib_ipv6adaptor
int netlib_ipv6adaptor(const struct in6_addr *destipaddr, struct in6_addr *srcipaddr);
参数:
destipaddr目标 IP 地址。srcipaddr- 用于存储适配器地址
netlib_ipv6netmask2prefix
uint8_t netlib_ipv6netmask2prefix(const uint16_t *mask);
参数:
mask子网掩码。
netlib_prefix2ipv6netmask
void netlib_prefix2ipv6netmask(uint8_t preflen, struct in6_addr *netmask);
参数:
preflen前缀长度(位)。netmask用于存储子网掩码.
netlib_read_ipv6route
ssize_t netlib_read_ipv6route(FILE *stream, struct netlib_ipv6_route_s *route);
参数:
fd路由表项。route用于存储下一条路由表项
netlib_ipv6router
int netlib_ipv6router(const struct in6_addr *destipaddr, struct in6_addr *router);
参数:
destipaddr目标 IP 地址。router- 用于存储网关的 IP 地址,即
netlib_obtain_ipv6addr
int netlib_obtain_ipv6addr(const char *ifname);
参数:
ifname网络接口名称。
netlib_set_ipv6dnsaddr
int netlib_set_ipv6dnsaddr(const struct in6_addr *inaddr);
参数:
inaddr要设置的地址
接口管理
netlib_setmacaddr
int netlib_setmacaddr(const char *ifname, const uint8_t *macaddr);
参数:
ifname网络接口名称macaddrMAC 地址。
netlib_getmacaddr
int netlib_getmacaddr(const char *ifname, uint8_t *macaddr);
参数:
ifname网络接口名称macaddr用于存储 MAC 地址
netlib_getessid
int netlib_getessid(const char *ifname, char *essid, size_t idlen);
参数:
ifname网络接口名称essid用于存储结果。idlenESSID 缓冲区大小。
netlib_setessid
int netlib_setessid(const char *ifname, const char *essid);
参数:
ifname网络接口名称essidESSID(网络名称)。
netlib_getifstatus
int netlib_getifstatus(const char *ifname, uint8_t *flags);
参数:
ifname网络接口名称flags接口标志。
netlib_ifup
int netlib_ifup(const char *ifname);
参数:
ifname网络接口名称
netlib_ifdown
int netlib_ifdown(const char *ifname);
参数:
ifname网络接口名称
netlib_set_mtu
int netlib_set_mtu(const char *ifname, int mtu);
参数:
ifname网络接口名称mtu最大传输单元(MTU)。
返回值:
:
netlib_getifstatistics
int netlib_getifstatistics(const char *ifname, struct netdev_statistics_s *stat);
参数:
ifname网络接口名称。stat用于存储设备统计信息。
netlib_check_ifconflict
int netlib_check_ifconflict(const char *ifname);
参数:
ifname网络接口名称
路由管理
netlib_get_route
ssize_t netlib_get_route(struct rtentry *rtelist, unsigned int nentries, sa_family_t family);
参数:
rtelist用于存储设备列表。nentries数组容量(条目数)。family- 地址族。 See AF_* definitions in
ARP 管理
netlib_del_arpmapping
int netlib_del_arpmapping(const struct sockaddr_in *inaddr, const char *ifname);
参数:
inaddrIPv4 地址。ifname网络接口名称。
netlib_get_arpmapping
int netlib_get_arpmapping(const struct sockaddr_in *inaddr, uint8_t *macaddr, const char *ifname);
参数:
inaddrIPv4 地址。macaddr用于存储对应的以太网 MAC 地址ifname网络接口名称。
netlib_set_arpmapping
int netlib_set_arpmapping(const struct sockaddr_in *inaddr, const uint8_t *macaddr, const char *ifname);
参数:
inaddrIPv4 地址。macaddrMAC 地址。ifname网络接口名称。
netlib_get_arptable
ssize_t netlib_get_arptable(struct arpreq *arptab, unsigned int nentries);
参数:
arptab用于存储 ARP 表副本nentries数组容量(条目数)。
netlib_ifarp
int netlib_ifarp(const char *ifname);
参数:
ifname网络接口名称
netlib_ifnoarp
int netlib_ifnoarp(const char *ifname);
参数:
ifname网络接口名称
DNS 管理
netlib_clear_dnsaddr
void netlib_clear_dnsaddr(void);
VLAN 管理
netlib_add_vlan
int netlib_add_vlan(const char *ifname, int vlanid, int prio);
参数:
ifname网络接口名称。vlanidVLAN 标识符。prio默认 VLAN 优先级(PCP)。
netlib_del_vlan
int netlib_del_vlan(const char *vlanif);
iptables
netlib_ipt_commit
int netlib_ipt_commit(const struct ipt_replace *repl);
参数:
repl要提交的配置。
netlib_ipt_flush
int netlib_ipt_flush(const char *table, enum nf_inet_hooks hook);
参数:
table表名。hook钩子点。
netlib_ipt_policy
int netlib_ipt_policy(const char *table, enum nf_inet_hooks hook, int verdict);
参数:
table策略。hook钩子点。verdict判定值。
netlib_ipt_append
int netlib_ipt_append(struct ipt_replace **repl, const struct ipt_entry *entry, enum nf_inet_hooks hook);
参数:
repl要提交的配置。entry要追加的规则条目。hook钩子点。
netlib_ipt_insert
int netlib_ipt_insert(struct ipt_replace **repl, const struct ipt_entry *entry, enum nf_inet_hooks hook, int rulenum);
参数:
repl要提交的配置。entry要插入的规则条目。hook钩子点。rulenum规则编号。
netlib_ipt_delete
int netlib_ipt_delete(struct ipt_replace *repl, const struct ipt_entry *entry, enum nf_inet_hooks hook, int rulenum);
参数:
repl要提交的配置。entry要删除的规则条目。hook钩子点。rulenum规则编号。
netlib_ipt_fillifname
int netlib_ipt_fillifname(struct ipt_entry *entry, const char *inifname, const char *outifname);
参数:
entry要填充的规则条目。inifname输入设备名称,NULL表示不变。outifname输出设备名称,NULL表示不变。
netlib_ip6t_commit
int netlib_ip6t_commit(const struct ip6t_replace *repl);
参数:
repl要提交的配置。
netlib_ip6t_flush
int netlib_ip6t_flush(const char *table, enum nf_inet_hooks hook);
参数:
table表名。hook钩子点。
netlib_ip6t_policy
int netlib_ip6t_policy(const char *table, enum nf_inet_hooks hook, int verdict);
参数:
table策略。hook钩子点。verdict判定值。
netlib_ip6t_append
int netlib_ip6t_append(struct ip6t_replace **repl, const struct ip6t_entry *entry, enum nf_inet_hooks hook);
参数:
repl要提交的配置。entry要追加的规则条目。hook钩子点。
netlib_ip6t_insert
int netlib_ip6t_insert(struct ip6t_replace **repl, const struct ip6t_entry *entry, enum nf_inet_hooks hook, int rulenum);
参数:
repl要提交的配置。entry要插入的规则条目。hook钩子点。rulenum规则编号。
netlib_ip6t_delete
int netlib_ip6t_delete(struct ip6t_replace *repl, const struct ip6t_entry *entry, enum nf_inet_hooks hook, int rulenum);
参数:
repl要提交的配置。entry要删除的规则条目。hook钩子点。rulenum规则编号。
netlib_ip6t_fillifname
int netlib_ip6t_fillifname(struct ip6t_entry *entry, const char *inifname, const char *outifname);
参数:
entry要填充的规则条目。inifname输入设备名称,NULL表示不变。outifname输出设备名称,NULL表示不变。
连接检测
netlib_check_ipconnectivity
int netlib_check_ipconnectivity(const char *ip, int timeout, int retry);
参数:
ip要检查的 IPv4 地址。timeout超时时间。retry重试次数。
netlib_check_ifconnectivity
int netlib_check_ifconnectivity(const char *ifname, int timeout, int retry);
参数:
ifname网络接口名称timeout超时时间。retry重试次数。
URL 解析
netlib_parsehttpurl
int netlib_parsehttpurl(const char *url, uint16_t *port, char *hostname, int hostlen, char *filename, int namelen);
参数:
urlHTTP 相关参数。port指向uint16_t,用于存储解析出的端口号。hostname用于存储结果的缓冲区。hostlen缓冲区大小。filename用于存储结果的缓冲区。namelen缓冲区大小。
netlib_parseurl
int netlib_parseurl(const char *str, struct url_s *url);
netlib_check_httpconnectivity
int netlib_check_httpconnectivity(const char *host, const char *getmsg, int port, int expect_code);
参数:
host远程主机地址。getmsgHTTP 相关参数。port端口号。expect_codeHTTP 相关参数。
其他
netlib_get_devices
ssize_t netlib_get_devices(struct netlib_device_s *devlist, unsigned int nentries, sa_family_t family);
参数:
devlist用于存储设备列表。nentries数组容量(条目数)。family地址族。 See AF_* definitions in
netlib_seteaddr
int netlib_seteaddr(const char *ifname, const uint8_t *eaddr);
参数:
ifname网络接口名称eaddr新地址。
netlib_getpanid
int netlib_getpanid(const char *ifname, uint8_t *panid);
参数:
ifname网络接口名称panid用于存储当前 PAN ID
netlib_getproperties
int netlib_getproperties(const char *ifname, struct pktradio_properties_s *properties);
参数:
ifname网络接口名称nodeadd用于存储节点地址。
netlib_setnodeaddr
int netlib_setnodeaddr(const char *ifname, const struct pktradio_addr_s *nodeaddr);
参数:
ifname网络接口名称nodeadd新地址。
netlib_getnodnodeaddr
int netlib_getnodnodeaddr(const char *ifname, struct pktradio_addr_s *nodeaddr);
参数:
ifname网络接口名称nodeadd用于存储节点地址。
netlib_get_nbtable
ssize_t netlib_get_nbtable(struct neighbor_entry_s *nbtab, unsigned int nentries);
参数:
nbtab用于存储邻居表副本nentries数组容量(条目数)。
netlib_icmpv6_autoconfiguration
int netlib_icmpv6_autoconfiguration(const char *ifname);
参数:
ifname网络接口名称
netlib_parse_conntrack
int netlib_parse_conntrack(const struct nlmsghdr *nlh, size_t len, struct netlib_conntrack_s *ct);
参数:
nlh要解析的 netlink 消息。ct连接跟踪条目。
netlib_get_conntrack
int netlib_get_conntrack(sa_family_t family, netlib_conntrack_cb_t cb);
参数:
family地址族,用于过滤 conntrack 表项。cb连接跟踪条目。
netlib_listenon
int netlib_listenon(uint16_t portno);
参数:
portno端口号。
netlib_server
void netlib_server(uint16_t portno, pthread_startroutine_t handler, int stacksize);
参数:
portno端口号。handler任务入口函数。stacksize栈大小。
netlib_get_iobinfo
int netlib_get_iobinfo(struct iob_stats_s *iob);
参数:
iobIOB 信息结构体。
netlib_ipv4addrconv
bool netlib_ipv4addrconv(const char *addrstr, uint8_t *addr);
将 IPv4 地址字符串(如 "192.168.1.1")转换为 4 字节二进制数组。
参数:
addrstrIPv4 地址字符串。addr输出缓冲区(4 字节)。
返回值:
转换成功返回 true,格式非法时返回 false。
netlib_ethaddrconv
bool netlib_ethaddrconv(const char *hwstr, uint8_t *hw);
将以太网 MAC 地址字符串(如 "aa:bb:cc:dd:ee:ff")转换为 6 字节二进制数组。
参数:
hwstrMAC 地址字符串。hw输出缓冲区(6 字节)。
返回值:
转换成功返回 true,格式非法时返回 false。
netlib_saddrconv
bool netlib_saddrconv(const char *hwstr, uint8_t *hw);
将 IEEE 802.15.4 短地址(2 字节)字符串转换为二进制形式。
参数:
hwstr地址字符串。hw输出缓冲区(2 字节)。
返回值:
转换成功返回 true,格式非法时返回 false。
netlib_eaddrconv
bool netlib_eaddrconv(const char *hwstr, uint8_t *hw);
将 IEEE 802.15.4 扩展地址(8 字节)字符串转换为二进制形式。
参数:
hwstr地址字符串。hw输出缓冲区(8 字节)。
返回值:
转换成功返回 true,格式非法时返回 false。
netlib_nodeaddrconv
bool netlib_nodeaddrconv(const char *addrstr,
struct pktradio_addr_s *nodeaddr);
将 pktradio 节点地址字符串转换为 pktradio_addr_s 结构体。
参数:
addrstr节点地址字符串。nodeaddr输出结构体指针。
返回值:
转换成功返回 true,格式非法时返回 false。