[CRIU] [PATCH 1/4] protobuf: move enum nd_type inside net_device_entry message
Ruslan Kuprieiev
kupruser at gmail.com
Tue Sep 30 01:47:46 PDT 2014
On 30.09.2014 11:20, Pavel Emelyanov wrote:
> 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?
Well, i've tried to change enum field name and restore old images and it
did work just fine. So, looks like the actual name doesn't matter.
Thanks =).
>>>> 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