[CRIU] [PATCH v4 04/15] protobuf: add SysctlEntry for ipv4/ipv6 sysctl confs or some others

Pavel Emelyanov xemul at virtuozzo.com
Mon Apr 25 03:42:30 PDT 2016


On 04/22/2016 12:12 PM, Pavel Tikhomirov wrote:
> Sorry in advance, but I faced design problem here and not sure how to fix it.
> 
> For string sysctl with enum SysctlEntry.type is __CTL_STR but in sysctl_op req.type
> should already be CTL_STR(INET6_ADDRSTRLEN).
> 
> With current design req.type should be set in net_conf_op as there we do conf[i] ->
> req[ri] mapping, but in these place we already are general and can face ipv4/ipv6(or
> may be some other sysctls in future) so we can't hardcode type len here.

But you have to do req.type = CTL_STR(strlen(...)), not the hardcoded value.

> Two ways are possible: 1) leave int in protobuf to have length at hand from the
> begging  2) change proto of net_conf_op to receive type length somethere else(not in SysctlEntry).
> 
> 
> Best Regards, Tikhomirov Pavel.
> 
> 2016-04-21 19:04 GMT+03:00 Pavel Tikhomirov <ptikhomirov at virtuozzo.com <mailto:ptikhomirov at virtuozzo.com>>:
> 
>     int32 with boolean value in protobuf has the same size with bool,
>     many sysctls are boolean but we don't lose anything by storing them
>     in int32, so add only int32 and string fields
> 
>     will need string field for stable_secret ipv6 sysctl
> 
>     also such fromat allows us to easily handle non-present sysctls
>     we can check if we have it using has_*arg
> 
>     v3: rebase images/Makefile to criu-dev branch
>     v4: use enum for type
>     Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com <mailto:ptikhomirov at virtuozzo.com>>
>     ---
>      images/Makefile     |  1 +
>      images/netdev.proto |  6 ++++++
>      images/sysctl.proto | 11 +++++++++++
>      3 files changed, 18 insertions(+)
>      create mode 100644 images/sysctl.proto
> 
>     diff --git a/images/Makefile b/images/Makefile
>     index 52f516e..b5a2804 100644
>     --- a/images/Makefile
>     +++ b/images/Makefile
>     @@ -59,6 +59,7 @@ proto-obj-y   += seccomp.o
>      proto-obj-y    += binfmt-misc.o
>      proto-obj-y    += time.o
>      proto-obj-y    += autofs.o
>     +proto-obj-y    += sysctl.o
> 
>      CFLAGS         += -iquote $(obj)/
> 
>     diff --git a/images/netdev.proto b/images/netdev.proto
>     index dafa2bd..ce0daeb 100644
>     --- a/images/netdev.proto
>     +++ b/images/netdev.proto
>     @@ -1,5 +1,6 @@
>      import "opts.proto";
>      import "tun.proto";
>     +import "sysctl.proto";
> 
>      enum nd_type {
>             LOOPBACK        = 1;
>     @@ -31,9 +32,14 @@ message net_device_entry {
>             optional bytes address          = 7;
> 
>             repeated int32 conf             = 8;
>     +
>     +       repeated sysctl_entry conf4     = 9;
>      }
> 
>      message netns_entry {
>             repeated int32 def_conf         = 1;
>             repeated int32 all_conf         = 2;
>     +
>     +       repeated sysctl_entry def_conf4 = 3;
>     +       repeated sysctl_entry all_conf4 = 4;
>      }
>     diff --git a/images/sysctl.proto b/images/sysctl.proto
>     new file mode 100644
>     index 0000000..c64789a
>     --- /dev/null
>     +++ b/images/sysctl.proto
>     @@ -0,0 +1,11 @@
>     +enum SysctlType {
>     +       __CTL_STR       = 5;
>     +       CTL_32          = 6;
>     +}
>     +
>     +message sysctl_entry {
>     +       required SysctlType type        = 1;
>     +
>     +       optional int32 iarg             = 2;
>     +       optional string sarg            = 3;
>     +}
>     --
>     1.9.3
> 
>     _______________________________________________
>     CRIU mailing list
>     CRIU at openvz.org <mailto:CRIU at openvz.org>
>     https://lists.openvz.org/mailman/listinfo/criu
> 
> 



More information about the CRIU mailing list