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

Ruslan Kuprieiev kupruser at gmail.com
Tue Sep 30 01:13:39 PDT 2014


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).

>> 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