mirror of
https://github.com/hanzoai/visor.git
synced 2026-09-24 17:04:14 +00:00
Adds the infrastructure for a DynamicBytesFile to become pollable (perhaps with select, poll, or epoll). Simply arrange for a DynamicBytesPoller to be notified whenever the relevant file is updated and implement PollableDynamicBytesSource on the DynamicBytesSource. EPOLLPRI and EPOLLERR are triggered for these files, which seems to match Linux's implementation for /proc/sys files. The first two files to support this are hostname and domainname in /proc/sys/kernel. This is used by systemd-journald to monitor for hostname changes.
181 lines
4.1 KiB
Python
181 lines
4.1 KiB
Python
load("//pkg/sync/locking:locking.bzl", "declare_mutex", "declare_rwmutex")
|
|
load("//tools:defs.bzl", "go_library", "go_test")
|
|
load("//tools/go_generics:defs.bzl", "go_template_instance")
|
|
|
|
package(default_applicable_licenses = ["//:license"])
|
|
|
|
licenses(["notice"])
|
|
|
|
go_template_instance(
|
|
name = "dentry_list",
|
|
out = "dentry_list.go",
|
|
package = "kernfs",
|
|
prefix = "dentry",
|
|
template = "//pkg/ilist:generic_list",
|
|
types = {
|
|
"Element": "*Dentry",
|
|
"Linker": "*Dentry",
|
|
},
|
|
)
|
|
|
|
go_template_instance(
|
|
name = "fstree",
|
|
out = "fstree.go",
|
|
package = "kernfs",
|
|
prefix = "generic",
|
|
template = "//pkg/sentry/vfs/genericfstree:generic_fstree",
|
|
types = {
|
|
"Dentry": "Dentry",
|
|
"Filesystem": "Filesystem",
|
|
},
|
|
)
|
|
|
|
go_template_instance(
|
|
name = "slot_list",
|
|
out = "slot_list.go",
|
|
package = "kernfs",
|
|
prefix = "slot",
|
|
template = "//pkg/ilist:generic_list",
|
|
types = {
|
|
"Element": "*slot",
|
|
"Linker": "*slot",
|
|
},
|
|
)
|
|
|
|
go_template_instance(
|
|
name = "static_directory_refs",
|
|
out = "static_directory_refs.go",
|
|
package = "kernfs",
|
|
prefix = "StaticDirectory",
|
|
template = "//pkg/refs:refs_template",
|
|
types = {
|
|
"T": "StaticDirectory",
|
|
},
|
|
)
|
|
|
|
go_template_instance(
|
|
name = "dir_refs",
|
|
out = "dir_refs.go",
|
|
package = "kernfs_test",
|
|
prefix = "dir",
|
|
template = "//pkg/refs:refs_template",
|
|
types = {
|
|
"T": "dir",
|
|
},
|
|
)
|
|
|
|
go_template_instance(
|
|
name = "readonly_dir_refs",
|
|
out = "readonly_dir_refs.go",
|
|
package = "kernfs_test",
|
|
prefix = "readonlyDir",
|
|
template = "//pkg/refs:refs_template",
|
|
types = {
|
|
"T": "readonlyDir",
|
|
},
|
|
)
|
|
|
|
go_template_instance(
|
|
name = "synthetic_directory_refs",
|
|
out = "synthetic_directory_refs.go",
|
|
package = "kernfs",
|
|
prefix = "syntheticDirectory",
|
|
template = "//pkg/refs:refs_template",
|
|
types = {
|
|
"T": "syntheticDirectory",
|
|
},
|
|
)
|
|
|
|
declare_rwmutex(
|
|
name = "ancestry_mutex",
|
|
out = "ancestry_mutex.go",
|
|
package = "kernfs",
|
|
prefix = "ancestry",
|
|
)
|
|
|
|
declare_mutex(
|
|
name = "deferred_dec_refs_mutex",
|
|
out = "deferred_dec_refs_mutex.go",
|
|
package = "kernfs",
|
|
prefix = "deferredDecRefs",
|
|
)
|
|
|
|
declare_rwmutex(
|
|
name = "filesystem_mutex",
|
|
out = "filesystem_mutex.go",
|
|
package = "kernfs",
|
|
prefix = "filesystem",
|
|
)
|
|
|
|
go_library(
|
|
name = "kernfs",
|
|
srcs = [
|
|
"ancestry_mutex.go",
|
|
"deferred_dec_refs_mutex.go",
|
|
"dentry_list.go",
|
|
"dynamic_bytes_file.go",
|
|
"fd_impl_util.go",
|
|
"filesystem.go",
|
|
"filesystem_mutex.go",
|
|
"fstree.go",
|
|
"inode_impl_util.go",
|
|
"kernfs.go",
|
|
"save_restore.go",
|
|
"slot_list.go",
|
|
"static_directory_refs.go",
|
|
"symlink.go",
|
|
"synthetic_directory.go",
|
|
"synthetic_directory_refs.go",
|
|
],
|
|
visibility = ["//pkg/sentry:internal"],
|
|
deps = [
|
|
"//pkg/abi/linux",
|
|
"//pkg/atomicbitops",
|
|
"//pkg/context",
|
|
"//pkg/errors/linuxerr",
|
|
"//pkg/fspath",
|
|
"//pkg/hostarch",
|
|
"//pkg/log",
|
|
"//pkg/refs",
|
|
"//pkg/safemem",
|
|
"//pkg/sentry/fsimpl/lock",
|
|
"//pkg/sentry/fsutil",
|
|
"//pkg/sentry/kernel/auth",
|
|
"//pkg/sentry/ktime",
|
|
"//pkg/sentry/memmap",
|
|
"//pkg/sentry/socket/unix/transport",
|
|
"//pkg/sentry/vfs",
|
|
"//pkg/sync",
|
|
"//pkg/sync/locking",
|
|
"//pkg/usermem",
|
|
"//pkg/waiter",
|
|
],
|
|
)
|
|
|
|
go_test(
|
|
name = "kernfs_test",
|
|
size = "small",
|
|
srcs = [
|
|
"dir_refs.go",
|
|
"kernfs_test.go",
|
|
"readonly_dir_refs.go",
|
|
],
|
|
deps = [
|
|
":kernfs",
|
|
"//pkg/abi/linux",
|
|
"//pkg/atomicbitops",
|
|
"//pkg/context",
|
|
"//pkg/errors/linuxerr",
|
|
"//pkg/fspath",
|
|
"//pkg/hostarch",
|
|
"//pkg/log",
|
|
"//pkg/refs",
|
|
"//pkg/sentry/contexttest",
|
|
"//pkg/sentry/fsimpl/testutil",
|
|
"//pkg/sentry/kernel/auth",
|
|
"//pkg/sentry/vfs",
|
|
"//pkg/usermem",
|
|
"@com_github_google_go_cmp//cmp:go_default_library",
|
|
],
|
|
)
|