diff --git a/osbase/build/earlydev.fsspec b/osbase/build/earlydev.fsspec
index a7d2ea4..310616b 100644
--- a/osbase/build/earlydev.fsspec
+++ b/osbase/build/earlydev.fsspec
@@ -7,25 +7,25 @@
 # device manager (ie. devtmpfs) is launched.
 special_file <
     path: "/dev/console"
-    type: CHARACTER_DEV
+    type: TYPE_CHARACTER_DEV
     major: 5 minor: 1
     mode: 0600 uid: 0 gid: 0
 >
 special_file <
     path: "/dev/ptmx"
-    type: CHARACTER_DEV
+    type: TYPE_CHARACTER_DEV
     major: 5 minor: 2
     mode: 0644 uid: 0 gid: 0
 >
 special_file <
     path: "/dev/null"
-    type: CHARACTER_DEV
+    type: TYPE_CHARACTER_DEV
     major: 1 minor: 3
     mode: 0644 uid: 0 gid: 0
 >
 special_file <
     path: "/dev/kmsg"
-    type: CHARACTER_DEV
+    type: TYPE_CHARACTER_DEV
     major: 1 minor: 11
     mode: 0644 uid: 0 gid: 0
 >
@@ -36,19 +36,19 @@
 # log there, too.
 special_file <
     path: "/dev/tty0"
-    type: CHARACTER_DEV
+    type: TYPE_CHARACTER_DEV
     major: 4 minor: 0
     mode: 0600 uid: 0 gid: 0
 >
 special_file <
     path: "/dev/ttyS0"
-    type: CHARACTER_DEV
+    type: TYPE_CHARACTER_DEV
     major: 4 minor: 64
     mode: 0660 uid: 0 gid: 0
 >
 special_file <
     path: "/dev/ttyS1"
-    type: CHARACTER_DEV
+    type: TYPE_CHARACTER_DEV
     major: 4 minor: 65
     mode: 0660 uid: 0 gid: 0
 >
\ No newline at end of file
diff --git a/osbase/build/fsspec/BUILD.bazel b/osbase/build/fsspec/BUILD.bazel
index 2b17b8d..0cb2c55 100644
--- a/osbase/build/fsspec/BUILD.bazel
+++ b/osbase/build/fsspec/BUILD.bazel
@@ -7,7 +7,6 @@
     name = "spec_proto_lint_test",
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
-        "ENUM_VALUE_PREFIX",  # TODO: evaluate correctness
         "ENUM_ZERO_VALUE_SUFFIX",  # TODO: evaluate correctness
     ],
     protos = [":spec_proto"],
diff --git a/osbase/build/fsspec/spec.proto b/osbase/build/fsspec/spec.proto
index 25963a1..3c98fdb 100644
--- a/osbase/build/fsspec/spec.proto
+++ b/osbase/build/fsspec/spec.proto
@@ -76,9 +76,9 @@
   string path = 1;
 
   enum Type {
-    CHARACTER_DEV = 0;
-    BLOCK_DEV = 1;
-    FIFO = 2;
+    TYPE_CHARACTER_DEV = 0;
+    TYPE_BLOCK_DEV = 1;
+    TYPE_FIFO = 2;
   }
 
   // Type of special file.
diff --git a/osbase/build/mkcpio/main.go b/osbase/build/mkcpio/main.go
index 4886c3c..000a979 100644
--- a/osbase/build/mkcpio/main.go
+++ b/osbase/build/mkcpio/main.go
@@ -196,11 +196,11 @@
 		case *fsspec.SpecialFile:
 			mode := cpio.FileMode(i.Mode)
 			switch i.Type {
-			case fsspec.SpecialFile_CHARACTER_DEV:
+			case fsspec.SpecialFile_TYPE_CHARACTER_DEV:
 				mode |= cpio.TypeChar
-			case fsspec.SpecialFile_BLOCK_DEV:
+			case fsspec.SpecialFile_TYPE_BLOCK_DEV:
 				mode |= cpio.TypeBlock
-			case fsspec.SpecialFile_FIFO:
+			case fsspec.SpecialFile_TYPE_FIFO:
 				mode |= cpio.TypeFifo
 			}
 
diff --git a/osbase/build/mkerofs/main.go b/osbase/build/mkerofs/main.go
index edcfdb9..12cde48 100644
--- a/osbase/build/mkerofs/main.go
+++ b/osbase/build/mkerofs/main.go
@@ -97,17 +97,17 @@
 			GID:         uint16(inode.SpecialFile.Gid),
 		}
 		switch inode.SpecialFile.Type {
-		case fsspec.SpecialFile_FIFO:
+		case fsspec.SpecialFile_TYPE_FIFO:
 			err = w.Create(pathname, &erofs.FIFO{
 				Base: base,
 			})
-		case fsspec.SpecialFile_CHARACTER_DEV:
+		case fsspec.SpecialFile_TYPE_CHARACTER_DEV:
 			err = w.Create(pathname, &erofs.CharacterDevice{
 				Base:  base,
 				Major: inode.SpecialFile.Major,
 				Minor: inode.SpecialFile.Minor,
 			})
-		case fsspec.SpecialFile_BLOCK_DEV:
+		case fsspec.SpecialFile_TYPE_BLOCK_DEV:
 			err = w.Create(pathname, &erofs.BlockDevice{
 				Base:  base,
 				Major: inode.SpecialFile.Major,
diff --git a/osbase/kmod/meta.go b/osbase/kmod/meta.go
index c005a7c..1c96c46 100644
--- a/osbase/kmod/meta.go
+++ b/osbase/kmod/meta.go
@@ -17,7 +17,7 @@
 	modInfoMap := make(map[string]ModuleInfo)
 	var meta kmodpb.Meta
 	meta.ModuleDeviceMatches = &kmodpb.RadixNode{
-		Type: kmodpb.RadixNode_ROOT,
+		Type: kmodpb.RadixNode_TYPE_ROOT,
 	}
 	var i uint32
 	for _, m := range modinfos {
diff --git a/osbase/kmod/radix.go b/osbase/kmod/radix.go
index c20b48d..1631d87 100644
--- a/osbase/kmod/radix.go
+++ b/osbase/kmod/radix.go
@@ -25,23 +25,23 @@
 func lookupModulesRec(n *kmodpb.RadixNode, needle string, matches map[uint32]bool) {
 	for _, c := range n.Children {
 		switch c.Type {
-		case kmodpb.RadixNode_LITERAL:
+		case kmodpb.RadixNode_TYPE_LITERAL:
 			if len(needle) < len(c.Literal) {
 				continue
 			}
 			if c.Literal == needle[:len(c.Literal)] {
 				lookupModulesRec(c, needle[len(c.Literal):], matches)
 			}
-		case kmodpb.RadixNode_WILDCARD:
+		case kmodpb.RadixNode_TYPE_WILDCARD:
 			for i := 0; i <= len(needle); i++ {
 				lookupModulesRec(c, needle[i:], matches)
 			}
-		case kmodpb.RadixNode_SINGLE_WILDCARD:
+		case kmodpb.RadixNode_TYPE_SINGLE_WILDCARD:
 			if len(needle) < 1 {
 				continue
 			}
 			lookupModulesRec(c, needle[1:], matches)
-		case kmodpb.RadixNode_BYTE_RANGE:
+		case kmodpb.RadixNode_TYPE_BYTE_RANGE:
 			if len(needle) < 1 {
 				continue
 			}
@@ -93,7 +93,7 @@
 			continue
 		}
 		switch c.Type {
-		case kmodpb.RadixNode_LITERAL:
+		case kmodpb.RadixNode_TYPE_LITERAL:
 			if c.Literal[0] == currPart.Literal[0] {
 				var i int
 				for i < len(c.Literal) && i < len(currPart.Literal) && c.Literal[i] == currPart.Literal[i] {
@@ -107,11 +107,11 @@
 					return addPatternRec(c, parts[1:], nil)
 				}
 				if i == len(c.Literal) {
-					return addPatternRec(c, parts, &kmodpb.RadixNode{Type: kmodpb.RadixNode_LITERAL, Literal: currPart.Literal[i:], ModuleIndex: currPart.ModuleIndex})
+					return addPatternRec(c, parts, &kmodpb.RadixNode{Type: kmodpb.RadixNode_TYPE_LITERAL, Literal: currPart.Literal[i:], ModuleIndex: currPart.ModuleIndex})
 				}
 				// Split current node
 				splitOldPart := &kmodpb.RadixNode{
-					Type:        kmodpb.RadixNode_LITERAL,
+					Type:        kmodpb.RadixNode_TYPE_LITERAL,
 					Literal:     c.Literal[i:],
 					Children:    c.Children,
 					ModuleIndex: c.ModuleIndex,
@@ -129,7 +129,7 @@
 					parts = parts[1:]
 				} else {
 					splitNewPart = &kmodpb.RadixNode{
-						Type:        kmodpb.RadixNode_LITERAL,
+						Type:        kmodpb.RadixNode_TYPE_LITERAL,
 						Literal:     currPart.Literal[i:],
 						ModuleIndex: currPart.ModuleIndex,
 					}
@@ -143,14 +143,14 @@
 				return addPatternRec(splitNewPart, parts[1:], nil)
 			}
 
-		case kmodpb.RadixNode_BYTE_RANGE:
+		case kmodpb.RadixNode_TYPE_BYTE_RANGE:
 			if c.StartByte == currPart.StartByte && c.EndByte == currPart.EndByte {
 				if len(parts) == 1 {
 					c.ModuleIndex = append(c.ModuleIndex, parts[0].ModuleIndex...)
 				}
 				return addPatternRec(c, parts[1:], nil)
 			}
-		case kmodpb.RadixNode_SINGLE_WILDCARD, kmodpb.RadixNode_WILDCARD:
+		case kmodpb.RadixNode_TYPE_SINGLE_WILDCARD, kmodpb.RadixNode_TYPE_WILDCARD:
 			if len(parts) == 1 {
 				c.ModuleIndex = append(c.ModuleIndex, parts[0].ModuleIndex...)
 			}
@@ -179,13 +179,13 @@
 		fmt.Printf("%v ", r.ModuleIndex)
 	}
 	switch r.Type {
-	case kmodpb.RadixNode_LITERAL:
+	case kmodpb.RadixNode_TYPE_LITERAL:
 		fmt.Printf("%q: ", r.Literal)
-	case kmodpb.RadixNode_SINGLE_WILDCARD:
+	case kmodpb.RadixNode_TYPE_SINGLE_WILDCARD:
 		fmt.Printf("?: ")
-	case kmodpb.RadixNode_WILDCARD:
+	case kmodpb.RadixNode_TYPE_WILDCARD:
 		fmt.Printf("*: ")
-	case kmodpb.RadixNode_BYTE_RANGE:
+	case kmodpb.RadixNode_TYPE_BYTE_RANGE:
 		fmt.Printf("[%c-%c]: ", rune(r.StartByte), rune(r.EndByte))
 	default:
 		log.Fatalf("Unknown tree type %T\n", r)
@@ -210,7 +210,7 @@
 	storeCurrentLiteral := func() {
 		if currentLiteral.Len() > 0 {
 			out = append(out, &kmodpb.RadixNode{
-				Type:    kmodpb.RadixNode_LITERAL,
+				Type:    kmodpb.RadixNode_TYPE_LITERAL,
 				Literal: currentLiteral.String(),
 			})
 			currentLiteral.Reset()
@@ -221,16 +221,16 @@
 		case '*':
 			storeCurrentLiteral()
 			i += 1
-			if len(out) > 0 && out[len(out)-1].Type == kmodpb.RadixNode_WILDCARD {
+			if len(out) > 0 && out[len(out)-1].Type == kmodpb.RadixNode_TYPE_WILDCARD {
 				continue
 			}
 			out = append(out, &kmodpb.RadixNode{
-				Type: kmodpb.RadixNode_WILDCARD,
+				Type: kmodpb.RadixNode_TYPE_WILDCARD,
 			})
 		case '?':
 			storeCurrentLiteral()
 			out = append(out, &kmodpb.RadixNode{
-				Type: kmodpb.RadixNode_SINGLE_WILDCARD,
+				Type: kmodpb.RadixNode_TYPE_SINGLE_WILDCARD,
 			})
 			i += 1
 		case '[':
@@ -242,7 +242,7 @@
 				return nil, errors.New("illegal byte range notation, incorrect dash or closing character")
 			}
 			nn := &kmodpb.RadixNode{
-				Type:      kmodpb.RadixNode_BYTE_RANGE,
+				Type:      kmodpb.RadixNode_TYPE_BYTE_RANGE,
 				StartByte: uint32(pattern[i+1]),
 				EndByte:   uint32(pattern[i+3]),
 			}
diff --git a/osbase/kmod/radix_test.go b/osbase/kmod/radix_test.go
index 62e9d95..e89a514 100644
--- a/osbase/kmod/radix_test.go
+++ b/osbase/kmod/radix_test.go
@@ -20,18 +20,18 @@
 		expectedNodes []*kmodpb.RadixNode
 	}{
 		{"Empty", "", nil},
-		{"SingleLiteral", "asdf", []*kmodpb.RadixNode{{Type: kmodpb.RadixNode_LITERAL, Literal: "asdf"}}},
+		{"SingleLiteral", "asdf", []*kmodpb.RadixNode{{Type: kmodpb.RadixNode_TYPE_LITERAL, Literal: "asdf"}}},
 		{"SingleWildcard", "as*df", []*kmodpb.RadixNode{
-			{Type: kmodpb.RadixNode_LITERAL, Literal: "as"},
-			{Type: kmodpb.RadixNode_WILDCARD},
-			{Type: kmodpb.RadixNode_LITERAL, Literal: "df"},
+			{Type: kmodpb.RadixNode_TYPE_LITERAL, Literal: "as"},
+			{Type: kmodpb.RadixNode_TYPE_WILDCARD},
+			{Type: kmodpb.RadixNode_TYPE_LITERAL, Literal: "df"},
 		}},
-		{"EscapedWildcard", "a\\*", []*kmodpb.RadixNode{{Type: kmodpb.RadixNode_LITERAL, Literal: "a*"}}},
-		{"SingleRange", "[y-z]", []*kmodpb.RadixNode{{Type: kmodpb.RadixNode_BYTE_RANGE, StartByte: 121, EndByte: 122}}},
+		{"EscapedWildcard", "a\\*", []*kmodpb.RadixNode{{Type: kmodpb.RadixNode_TYPE_LITERAL, Literal: "a*"}}},
+		{"SingleRange", "[y-z]", []*kmodpb.RadixNode{{Type: kmodpb.RadixNode_TYPE_BYTE_RANGE, StartByte: 121, EndByte: 122}}},
 		{"SingleWildcardChar", "a?c", []*kmodpb.RadixNode{
-			{Type: kmodpb.RadixNode_LITERAL, Literal: "a"},
-			{Type: kmodpb.RadixNode_SINGLE_WILDCARD},
-			{Type: kmodpb.RadixNode_LITERAL, Literal: "c"},
+			{Type: kmodpb.RadixNode_TYPE_LITERAL, Literal: "a"},
+			{Type: kmodpb.RadixNode_TYPE_SINGLE_WILDCARD},
+			{Type: kmodpb.RadixNode_TYPE_LITERAL, Literal: "c"},
 		}},
 	}
 	for _, c := range cases {
@@ -50,7 +50,7 @@
 
 func TestLookupComplex(t *testing.T) {
 	root := &kmodpb.RadixNode{
-		Type: kmodpb.RadixNode_LITERAL,
+		Type: kmodpb.RadixNode_TYPE_LITERAL,
 	}
 	if err := AddPattern(root, "usb:v0B95p1790d*dc*dsc*dp*icFFiscFFip00in*", 2); err != nil {
 		t.Error(err)
@@ -84,7 +84,7 @@
 		values := strings.Split(b, "\x00")
 		var patternsRegexp []regexp.Regexp
 		root := &kmodpb.RadixNode{
-			Type: kmodpb.RadixNode_LITERAL,
+			Type: kmodpb.RadixNode_TYPE_LITERAL,
 		}
 		for i, p := range patternsRaw {
 			if !isASCII(p) {
@@ -103,13 +103,13 @@
 			regexb.WriteString("(?s)^")
 			for _, part := range pp {
 				switch part.Type {
-				case kmodpb.RadixNode_LITERAL:
+				case kmodpb.RadixNode_TYPE_LITERAL:
 					regexb.WriteString(regexp.QuoteMeta(part.Literal))
-				case kmodpb.RadixNode_SINGLE_WILDCARD:
+				case kmodpb.RadixNode_TYPE_SINGLE_WILDCARD:
 					regexb.WriteString(".")
-				case kmodpb.RadixNode_WILDCARD:
+				case kmodpb.RadixNode_TYPE_WILDCARD:
 					regexb.WriteString(".*")
-				case kmodpb.RadixNode_BYTE_RANGE:
+				case kmodpb.RadixNode_TYPE_BYTE_RANGE:
 					regexb.WriteString(fmt.Sprintf("[%s-%s]", regexp.QuoteMeta(string([]rune{rune(part.StartByte)})), regexp.QuoteMeta(string([]rune{rune(part.EndByte)}))))
 				default:
 					t.Errorf("Unknown node type %v", part.Type)
diff --git a/osbase/kmod/spec/BUILD.bazel b/osbase/kmod/spec/BUILD.bazel
index 5ff430e..8994546 100644
--- a/osbase/kmod/spec/BUILD.bazel
+++ b/osbase/kmod/spec/BUILD.bazel
@@ -7,7 +7,6 @@
     name = "spec_proto_lint_test",
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
-        "ENUM_VALUE_PREFIX",  # TODO: evaluate correctness
         "ENUM_ZERO_VALUE_SUFFIX",  # TODO: evaluate correctness
     ],
     protos = [":spec_proto"],
diff --git a/osbase/kmod/spec/meta.proto b/osbase/kmod/spec/meta.proto
index 2eb5c7a..634b2ad 100644
--- a/osbase/kmod/spec/meta.proto
+++ b/osbase/kmod/spec/meta.proto
@@ -18,16 +18,16 @@
 message RadixNode {
     enum Type {
         // Matches one or more characters literally.
-        LITERAL = 0;
+        TYPE_LITERAL = 0;
         // Matches zero or more arbitrary characters.
-        WILDCARD = 1;
+        TYPE_WILDCARD = 1;
         // Matches exactly one arbitrary character.
-        SINGLE_WILDCARD = 2;
+        TYPE_SINGLE_WILDCARD = 2;
         // Matches exactly one character between start_byte and end_byte.
-        BYTE_RANGE = 3;
+        TYPE_BYTE_RANGE = 3;
         // Root matches nothing, but serves a the root node for a radix
         // tree.
-        ROOT = 4;
+        TYPE_ROOT = 4;
     }
     Type type = 1;
 
diff --git a/osbase/logtree/leveled.go b/osbase/logtree/leveled.go
index 701d8d0..0ca6e48 100644
--- a/osbase/logtree/leveled.go
+++ b/osbase/logtree/leveled.go
@@ -25,13 +25,13 @@
 
 func SeverityFromProto(s lpb.LeveledLogSeverity) (logging.Severity, error) {
 	switch s {
-	case lpb.LeveledLogSeverity_INFO:
+	case lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_INFO:
 		return logging.INFO, nil
-	case lpb.LeveledLogSeverity_WARNING:
+	case lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_WARNING:
 		return logging.WARNING, nil
-	case lpb.LeveledLogSeverity_ERROR:
+	case lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_ERROR:
 		return logging.ERROR, nil
-	case lpb.LeveledLogSeverity_FATAL:
+	case lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_FATAL:
 		return logging.FATAL, nil
 	default:
 		return "", fmt.Errorf("unknown severity value %d", s)
@@ -41,14 +41,14 @@
 func SeverityToProto(s logging.Severity) lpb.LeveledLogSeverity {
 	switch s {
 	case logging.INFO:
-		return lpb.LeveledLogSeverity_INFO
+		return lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_INFO
 	case logging.WARNING:
-		return lpb.LeveledLogSeverity_WARNING
+		return lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_WARNING
 	case logging.ERROR:
-		return lpb.LeveledLogSeverity_ERROR
+		return lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_ERROR
 	case logging.FATAL:
-		return lpb.LeveledLogSeverity_FATAL
+		return lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_FATAL
 	default:
-		return lpb.LeveledLogSeverity_INVALID
+		return lpb.LeveledLogSeverity_LEVELED_LOG_SEVERITY_INVALID
 	}
 }
diff --git a/osbase/logtree/proto/BUILD.bazel b/osbase/logtree/proto/BUILD.bazel
index b7b76d4..9a87f5c 100644
--- a/osbase/logtree/proto/BUILD.bazel
+++ b/osbase/logtree/proto/BUILD.bazel
@@ -7,7 +7,6 @@
     name = "proto_proto_lint_test",
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
-        "ENUM_VALUE_PREFIX",  # TODO: evaluate correctness
         "ENUM_ZERO_VALUE_SUFFIX",  # TODO: evaluate correctness
     ],
     protos = [":proto_proto"],
diff --git a/osbase/logtree/proto/logtree.proto b/osbase/logtree/proto/logtree.proto
index fb80a71..ce905cc 100644
--- a/osbase/logtree/proto/logtree.proto
+++ b/osbase/logtree/proto/logtree.proto
@@ -22,11 +22,11 @@
 
 // Severity level corresponding to //osbase/logtree.Severity.
 enum LeveledLogSeverity {
-  INVALID = 0;
-  INFO = 1;
-  WARNING = 2;
-  ERROR = 3;
-  FATAL = 4;
+  LEVELED_LOG_SEVERITY_INVALID = 0;
+  LEVELED_LOG_SEVERITY_INFO = 1;
+  LEVELED_LOG_SEVERITY_WARNING = 2;
+  LEVELED_LOG_SEVERITY_ERROR = 3;
+  LEVELED_LOG_SEVERITY_FATAL = 4;
 }
 
 // LogEntry corresponding to logtree.LogEntry in //osbase/logtree.
diff --git a/osbase/net/dump/netdump.go b/osbase/net/dump/netdump.go
index 7ea9ae2..d9586ed 100644
--- a/osbase/net/dump/netdump.go
+++ b/osbase/net/dump/netdump.go
@@ -18,8 +18,8 @@
 )
 
 var vlanProtoMap = map[netlink.VlanProtocol]netapi.VLAN_Protocol{
-	netlink.VLAN_PROTOCOL_8021Q:  netapi.VLAN_CVLAN,
-	netlink.VLAN_PROTOCOL_8021AD: netapi.VLAN_SVLAN,
+	netlink.VLAN_PROTOCOL_8021Q:  netapi.VLAN_PROTOCOL_CVLAN,
+	netlink.VLAN_PROTOCOL_8021AD: netapi.VLAN_PROTOCOL_SVLAN,
 }
 
 // From iproute2's rt_protos
@@ -265,19 +265,19 @@
 func getIPv6IfaceAutoconfigPrivacy(name string) (netapi.IPv6Autoconfig_Privacy, error) {
 	useTempaddrRaw, err := os.ReadFile(fmt.Sprintf("/proc/sys/net/ipv6/conf/%s/use_tempaddr", name))
 	if err != nil {
-		return netapi.IPv6Autoconfig_DISABLE, fmt.Errorf("failed to read use_tempaddr sysctl for interface %q: %w", name, err)
+		return netapi.IPv6Autoconfig_PRIVACY_DISABLE, fmt.Errorf("failed to read use_tempaddr sysctl for interface %q: %w", name, err)
 	}
 	useTempaddr, err := strconv.ParseInt(strings.TrimSpace(string(useTempaddrRaw)), 10, 64)
 	if err != nil {
-		return netapi.IPv6Autoconfig_DISABLE, fmt.Errorf("failed to parse use_tempaddr sysctl for interface %q: %w", name, err)
+		return netapi.IPv6Autoconfig_PRIVACY_DISABLE, fmt.Errorf("failed to parse use_tempaddr sysctl for interface %q: %w", name, err)
 	}
 	switch {
 	case useTempaddr <= 0:
-		return netapi.IPv6Autoconfig_DISABLE, nil
+		return netapi.IPv6Autoconfig_PRIVACY_DISABLE, nil
 	case useTempaddr == 1:
-		return netapi.IPv6Autoconfig_AVOID, nil
+		return netapi.IPv6Autoconfig_PRIVACY_AVOID, nil
 	case useTempaddr > 1:
-		return netapi.IPv6Autoconfig_PREFER, nil
+		return netapi.IPv6Autoconfig_PRIVACY_PREFER, nil
 	default:
 		panic("switch is complete but hit default case")
 	}
diff --git a/osbase/net/proto/BUILD.bazel b/osbase/net/proto/BUILD.bazel
index f7a6ab2..bd69b94 100644
--- a/osbase/net/proto/BUILD.bazel
+++ b/osbase/net/proto/BUILD.bazel
@@ -7,7 +7,6 @@
     name = "proto_proto_lint_test",
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
-        "ENUM_VALUE_PREFIX",  # TODO: evaluate correctness
         "ENUM_ZERO_VALUE_SUFFIX",  # TODO: evaluate correctness
     ],
     protos = [":proto_proto"],
diff --git a/osbase/net/proto/net.proto b/osbase/net/proto/net.proto
index 1fd46aa..02e4160 100644
--- a/osbase/net/proto/net.proto
+++ b/osbase/net/proto/net.proto
@@ -57,17 +57,17 @@
   }
   enum TransmitHashPolicy {
     // Layer 2 MAC address
-    LAYER2 = 0;
+    TRANSMIT_HASH_POLICY_LAYER2 = 0;
     // IP address, protocol and port
-    LAYER3_4 = 1;
+    TRANSMIT_HASH_POLICY_LAYER3_4 = 1;
     // MAC address and IP address
-    LAYER2_3 = 2;
+    TRANSMIT_HASH_POLICY_LAYER2_3 = 2;
     // Encapsulated MAC address and IP address
-    ENCAP_LAYER2_3 = 3;
+    TRANSMIT_HASH_POLICY_ENCAP_LAYER2_3 = 3;
     // Encapsulated IP address, protocol and port
-    ENCAP_LAYER3_4 = 4;
+    TRANSMIT_HASH_POLICY_ENCAP_LAYER3_4 = 4;
     // VLAN ID and source MAC
-    VLAN_SRCMAC = 5;
+    TRANSMIT_HASH_POLICY_VLAN_SRCMAC = 5;
   }
   TransmitHashPolicy transmit_hash_policy = 4;
   // Use the Link Aggregation Control Protocol to automatically use the
@@ -75,15 +75,15 @@
   message LACP {
     enum Rate {
       // LACP slow rate, one packet every 30s
-      SLOW = 0;
+      RATE_SLOW = 0;
       // LACP fast rate, one packet every 1s
-      FAST = 1;
+      RATE_FAST = 1;
     }
     Rate rate = 1;
     enum SelectionLogic {
-      STABLE = 0;
-      BANDWIDTH = 1;
-      COUNT = 2;
+      SELECTION_LOGIC_STABLE = 0;
+      SELECTION_LOGIC_BANDWIDTH = 1;
+      SELECTION_LOGIC_COUNT = 2;
     }
     SelectionLogic selection_logic = 2;
     int32 actor_system_priority = 3;
@@ -109,12 +109,12 @@
   enum Protocol {
     // C-VLAN, also known as "standard" VLAN inserts a header with the
     // VLAN ID (VID) right before the EtherType.
-    CVLAN = 0;
+    PROTOCOL_CVLAN = 0;
     // S-VLAN, also known as QinQ or 802.1ad (obsolete) inserts a second VLAN ID
     // before the C-VLAN header. This allows stacking two VLANs. The ID
     // specified here is just for the outer VLAN, the inner one can be set by
     // creating another VLAN interface and setting this one to be its parent.
-    SVLAN = 1;
+    PROTOCOL_SVLAN = 1;
   }
   Protocol protocol = 3;
 }
@@ -130,12 +130,12 @@
 message IPv6Autoconfig {
   enum Privacy {
     // Do not generate privacy addresses.
-    DISABLE = 0;
+    PRIVACY_DISABLE = 0;
     // Generate privacy addresses, but prefer non-privacy addresses.
-    AVOID = 1;
+    PRIVACY_AVOID = 1;
     // Generate privacy addresses and use them over other non-privacy
     // addresses.
-    PREFER = 2;
+    PRIVACY_PREFER = 2;
   }
   // privacy controls if and how privacy addresses (see RFC 4941) are used if
   // DHCPv6 is not used for addressing. If DHCPv6 is used for addressing
