2 This file is part of systemd.
4 Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 #include "sd-netlink.h"
22 #include "netlink-internal.h"
23 #include "netlink-util.h"
25 int rtnl_set_link_name(sd_netlink
**rtnl
, int ifindex
, const char *name
) {
26 _cleanup_(sd_netlink_message_unrefp
) sd_netlink_message
*message
= NULL
;
34 r
= sd_netlink_open(rtnl
);
39 r
= sd_rtnl_message_new_link(*rtnl
, &message
, RTM_SETLINK
, ifindex
);
43 r
= sd_netlink_message_append_string(message
, IFLA_IFNAME
, name
);
47 r
= sd_netlink_call(*rtnl
, message
, 0, NULL
);
54 int rtnl_set_link_properties(sd_netlink
**rtnl
, int ifindex
, const char *alias
,
55 const struct ether_addr
*mac
, unsigned mtu
) {
56 _cleanup_(sd_netlink_message_unrefp
) sd_netlink_message
*message
= NULL
;
62 if (!alias
&& !mac
&& mtu
== 0)
66 r
= sd_netlink_open(rtnl
);
71 r
= sd_rtnl_message_new_link(*rtnl
, &message
, RTM_SETLINK
, ifindex
);
76 r
= sd_netlink_message_append_string(message
, IFLA_IFALIAS
, alias
);
82 r
= sd_netlink_message_append_ether_addr(message
, IFLA_ADDRESS
, mac
);
88 r
= sd_netlink_message_append_u32(message
, IFLA_MTU
, mtu
);
93 r
= sd_netlink_call(*rtnl
, message
, 0, NULL
);
100 int rtnl_message_new_synthetic_error(int error
, uint32_t serial
, sd_netlink_message
**ret
) {
101 struct nlmsgerr
*err
;
106 r
= message_new(NULL
, ret
, NLMSG_ERROR
);
110 (*ret
)->hdr
->nlmsg_seq
= serial
;
112 err
= NLMSG_DATA((*ret
)->hdr
);
119 bool rtnl_message_type_is_neigh(uint16_t type
) {
130 bool rtnl_message_type_is_route(uint16_t type
) {
141 bool rtnl_message_type_is_link(uint16_t type
) {
153 bool rtnl_message_type_is_addr(uint16_t type
) {
164 int rtnl_log_parse_error(int r
) {
165 return log_error_errno(r
, "Failed to parse netlink message: %m");
168 int rtnl_log_create_error(int r
) {
169 return log_error_errno(r
, "Failed to create netlink message: %m");