[CRIU] [PATCH 1/4] protobuf: move enum nd_type inside net_device_entry message

Pavel Emelyanov xemul at parallels.com
Tue Sep 30 01:20:42 PDT 2014


On 09/30/2014 12:13 PM, Ruslan Kuprieiev wrote:
> On 30.09.2014 11:01, Pavel Emelyanov wrote:
>> On 09/19/2014 05:53 PM, Ruslan Kuprieiev wrote:
>>> This is needed because of protoc compiler, that not allows us to have
>>> few global enums with same members because of some strange C++ enum
>>> rules.
>> I don't get this explanation. We have much more enum-s than just
>> this. Why is this one special?
> 
> We have two global enums with the member TUN. The first one is in 
> fdinfo.proto and the
> second one is in netdev.proto. protoc complains about having TUN in 2 
> global enums because
> of the enum rules for C++(even though we're compiling .proto files for 
> python).

:( Can we make a quick research? What if we rename the fdinfo's
TUN into e.g. TUNF. Would images generated by "old" criu be
decoded by the "new" one? I.e. -- does the actual name matters
in the image?

>>> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
>>> ---
>>>   net.c                 | 22 +++++++++++-----------
>>>   protobuf/netdev.proto | 26 +++++++++++++-------------
>>>   2 files changed, 24 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/net.c b/net.c
>>> index 543f24c..d53907d 100644
>>> --- a/net.c
>>> +++ b/net.c
>>> @@ -69,7 +69,7 @@ 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)) {
>>> +	if (tb[IFLA_ADDRESS] && (type != NET_DEVICE_ENTRY__ND_TYPE__LOOPBACK)) {
>>>   		netdev.has_address = true;
>>>   		netdev.address.data = RTA_DATA(tb[IFLA_ADDRESS]);
>>>   		netdev.address.len = RTA_PAYLOAD(tb[IFLA_ADDRESS]);
>>> @@ -109,7 +109,7 @@ static int dump_unknown_device(struct ifinfomsg *ifi, char *kind,
>>>   
>>>   	ret = run_plugins(DUMP_EXT_LINK, ifi->ifi_index, ifi->ifi_type, kind);
>>>   	if (ret == 0)
>>> -		return dump_one_netdev(ND_TYPE__EXTLINK, ifi, tb, fds, NULL);
>>> +		return dump_one_netdev(NET_DEVICE_ENTRY__ND_TYPE__EXTLINK, ifi, tb, fds, NULL);
>>>   
>>>   	if (ret == -ENOTSUP)
>>>   		pr_err("Unsupported link %d (type %d kind %s)\n",
>>> @@ -129,9 +129,9 @@ static int dump_one_ethernet(struct ifinfomsg *ifi, char *kind,
>>>   		 * Sigh... we have to assume, that the veth device is a
>>>   		 * connection to the outer world and just dump this end :(
>>>   		 */
>>> -		return dump_one_netdev(ND_TYPE__VETH, ifi, tb, fds, NULL);
>>> +		return dump_one_netdev(NET_DEVICE_ENTRY__ND_TYPE__VETH, ifi, tb, fds, NULL);
>>>   	if (!strcmp(kind, "tun"))
>>> -		return dump_one_netdev(ND_TYPE__TUN, ifi, tb, fds, dump_tun_link);
>>> +		return dump_one_netdev(NET_DEVICE_ENTRY__ND_TYPE__TUN, ifi, tb, fds, dump_tun_link);
>>>   
>>>   	return dump_unknown_device(ifi, kind, tb, fds);
>>>   }
>>> @@ -140,7 +140,7 @@ static int dump_one_gendev(struct ifinfomsg *ifi, char *kind,
>>>   		struct rtattr **tb, struct cr_fdset *fds)
>>>   {
>>>   	if (!strcmp(kind, "tun"))
>>> -		return dump_one_netdev(ND_TYPE__TUN, ifi, tb, fds, dump_tun_link);
>>> +		return dump_one_netdev(NET_DEVICE_ENTRY__ND_TYPE__TUN, ifi, tb, fds, dump_tun_link);
>>>   
>>>   	return dump_unknown_device(ifi, kind, tb, fds);
>>>   }
>>> @@ -154,7 +154,7 @@ static int dump_one_voiddev(struct ifinfomsg *ifi, char *kind,
>>>   		 * OpenVZ's venet, save general parameters of
>>>   		 * it as external link.
>>>   		 */
>>> -		return dump_one_netdev(ND_TYPE__EXTLINK, ifi, tb, fds, NULL);
>>> +		return dump_one_netdev(NET_DEVICE_ENTRY__ND_TYPE__EXTLINK, ifi, tb, fds, NULL);
>>>   
>>>   	return dump_unknown_device(ifi, kind, tb, fds);
>>>   }
>>> @@ -178,7 +178,7 @@ static int dump_one_link(struct nlmsghdr *hdr, void *arg)
>>>   	pr_info("\tLD: Got link %d, type %d\n", ifi->ifi_index, ifi->ifi_type);
>>>   
>>>   	if (ifi->ifi_type == ARPHRD_LOOPBACK)
>>> -		return dump_one_netdev(ND_TYPE__LOOPBACK, ifi, tb, fds, NULL);
>>> +		return dump_one_netdev(NET_DEVICE_ENTRY__ND_TYPE__LOOPBACK, ifi, tb, fds, NULL);
>>>   
>>>   	kind = link_kind(ifi, tb);
>>>   	if (!kind)
>>> @@ -352,12 +352,12 @@ static int restore_link(NetDeviceEntry *nde, int nlsk)
>>>   	pr_info("Restoring link %s type %d\n", nde->name, nde->type);
>>>   
>>>   	switch (nde->type) {
>>> -	case ND_TYPE__LOOPBACK: /* fallthrough */
>>> -	case ND_TYPE__EXTLINK:  /* see comment in protobuf/netdev.proto */
>>> +	case NET_DEVICE_ENTRY__ND_TYPE__LOOPBACK: /* fallthrough */
>>> +	case NET_DEVICE_ENTRY__ND_TYPE__EXTLINK:  /* see comment in protobuf/netdev.proto */
>>>   		return restore_link_parms(nde, nlsk);
>>> -	case ND_TYPE__VETH:
>>> +	case NET_DEVICE_ENTRY__ND_TYPE__VETH:
>>>   		return restore_one_link(nde, nlsk, veth_link_info);
>>> -	case ND_TYPE__TUN:
>>> +	case NET_DEVICE_ENTRY__ND_TYPE__TUN:
>>>   		return restore_one_tun(nde, nlsk);
>>>   	default:
>>>   		pr_err("Unsupported link type %d\n", nde->type);
>>> diff --git a/protobuf/netdev.proto b/protobuf/netdev.proto
>>> index 4fa23d3..b526ace 100644
>>> --- a/protobuf/netdev.proto
>>> +++ b/protobuf/netdev.proto
>>> @@ -1,19 +1,19 @@
>>>   import "tun.proto";
>>>   
>>> -enum nd_type {
>>> -	LOOPBACK	= 1;
>>> -	VETH		= 2;
>>> -	TUN		= 3;
>>> -	/*
>>> -	 * External link -- for those CRIU only dumps and restores
>>> -	 * link parameters such as flags, address, MTU, etc. The
>>> -	 * existence of the link on restore should be provided
>>> -	 * by the setup-namespaces script.
>>> -	 */
>>> -	EXTLINK		= 4;
>>> -}
>>> -
>>>   message net_device_entry {
>>> +	enum nd_type {
>>> +		LOOPBACK	= 1;
>>> +		VETH		= 2;
>>> +		TUN		= 3;
>>> +		/*
>>> +		 * External link -- for those CRIU only dumps and restores
>>> +		 * link parameters such as flags, address, MTU, etc. The
>>> +		 * existence of the link on restore should be provided
>>> +		 * by the setup-namespaces script.
>>> +		 */
>>> +		EXTLINK		= 4;
>>> +	}
>>> +
>>>   	required nd_type type		= 1;
>>>   	required uint32  ifindex	= 2;
>>>   	required uint32  mtu		= 3;
>>>
> 
> .
> 



More information about the CRIU mailing list