Commit 022cfc30 authored by Pavel Emelyanov's avatar Pavel Emelyanov

net: Dump and restore netdev address

Tap-s and Veth-s can change one, need to keep it.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 22d61b88
......@@ -71,6 +71,15 @@ static int dump_one_netdev(int type, struct ifinfomsg *ifi,
netdev.flags = ifi->ifi_flags;
netdev.name = RTA_DATA(tb[IFLA_IFNAME]);
if (tb[IFLA_ADDRESS] && (type != ND_TYPE__LOOPBACK)) {
netdev.has_address = true;
netdev.address.data = RTA_DATA(tb[IFLA_ADDRESS]);
netdev.address.len = RTA_PAYLOAD(tb[IFLA_ADDRESS]);
pr_info("Found ll addr (%02x:../%d) for %s\n",
(int)netdev.address.data[0],
(int)netdev.address.len, netdev.name);
}
if (!dump)
dump = write_netdev_img;
......@@ -241,6 +250,13 @@ static int do_rtm_link_req(int msg_type, NetDeviceEntry *nde, int nlsk,
addattr_l(&req.h, sizeof(req), IFLA_IFNAME, nde->name, strlen(nde->name));
addattr_l(&req.h, sizeof(req), IFLA_MTU, &nde->mtu, sizeof(nde->mtu));
if (nde->has_address) {
pr_debug("Restore ll addr (%02x:../%d) for device\n",
(int)nde->address.data[0], (int)nde->address.len);
addattr_l(&req.h, sizeof(req), IFLA_ADDRESS,
nde->address.data, nde->address.len);
}
if (link_info) {
struct rtattr *linkinfo;
int ret;
......
......@@ -14,4 +14,6 @@ message net_device_entry {
required string name = 5;
optional tun_link_entry tun = 6;
optional bytes address = 7;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment