// SPDX-License-Identifier: MIT

syntax = "proto2";

import "macvlan.proto";
import "opts.proto";
import "tun.proto";
import "sysctl.proto";
import "sit.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;
	VENET		= 5; /* OpenVZ device */
	BRIDGE		= 6;
	MACVLAN		= 7;
	SIT		= 8;
}

message net_device_entry {
	required nd_type type		= 1;
	required uint32  ifindex	= 2;
	required uint32  mtu		= 3;
	required uint32  flags		= 4 [(criu).hex = true];
	required string  name		= 5;

	optional tun_link_entry tun	= 6;

	optional bytes address		= 7;

	repeated int32 conf		= 8;

	repeated sysctl_entry conf4	= 9;

	repeated sysctl_entry conf6	= 10;

	optional macvlan_link_entry	macvlan		= 11;

	optional uint32 peer_ifindex	= 12;
	optional uint32 peer_nsid	= 13;
	optional uint32 master		= 14;
	optional sit_entry sit		= 15;
}

message netns_id {
	/* This is CRIU's id which is allocated for each namespace */
	required uint32	target_ns_id	= 1;
	/*
	 * This is an id which can be used to address this namespace
	 * from another network namespace. Each network namespace has
	 * one set of id-s for other namespaces.
	 */
	required int32	netnsid_value	= 2;
}

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;

	repeated sysctl_entry def_conf6	= 5;
	repeated sysctl_entry all_conf6	= 6;

	repeated netns_id nsids		= 7;
	optional string	ext_key		= 8;
	repeated sysctl_entry unix_conf	= 9;
	repeated sysctl_entry ipv4_sysctl = 10;
}
