.\" -*- coding: UTF-8 -*- .\" This man page is Copyright (C) 1999 Andi Kleen . .\" .\" %%%LICENSE_START(VERBATIM_ONE_PARA) .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" %%%LICENSE_END .\" .\" $Id: rtnetlink.3,v 1.2 1999/05/18 10:35:10 freitag Exp $ .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH RTNETLINK 3 "1 ноября 2020 г." GNU "Руководство программиста Linux" .SH ИМЯ rtnetlink \- макросы для обработки сообщений rtnetlink .SH СИНТАКСИС \fB#include \fP .br \fB#include \fP .br \fB#include \fP .br \fB#include \fP .PP \fBrtnetlink_socket = socket(AF_NETLINK, int \fP\fIsocket_type\fP\fB, NETLINK_ROUTE);\fP .PP \fBint RTA_OK(struct rtattr *\fP\fIrta\fP\fB, int \fP\fIrtabuflen\fP\fB);\fP .PP \fBvoid *RTA_DATA(struct rtattr *\fP\fIrta\fP\fB);\fP .PP \fBunsigned int RTA_PAYLOAD(struct rtattr *\fP\fIrta\fP\fB);\fP .PP \fBstruct rtattr *RTA_NEXT(struct rtattr *\fP\fIrta\fP\fB, unsigned int \fP\fIrtabuflen\fP\fB);\fP .PP \fBunsigned int RTA_LENGTH(unsigned int \fP\fIlength\fP\fB);\fP .PP \fBunsigned int RTA_SPACE(unsigned int \fP\fIlength\fP\fB);\fP .SH ОПИСАНИЕ Все сообщения \fBrtnetlink\fP(7) состоят из заголовка сообщений \fBnetlink\fP(7) и дополнительных атрибутов. Атрибуты могут быть обработаны только описанными здесь макросами. .PP \fBRTA_OK(\fP\fIrta\fP\fB, \fP\fIattrlen\fP\fB)\fP возвращает истинное значение в случае, если \fIrta\fP указывает на правильный атрибут маршрутизации; \fIattrlen\fP — рабочая длина буфера атрибутов. Если возвращаемое значение ложно, то в сообщении больше нет атрибутов, даже если \fIattrlen\fP не равно нулю. .PP \fBRTA_DATA(\fP\fIrta\fP\fB)\fP возвращает указатель на начало данных атрибута. .PP \fBRTA_PAYLOAD(\fP\fIrta\fP\fB)\fP возвращает длину данных атрибута. .PP \fBRTA_NEXT(\fP\fIrta\fP\fB, \fP\fIattrlen\fP\fB)\fP считывает следующий за \fIrta\fP атрибут. Вызов этого макроса обновит \fIattrlen\fP. Для проверки правильности полученного указателя используйте \fBRTA_OK\fP. .PP \fBRTA_LENGTH(\fP\fIlen\fP\fB)\fP возвращает длину, которая требуется для \fIlen\fP байтов данных плюс заголовок. .PP \fBRTA_SPACE(\fP\fIlen\fP\fB)\fP возвращает количество места, которое требуется для сообщения с данными длиной \fIlen\fP байт. .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" Данные макросы являются нестандартными расширениями Linux. .SH ДЕФЕКТЫ Данная справочная страница не полна. .SH ПРИМЕРЫ .\" FIXME . ? would be better to use libnetlink in the EXAMPLE code here Создание сообщения rtnetlink для установки MTU устройства: .PP .in +4n .EX #include \&... struct { struct nlmsghdr nh; struct ifinfomsg if; char attrbuf[512]; } req; struct rtattr *rta; unsigned int mtu = 1000; int rtnetlink_sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE); memset(&req, 0, sizeof(req)); req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.if)); req.nh.nlmsg_flags = NLM_F_REQUEST; req.nh.nlmsg_type = RTM_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(req.nh.nlmsg_len)); rta\->rta_type = IFLA_MTU; rta\->rta_len = RTA_LENGTH(sizeof(mtu)); req.nh.nlmsg_len = NLMSG_ALIGN(req.nh.nlmsg_len) + RTA_LENGTH(sizeof(mtu)); memcpy(RTA_DATA(rta), &mtu, sizeof(mtu)); send(rtnetlink_sk, &req, req.nh.nlmsg_len, 0); .EE .in .SH "СМ. ТАКЖЕ" \fBnetlink\fP(3), \fBnetlink\fP(7), \fBrtnetlink\fP(7) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан aereiae , Azamat Hackimov , Dmitriy S. Seregin , Katrin Kutepova , Lockal , Yuri Kozlov , Баринов Владимир и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .