当前位置: 技术问答>linux和unix
一段20行左右的C代码,设计到一些内核接口结构体和宏,大家帮我解释一下好么?
来源: 互联网 发布时间:2015-11-30
本文导语: 主要是设计到内核中的一些结构体,要传递给上层,对这部分不是太了解,大家帮我看看: static int process_inet6_iface(struct nlmsghdr *n, struct ifinfomsg *ifi, struct rtattr **rta_tb) { if (rta_tb[IFLA_AD...
主要是设计到内核中的一些结构体,要传递给上层,对这部分不是太了解,大家帮我看看:
static int process_inet6_iface(struct nlmsghdr *n,
struct ifinfomsg *ifi,
struct rtattr **rta_tb)
{
if (rta_tb[IFLA_ADDRESS] != NULL) {
int hwalen = nd_get_l2addr_len(ifi->ifi_type);
if (rta_tb[IFLA_ADDRESS]->rta_len != RTA_LENGTH(hwalen)) {
syslog(LOG_WARNING,
"Interface %d (%s):type %d unsupported",
ifi->ifi_index,
(char *) RTA_DATA(rta_tb[IFLA_IFNAME]),
ifi->ifi_type);
return -EINVAL;
}
}
if (n->nlmsg_type == RTM_NEWLINK) {
process_new_inet6_iface(ifi, rta_tb);
} else if (n->nlmsg_type == RTM_DELLINK) {
process_del_inet6_iface(ifi, rta_tb);
}
return 0;
}
其中除了nd_get_l2addr_len(),process_new_inet6_iface(),process_del_inet6_iface()是自己定义的函数之外,其它的貌似都和LINUX内核函数有关,大家帮我解释一下。越详细越好,50分求助!!
static int process_inet6_iface(struct nlmsghdr *n,
struct ifinfomsg *ifi,
struct rtattr **rta_tb)
{
if (rta_tb[IFLA_ADDRESS] != NULL) {
int hwalen = nd_get_l2addr_len(ifi->ifi_type);
if (rta_tb[IFLA_ADDRESS]->rta_len != RTA_LENGTH(hwalen)) {
syslog(LOG_WARNING,
"Interface %d (%s):type %d unsupported",
ifi->ifi_index,
(char *) RTA_DATA(rta_tb[IFLA_IFNAME]),
ifi->ifi_type);
return -EINVAL;
}
}
if (n->nlmsg_type == RTM_NEWLINK) {
process_new_inet6_iface(ifi, rta_tb);
} else if (n->nlmsg_type == RTM_DELLINK) {
process_del_inet6_iface(ifi, rta_tb);
}
return 0;
}
其中除了nd_get_l2addr_len(),process_new_inet6_iface(),process_del_inet6_iface()是自己定义的函数之外,其它的貌似都和LINUX内核函数有关,大家帮我解释一下。越详细越好,50分求助!!
|
太多自己定义的东西了,
|
太乱了!