package cmd import ( "time" ) const ( IPv4 = 0 IPv6 = 1 ) type NatDesc struct { Proto string JailPort string HostPort string } // To allow sorting, just duplicate fields in JailSort below type Jail struct { Name string InternalName string JID int Config JailConfig RootPath string ConfigPath string ConfigUpdated bool Running bool // No need, Config.Release always represent what is running (plus it know release for non-running jails) //Release string Zpool string Datastore string } // iocage struct as stored in config.json // CONFIG_VERSION = 27 // // Fields in this struct are acquired by their name using reflection // So these char are forbidden for field name: -+. // Array should be forbidden, or else you'll need to rewrite setJailProperty() // // To allow sorting, just duplicate fields in JailConfigSort below type JailConfig struct { Config_version string `json:"CONFIG_VERSION"` Allow_chflags int `json:"allow_chflags"` Allow_mlock int `json:"allow_mlock"` Allow_mount int `json:"allow_mount"` Allow_mount_devfs int `json:"allow_mount_devfs"` Allow_mount_fusefs int `json:"allow_mount_fusefs"` Allow_mount_nullfs int `json:"allow_mount_nullfs"` Allow_mount_procfs int `json:"allow_mount_procfs"` Allow_mount_tmpfs int `json:"allow_mount_tmpfs"` Allow_mount_zfs int `json:"allow_mount_zfs"` Allow_quotas int `json:"allow_quotas"` Allow_raw_sockets int `json:"allow_raw_sockets"` Allow_set_hostname int `json:"allow_set_hostname"` Allow_socket_af int `json:"allow_socket_af"` Allow_sysvipc int `json:"allow_sysvipc"` Allow_tun int `json:"allow_tun"` Allow_vmm int `json:"allow_vmm"` Assign_localhost int `json:"assign_localhost"` Available string `json:"available"` Basejail int `json:"basejail"` Boot int `json:"boot"` Bpf int `json:"bpf"` Children_max string `json:"children_max"` Cloned_release string `json:"cloned_release"` Comment string `json:"comment"` Compression string `json:"compression"` Compressratio string `json:"compressratio"` Coredumpsize string `json:"coredumpsize"` Count string `json:"count"` Cpuset string `json:"cpuset"` Cputime string `json:"cputime"` Datasize string `json:"datasize"` Dedup string `json:"dedup"` Defaultrouter string `json:"defaultrouter"` Defaultrouter6 string `json:"defaultrouter6"` Depends string `json:"depends"` Devfs_ruleset string `json:"devfs_ruleset"` Dhcp int `json:"dhcp"` Enforce_statfs string `json:"enforce_statfs"` Exec_clean int `json:"exec_clean"` Exec_created string `json:"exec_created"` Exec_fib string `json:"exec_fib"` Exec_jail_user string `json:"exec_jail_user"` Exec_poststart string `json:"exec_poststart"` Exec_poststop string `json:"exec_poststop"` Exec_prestart string `json:"exec_prestart"` Exec_prestop string `json:"exec_prestop"` Exec_start string `json:"exec_start"` Exec_stop string `json:"exec_stop"` Exec_system_jail_user string `json:"exec_system_jail_user"` Exec_system_user string `json:"exec_system_user"` Exec_timeout string `json:"exec_timeout"` Host_domainname string `json:"host_domainname"` Host_hostname string `json:"host_hostname"` Host_hostuuid string `json:"host_hostuuid"` Host_time int `json:"host_time"` Hostid string `json:"hostid"` Hostid_strict_check int `json:"hostid_strict_check"` // Specify multiple net cards with "vnet0:bridge0,vnet1:bridge1" Interfaces string `json:"interfaces"` Ip4 string `json:"ip4"` // Specify multiples IP with "vnet0|192.168.1.42,vnet1|10.0.0.3" Ip4_addr string `json:"ip4_addr"` Ip4_saddrsel string `json:"ip4_saddrsel"` Ip6 string `json:"ip6"` Ip6_addr string `json:"ip6_addr"` Ip6_saddrsel string `json:"ip4_saddrsel"` Ip_hostname int `json:"ip_hostname"` Jail_zfs int `json:"jail_zfs"` Jail_zfs_dataset string `json:"jail_zfs_dataset"` Jail_zfs_mountpoint string `json:"jail_zfs_mountpoint"` Last_started string `json:"last_started"` Localhost_ip string `json:"localhost_ip"` Login_flags string `json:"login_flags"` Mac_prefix string `json:"mac_prefix"` Maxproc string `json:"maxproc"` Memorylocked string `json:"memorylocked"` Memoryuse string `json:"memoryuse"` Min_dyn_devfs_ruleset string `json:"min_dyn_devfs_ruleset"` Mount_devfs int `json:"mount_devfs"` Mount_fdescfs int `json:"mount_fdescfs"` Mount_linprocfs int `json:"mount_linprocfs"` Mount_procfs int `json:"mount_procfs"` Mountpoint string `json:"mountpoint"` Msgqqueued string `json:"msgqqueued"` Msgqsize string `json:"msgqsize"` Nat int `json:"nat"` Nat_backend string `json:"nat_backend"` Nat_forwards string `json:"nat_forwards"` Nat_interface string `json:"nat_interface"` Nat_prefix string `json:"nat_prefix"` Nmsgq string `json:"nmsgq"` Notes string `json:"notes"` Nsem string `json:"nsem"` Nsemop string `json:"nsemop"` Nshm string `json:"nshm"` Nthr string `json:"nthr"` Openfiles string `json:"openfiles"` Origin string `json:"origin"` Owner string `json:"owner"` Pcpu string `json:"pcpu"` Plugin_name string `json:"plugin_name"` Plugin_repository string `json:"plugin_repository"` Priority string `json:"priority"` Pseudoterminals string `json:"pseudoterminals"` Quota string `json:"quota"` Readbps string `json:"readbps"` Readiops string `json:"readiops"` Release string `json:"release"` Reservation string `json:"reservation"` Resolver string `json:"resolver"` Rlimits string `json:"rlimits"` Rtsold int `json:"rtsold"` Securelevel string `json:"securelevel"` Shmsize string `json:"shmsize"` Stacksize string `json:"stacksize"` Stop_timeout string `json:"stop_timeout"` Swapuse string `json:"swapuse"` Sync_state string `json:"sync_state"` Sync_target string `json:"sync_target"` Sync_tgt_zpool string `json:"sync_tgt_zpool"` Sysvmsg string `json:"sysvmsg"` Sysvsem string `json:"sysvsem"` Sysvshm string `json:"sysvshm"` Template int `json:"template"` // Go don't like a variable named "type" (And i dont care about finding a cleaner way) Jailtype string `json:"type"` Used string `json:"used"` Vmemoryuse string `json:"vmemoryuse"` Vnet int `json:"vnet"` Vnet0_mac string `json:"vnet0_mac"` Vnet1_mac string `json:"vnet1_mac"` Vnet2_mac string `json:"vnet2_mac"` Vnet3_mac string `json:"vnet3_mac"` Vnet_default_interface string `json:"vnet_default_interface"` Vnet_interfaces string `json:"vnet_interfaces"` Wallclock string `json:"wallclock"` Writebps string `json:"writebps"` Writeiops string `json:"writeiops"` } // Represent an fstab line type Mount struct { Device string Mountpoint string Type string Options []string Fs_Freq int Fs_Passno int } type Snapshot struct { // snapshot name is stored after '@' in dataset name Name string Datastore string Jailname string Mountpoint string Used uint64 Referenced uint64 Creation time.Time } type FreeBSDVersion struct { major int minor int flavor string patchLevel int } type JailHost struct { hostname string hostid string default_gateway4 string default_gateway6 string default_interface string version FreeBSDVersion } type Datastore struct { Name string Mountpoint string ZFSDataset string DefaultJailConfig JailConfig Used uint64 Referenced uint64 Available uint64 } // Fields in this struct are acquired by their name using reflection // So these char are forbidden for field name: -+. type JailSort struct { NameInc jailLessFunc NameDec jailLessFunc InternalNameInc jailLessFunc InternalNameDec jailLessFunc JIDInc jailLessFunc JIDDec jailLessFunc RootPathInc jailLessFunc RootPathDec jailLessFunc ConfigPathInc jailLessFunc ConfigPathDec jailLessFunc RunningInc jailLessFunc RunningDec jailLessFunc DatastoreInc jailLessFunc DatastoreDec jailLessFunc ZpoolInc jailLessFunc ZpoolDec jailLessFunc Config JailConfigSort } type JailConfigSort struct { Config_versionInc jailLessFunc Config_versionDec jailLessFunc Allow_chflagsInc jailLessFunc Allow_chflagsDec jailLessFunc Allow_mlockInc jailLessFunc Allow_mlockDec jailLessFunc Allow_mountInc jailLessFunc Allow_mountDec jailLessFunc Allow_mount_devfsInc jailLessFunc Allow_mount_devfsDec jailLessFunc Allow_mount_fusefsInc jailLessFunc Allow_mount_fusefsDec jailLessFunc Allow_mount_nullfsInc jailLessFunc Allow_mount_nullfsDec jailLessFunc Allow_mount_procfsInc jailLessFunc Allow_mount_procfsDec jailLessFunc Allow_mount_tmpfsInc jailLessFunc Allow_mount_tmpfsDec jailLessFunc Allow_mount_zfsInc jailLessFunc Allow_mount_zfsDec jailLessFunc Allow_quotasInc jailLessFunc Allow_quotasDec jailLessFunc Allow_raw_socketsInc jailLessFunc Allow_raw_socketsDec jailLessFunc Allow_set_hostnameInc jailLessFunc Allow_set_hostnameDec jailLessFunc Allow_socket_afInc jailLessFunc Allow_socket_afDec jailLessFunc Allow_sysvipcInc jailLessFunc Allow_sysvipcDec jailLessFunc Allow_tunInc jailLessFunc Allow_tunDec jailLessFunc Allow_vmmInc jailLessFunc Allow_vmmDec jailLessFunc Assign_localhostInc jailLessFunc Assign_localhostDec jailLessFunc AvailableInc jailLessFunc AvailableDec jailLessFunc BasejailInc jailLessFunc BasejailDec jailLessFunc BootInc jailLessFunc BootDec jailLessFunc BpfInc jailLessFunc BpfDec jailLessFunc Children_maxInc jailLessFunc Children_maxDec jailLessFunc Cloned_releaseInc jailLessFunc Cloned_releaseDec jailLessFunc CommentInc jailLessFunc CommentDec jailLessFunc CompressionInc jailLessFunc CompressionDec jailLessFunc CompressratioInc jailLessFunc CompressratioDec jailLessFunc CoredumpsizeInc jailLessFunc CoredumpsizeDec jailLessFunc CountInc jailLessFunc CountDec jailLessFunc CpusetInc jailLessFunc CpusetDec jailLessFunc CputimeInc jailLessFunc CputimeDec jailLessFunc DatasizeInc jailLessFunc DatasizeDec jailLessFunc DedupInc jailLessFunc DedupDec jailLessFunc DefaultrouterInc jailLessFunc DefaultrouterDec jailLessFunc Defaultrouter6Inc jailLessFunc Defaultrouter6Dec jailLessFunc DependsInc jailLessFunc DependsDec jailLessFunc Devfs_rulesetInc jailLessFunc Devfs_rulesetDec jailLessFunc DhcpInc jailLessFunc DhcpDec jailLessFunc Enforce_statfsInc jailLessFunc Enforce_statfsDec jailLessFunc Exec_cleanInc jailLessFunc Exec_cleanDec jailLessFunc Exec_createdInc jailLessFunc Exec_createdDec jailLessFunc Exec_fibInc jailLessFunc Exec_fibDec jailLessFunc Exec_jail_userInc jailLessFunc Exec_jail_userDec jailLessFunc Exec_poststartInc jailLessFunc Exec_poststartDec jailLessFunc Exec_poststopInc jailLessFunc Exec_poststopDec jailLessFunc Exec_prestartInc jailLessFunc Exec_prestartDec jailLessFunc Exec_prestopInc jailLessFunc Exec_prestopDec jailLessFunc Exec_startInc jailLessFunc Exec_startDec jailLessFunc Exec_stopInc jailLessFunc Exec_stopDec jailLessFunc Exec_system_jail_userInc jailLessFunc Exec_system_jail_userDec jailLessFunc Exec_system_userInc jailLessFunc Exec_system_userDec jailLessFunc Exec_timeoutInc jailLessFunc Exec_timeoutDec jailLessFunc Host_domainnameInc jailLessFunc Host_domainnameDec jailLessFunc Host_hostnameInc jailLessFunc Host_hostnameDec jailLessFunc Host_hostuuidInc jailLessFunc Host_hostuuidDec jailLessFunc Host_timeInc jailLessFunc Host_timeDec jailLessFunc HostidInc jailLessFunc HostidDec jailLessFunc Hostid_strict_checkInc jailLessFunc Hostid_strict_checkDec jailLessFunc InterfacesInc jailLessFunc InterfacesDec jailLessFunc Ip4Inc jailLessFunc Ip4Dec jailLessFunc Ip4_addrInc jailLessFunc Ip4_addrDec jailLessFunc Ip4_saddrselInc jailLessFunc Ip4_saddrselDec jailLessFunc Ip6Inc jailLessFunc Ip6Dec jailLessFunc Ip6_addrInc jailLessFunc Ip6_addrDec jailLessFunc Ip6_saddrselInc jailLessFunc Ip6_saddrselDec jailLessFunc Ip_hostnameInc jailLessFunc Ip_hostnameDec jailLessFunc Jail_zfsInc jailLessFunc Jail_zfsDec jailLessFunc Jail_zfs_datasetInc jailLessFunc Jail_zfs_datasetDec jailLessFunc Jail_zfs_mountpointInc jailLessFunc Jail_zfs_mountpointDec jailLessFunc Last_startedInc jailLessFunc Last_startedDec jailLessFunc Localhost_ipInc jailLessFunc Localhost_ipDec jailLessFunc Login_flagsInc jailLessFunc Login_flagsDec jailLessFunc Mac_prefixInc jailLessFunc Mac_prefixDec jailLessFunc MaxprocInc jailLessFunc MaxprocDec jailLessFunc MemorylockedInc jailLessFunc MemorylockedDec jailLessFunc MemoryuseInc jailLessFunc MemoryuseDec jailLessFunc Min_dyn_devfs_rulesetInc jailLessFunc Min_dyn_devfs_rulesetDec jailLessFunc Mount_devfsInc jailLessFunc Mount_devfsDec jailLessFunc Mount_fdescfsInc jailLessFunc Mount_fdescfsDec jailLessFunc Mount_linprocfsInc jailLessFunc Mount_linprocfsDec jailLessFunc Mount_procfsInc jailLessFunc Mount_procfsDec jailLessFunc MountpointInc jailLessFunc MountpointDec jailLessFunc MsgqqueuedInc jailLessFunc MsgqqueuedDec jailLessFunc MsgqsizeInc jailLessFunc MsgqsizeDec jailLessFunc NatInc jailLessFunc NatDec jailLessFunc Nat_backendInc jailLessFunc Nat_backendDec jailLessFunc Nat_forwardsInc jailLessFunc Nat_forwardsDec jailLessFunc Nat_interfaceInc jailLessFunc Nat_interfaceDec jailLessFunc Nat_prefixInc jailLessFunc Nat_prefixDec jailLessFunc NmsgqInc jailLessFunc NmsgqDec jailLessFunc NotesInc jailLessFunc NotesDec jailLessFunc NsemInc jailLessFunc NsemDec jailLessFunc NsemopInc jailLessFunc NsemopDec jailLessFunc NshmInc jailLessFunc NshmDec jailLessFunc NthrInc jailLessFunc NthrDec jailLessFunc OpenfilesInc jailLessFunc OpenfilesDec jailLessFunc OriginInc jailLessFunc OriginDec jailLessFunc OwnerInc jailLessFunc OwnerDec jailLessFunc PcpuInc jailLessFunc PcpuDec jailLessFunc Plugin_nameInc jailLessFunc Plugin_nameDec jailLessFunc Plugin_repositoryInc jailLessFunc Plugin_repositoryDec jailLessFunc PriorityInc jailLessFunc PriorityDec jailLessFunc PseudoterminalsInc jailLessFunc PseudoterminalsDec jailLessFunc QuotaInc jailLessFunc QuotaDec jailLessFunc ReadbpsInc jailLessFunc ReadbpsDec jailLessFunc ReadiopsInc jailLessFunc ReadiopsDec jailLessFunc ReleaseInc jailLessFunc ReleaseDec jailLessFunc ReservationInc jailLessFunc ReservationDec jailLessFunc ResolverInc jailLessFunc ResolverDec jailLessFunc RlimitsInc jailLessFunc RlimitsDec jailLessFunc RtsoldInc jailLessFunc RtsoldDec jailLessFunc SecurelevelInc jailLessFunc SecurelevelDec jailLessFunc ShmsizeInc jailLessFunc ShmsizeDec jailLessFunc StacksizeInc jailLessFunc StacksizeDec jailLessFunc Stop_timeoutInc jailLessFunc Stop_timeoutDec jailLessFunc SwapuseInc jailLessFunc SwapuseDec jailLessFunc Sync_stateInc jailLessFunc Sync_stateDec jailLessFunc Sync_targetInc jailLessFunc Sync_targetDec jailLessFunc Sync_tgt_zpoolInc jailLessFunc Sync_tgt_zpoolDec jailLessFunc SysvmsgInc jailLessFunc SysvmsgDec jailLessFunc SysvsemInc jailLessFunc SysvsemDec jailLessFunc SysvshmInc jailLessFunc SysvshmDec jailLessFunc TemplateInc jailLessFunc TemplateDec jailLessFunc JailtypeInc jailLessFunc JailtypeDec jailLessFunc UsedInc jailLessFunc UsedDec jailLessFunc VmemoryuseInc jailLessFunc VmemoryuseDec jailLessFunc VnetInc jailLessFunc VnetDec jailLessFunc Vnet0_macInc jailLessFunc Vnet0_macDec jailLessFunc Vnet1_macInc jailLessFunc Vnet1_macDec jailLessFunc Vnet2_macInc jailLessFunc Vnet2_macDec jailLessFunc Vnet3_macInc jailLessFunc Vnet3_macDec jailLessFunc Vnet_default_interfaceInc jailLessFunc Vnet_default_interfaceDec jailLessFunc Vnet_interfacesInc jailLessFunc Vnet_interfacesDec jailLessFunc WallclockInc jailLessFunc WallclockDec jailLessFunc WritebpsInc jailLessFunc WritebpsDec jailLessFunc WriteiopsInc jailLessFunc WriteiopsDec jailLessFunc } type SnapshotSort struct { NameInc snapshotLessFunc NameDec snapshotLessFunc DatastoreInc snapshotLessFunc DatastoreDec snapshotLessFunc JailnameInc snapshotLessFunc JailnameDec snapshotLessFunc MountpointInc snapshotLessFunc MountpointDec snapshotLessFunc UsedInc snapshotLessFunc UsedDec snapshotLessFunc ReferencedInc snapshotLessFunc ReferencedDec snapshotLessFunc CreationInc snapshotLessFunc CreationDec snapshotLessFunc } type DatastoreSort struct { NameInc datastoreLessFunc NameDec datastoreLessFunc MountpointInc datastoreLessFunc MountpointDec datastoreLessFunc ZFSDatasetInc datastoreLessFunc ZFSDatasetDec datastoreLessFunc UsedInc datastoreLessFunc UsedDec datastoreLessFunc ReferencedInc datastoreLessFunc ReferencedDec datastoreLessFunc AvailableInc datastoreLessFunc AvailableDec datastoreLessFunc }