m/p/bootparam: add Consoles param parser

Adds the Consoles() helper function which processes all console params
and puts them into a set.

Change-Id: I7333bf5c22e6cd79bea0155c6a558e79bf6e824b
Reviewed-on: https://review.monogon.dev/c/monogon/+/1525
Reviewed-by: Serge Bazanski <serge@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/pkg/bootparam/params.go b/metropolis/pkg/bootparam/params.go
new file mode 100644
index 0000000..bbb4fae
--- /dev/null
+++ b/metropolis/pkg/bootparam/params.go
@@ -0,0 +1,26 @@
+package bootparam
+
+import (
+	"regexp"
+	"strings"
+)
+
+var validTTYRegexp = regexp.MustCompile(`^[a-zA-Z0-9]+$`)
+
+// Consoles returns the set of consoles passed to the kernel, i.e. the values
+// passed to the console= directive. It normalizes away any possibly present
+// /dev/ prefix, returning values like ttyS0. It returns an empty set in case
+// no valid console parameters exist.
+func (p Params) Consoles() map[string]bool {
+	consoles := make(map[string]bool)
+	for _, pa := range p {
+		if pa.Param == "console" {
+			consoleParts := strings.Split(pa.Value, ",")
+			consoleName := strings.TrimPrefix(consoleParts[0], "/dev/")
+			if validTTYRegexp.MatchString(consoleName) {
+				consoles[consoleName] = true
+			}
+		}
+	}
+	return consoles
+}