mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-29 13:28:27 +00:00
net: add struct newlink_extras
We'll use this struct in the next patch to set some top level IFLA_ members that we need for restoring macvlan devices. travis-ci: success for series starting with [v10,01/11] net: pass the struct nlattrs to dump() functions Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com> Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
This commit is contained in:
parent
2b5d709c4d
commit
0a9f9e958d
41
criu/net.c
41
criu/net.c
@ -842,8 +842,17 @@ struct newlink_req {
|
|||||||
char buf[1024];
|
char buf[1024];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Optional extra things to be provided at the top level of the NEWLINK
|
||||||
|
* request.
|
||||||
|
*/
|
||||||
|
struct newlink_extras {
|
||||||
|
int netns_id; /* IFLA_NET_NS_ID */
|
||||||
|
int link; /* IFLA_LINK */
|
||||||
|
int target_netns; /* IFLA_NET_NS_FD */
|
||||||
|
};
|
||||||
|
|
||||||
static int populate_newlink_req(struct newlink_req *req, int msg_type, NetDeviceEntry *nde,
|
static int populate_newlink_req(struct newlink_req *req, int msg_type, NetDeviceEntry *nde,
|
||||||
int (*link_info)(NetDeviceEntry *, struct newlink_req *))
|
int (*link_info)(NetDeviceEntry *, struct newlink_req *), struct newlink_extras *extras)
|
||||||
{
|
{
|
||||||
memset(req, 0, sizeof(*req));
|
memset(req, 0, sizeof(*req));
|
||||||
|
|
||||||
@ -861,6 +870,17 @@ static int populate_newlink_req(struct newlink_req *req, int msg_type, NetDevice
|
|||||||
req->i.ifi_index = nde->ifindex;
|
req->i.ifi_index = nde->ifindex;
|
||||||
req->i.ifi_flags = nde->flags;
|
req->i.ifi_flags = nde->flags;
|
||||||
|
|
||||||
|
if (extras) {
|
||||||
|
if (extras->netns_id >= 0)
|
||||||
|
addattr_l(&req->h, sizeof(*req), IFLA_LINK_NETNSID, &extras->netns_id, sizeof(extras->netns_id));
|
||||||
|
|
||||||
|
if (extras->link >= 0)
|
||||||
|
addattr_l(&req->h, sizeof(*req), IFLA_LINK, &extras->link, sizeof(extras->link));
|
||||||
|
|
||||||
|
if (extras->target_netns >= 0)
|
||||||
|
addattr_l(&req->h, sizeof(*req), IFLA_NET_NS_FD, &extras->target_netns, sizeof(extras->target_netns));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
addattr_l(&req->h, sizeof(*req), IFLA_IFNAME, nde->name, strlen(nde->name));
|
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));
|
addattr_l(&req->h, sizeof(*req), IFLA_MTU, &nde->mtu, sizeof(nde->mtu));
|
||||||
@ -890,11 +910,12 @@ static int populate_newlink_req(struct newlink_req *req, int msg_type, NetDevice
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int do_rtm_link_req(int msg_type, NetDeviceEntry *nde, int nlsk,
|
static int do_rtm_link_req(int msg_type, NetDeviceEntry *nde, int nlsk,
|
||||||
int (*link_info)(NetDeviceEntry *, struct newlink_req *))
|
int (*link_info)(NetDeviceEntry *, struct newlink_req *),
|
||||||
|
struct newlink_extras *extras)
|
||||||
{
|
{
|
||||||
struct newlink_req req;
|
struct newlink_req req;
|
||||||
|
|
||||||
if (populate_newlink_req(&req, msg_type, nde, link_info) < 0)
|
if (populate_newlink_req(&req, msg_type, nde, link_info, extras) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return do_rtnl_req(nlsk, &req, req.h.nlmsg_len, restore_link_cb, NULL, NULL);
|
return do_rtnl_req(nlsk, &req, req.h.nlmsg_len, restore_link_cb, NULL, NULL);
|
||||||
@ -902,14 +923,15 @@ static int do_rtm_link_req(int msg_type, NetDeviceEntry *nde, int nlsk,
|
|||||||
|
|
||||||
int restore_link_parms(NetDeviceEntry *nde, int nlsk)
|
int restore_link_parms(NetDeviceEntry *nde, int nlsk)
|
||||||
{
|
{
|
||||||
return do_rtm_link_req(RTM_SETLINK, nde, nlsk, NULL);
|
return do_rtm_link_req(RTM_SETLINK, nde, nlsk, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int restore_one_link(NetDeviceEntry *nde, int nlsk,
|
static int restore_one_link(NetDeviceEntry *nde, int nlsk,
|
||||||
int (*link_info)(NetDeviceEntry *, struct newlink_req *))
|
int (*link_info)(NetDeviceEntry *, struct newlink_req *),
|
||||||
|
struct newlink_extras *extras)
|
||||||
{
|
{
|
||||||
pr_info("Restoring netdev %s idx %d\n", nde->name, nde->ifindex);
|
pr_info("Restoring netdev %s idx %d\n", nde->name, nde->ifindex);
|
||||||
return do_rtm_link_req(RTM_NEWLINK, nde, nlsk, link_info);
|
return do_rtm_link_req(RTM_NEWLINK, nde, nlsk, link_info, extras);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef VETH_INFO_MAX
|
#ifndef VETH_INFO_MAX
|
||||||
@ -1014,14 +1036,13 @@ static int restore_link(NetDeviceEntry *nde, int nlsk)
|
|||||||
case ND_TYPE__EXTLINK: /* see comment in images/netdev.proto */
|
case ND_TYPE__EXTLINK: /* see comment in images/netdev.proto */
|
||||||
return restore_link_parms(nde, nlsk);
|
return restore_link_parms(nde, nlsk);
|
||||||
case ND_TYPE__VENET:
|
case ND_TYPE__VENET:
|
||||||
return restore_one_link(nde, nlsk, venet_link_info);
|
return restore_one_link(nde, nlsk, venet_link_info, NULL);
|
||||||
case ND_TYPE__VETH:
|
case ND_TYPE__VETH:
|
||||||
return restore_one_link(nde, nlsk, veth_link_info);
|
return restore_one_link(nde, nlsk, veth_link_info, NULL);
|
||||||
case ND_TYPE__TUN:
|
case ND_TYPE__TUN:
|
||||||
return restore_one_tun(nde, nlsk);
|
return restore_one_tun(nde, nlsk);
|
||||||
case ND_TYPE__BRIDGE:
|
case ND_TYPE__BRIDGE:
|
||||||
return restore_one_link(nde, nlsk, bridge_link_info);
|
return restore_one_link(nde, nlsk, bridge_link_info, NULL);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
pr_err("Unsupported link type %d\n", nde->type);
|
pr_err("Unsupported link type %d\n", nde->type);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user