treewide: introduce osbase package and move things around
All except localregistry moved from metropolis/pkg to osbase,
localregistry moved to metropolis/test as its only used there anyway.
Change-Id: If1a4bf377364bef0ac23169e1b90379c71b06d72
Reviewed-on: https://review.monogon.dev/c/monogon/+/3079
Tested-by: Jenkins CI
Reviewed-by: Serge Bazanski <serge@monogon.tech>
diff --git a/osbase/kmod/spec/BUILD.bazel b/osbase/kmod/spec/BUILD.bazel
new file mode 100644
index 0000000..75bcf63
--- /dev/null
+++ b/osbase/kmod/spec/BUILD.bazel
@@ -0,0 +1,23 @@
+load("@rules_proto//proto:defs.bzl", "proto_library")
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+proto_library(
+ name = "spec_proto",
+ srcs = ["meta.proto"],
+ visibility = ["//visibility:public"],
+)
+
+go_proto_library(
+ name = "spec_go_proto",
+ importpath = "source.monogon.dev/osbase/kmod/spec",
+ proto = ":spec_proto",
+ visibility = ["//visibility:public"],
+)
+
+go_library(
+ name = "spec",
+ embed = [":spec_go_proto"],
+ importpath = "source.monogon.dev/osbase/kmod/spec",
+ visibility = ["//visibility:public"],
+)
diff --git a/osbase/kmod/spec/gomod-generated-placeholder.go b/osbase/kmod/spec/gomod-generated-placeholder.go
new file mode 100644
index 0000000..f09cd57
--- /dev/null
+++ b/osbase/kmod/spec/gomod-generated-placeholder.go
@@ -0,0 +1 @@
+package spec
diff --git a/osbase/kmod/spec/meta.proto b/osbase/kmod/spec/meta.proto
new file mode 100644
index 0000000..ed2cc73
--- /dev/null
+++ b/osbase/kmod/spec/meta.proto
@@ -0,0 +1,57 @@
+syntax = "proto3";
+
+package metropolis.pkg.kmod;
+
+option go_package = "source.monogon.dev/osbase/kmod/spec";
+
+// Module contains important metadata about a Linux kernel module.
+message Module {
+ // Name of the module
+ string name = 1;
+ // Path of the module, relative to the module root.
+ // Unset if built-in.
+ string path = 2;
+ // List of Meta.modules indices on which this module depends.
+ repeated uint32 depends = 3;
+}
+
+message RadixNode {
+ enum Type {
+ // Matches one or more characters literally.
+ LITERAL = 0;
+ // Matches zero or more arbitrary characters.
+ WILDCARD = 1;
+ // Matches exactly one arbitrary character.
+ SINGLE_WILDCARD = 2;
+ // Matches exactly one character between start_byte and end_byte.
+ BYTE_RANGE = 3;
+ // Root matches nothing, but serves a the root node for a radix
+ // tree.
+ ROOT = 4;
+ }
+ Type type = 1;
+
+ // Only valid for LITERAL type
+ string literal = 2;
+
+ // Only valid when BYTE_RANGE type
+ uint32 start_byte = 3;
+ uint32 end_byte = 4;
+
+ // Contains a list of radix nodes which are children of this node.
+ repeated RadixNode children = 5;
+
+ // A list of module indices (in the Meta.modules list) which have
+ // match expressions ending at this node.
+ repeated uint32 module_index = 6;
+}
+
+// Meta contains metadata about all modules in a Linux kernel
+message Meta {
+ // Contains a list of modules, including built-in ones.
+ repeated Module modules = 1;
+
+ // Contains the root node of a radix tree for looking up modules to load
+ // for a given device modalias.
+ RadixNode module_device_matches = 2;
+}
\ No newline at end of file