RTA_OK(rta, attrlen)
возвращает значение "истина" в случае, если
rta
указывает на правильный атрибут маршрутизации;
attrlen
- рабочая длина буфера атрибутов.
Если возвращенное значение ложно, то в сообщении больше нет атрибутов,
даже если
attrlen
не равно нулю.
RTA_DATA(rta)
возвращает указатель на начало данных атрибута.
RTA_PAYLOAD(rta)
возвращает длину данных атрибута.
RTA_NEXT(rta, attrlen)
считывает следующий за
rta
атрибут.
Вызов этого макроса обновит
attrlen.
Для проверки правильности указателя используйте
RTA_OK.
RTA_LENGTH(len)
возвращает длину размером
len
байтов данных (плюс заголовок).
RTA_SPACE(len)
возвращает объем памяти, требуемый для сообщения и равный
len
байтам.
struct { struct nlmsghdr nh; struct ifinfomsg if; char attrbuf[512]; } req; struct rtattr *rta; unsigned int mtu = 1000; int rtnetlink_sk = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE); memset(&req, 0, sizeof(req)); req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)); req.nh.nlmsg_flags = NLM_F_REQUEST; req.nh.nlmsg_type = RTML_NEWLINK; req.if.ifi_family = AF_UNSPEC; req.if.ifi_index = INTERFACE_INDEX; req.if.ifi_change = 0xffffffff; /* ??? */ rta = (struct rtattr *)(((char *) &req) + NLMSG_ALIGN(n->nlmsg_len)); rta->rta_type = IFLA_MTU; rta->rta_len = sizeof(unsigned int); req.n.nlmsg_len = NLMSG_ALIGN(req.n.nlmsg_len) + RTA_LENGTH(sizeof(mtu)); memcpy(RTA_DATA(rta), &mtu, sizeof (mtu)); send(rtnetlink_sk, &req, req.n.nlmsg_len);
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |