Skip to content

Commit 1ac6c45

Browse files
committed
TUN-9883: Add new datagram v3 feature flag
After the previous rollout was reverted, the original `support_datagram_v3_1` is deprecated and replaced with `support_datagram_v3_2`. Closes TUN-9883
1 parent d78e64c commit 1ac6c45

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

client/config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ func (m *mockFeatureSelector) Snapshot() features.FeatureSnapshot {
4545
return features.FeatureSnapshot{
4646
PostQuantum: features.PostQuantumPrefer,
4747
DatagramVersion: features.DatagramV3,
48-
FeaturesList: []string{features.FeaturePostQuantum, features.FeatureDatagramV3_1},
48+
FeaturesList: []string{features.FeaturePostQuantum, features.FeatureDatagramV3_2},
4949
}
5050
}

features/features.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ const (
1010
FeaturePostQuantum = "postquantum"
1111
FeatureQUICSupportEOF = "support_quic_eof"
1212
FeatureManagementLogs = "management_logs"
13-
FeatureDatagramV3_1 = "support_datagram_v3_1"
13+
FeatureDatagramV3_2 = "support_datagram_v3_2"
1414

15-
DeprecatedFeatureDatagramV3 = "support_datagram_v3" // Deprecated: TUN-9291
15+
DeprecatedFeatureDatagramV3 = "support_datagram_v3" // Deprecated: TUN-9291
16+
DeprecatedFeatureDatagramV3_1 = "support_datagram_v3_1" // Deprecated: TUN-9883
1617
)
1718

1819
var defaultFeatures = []string{
@@ -26,6 +27,7 @@ var defaultFeatures = []string{
2627
// List of features that are no longer in-use.
2728
var deprecatedFeatures = []string{
2829
DeprecatedFeatureDatagramV3,
30+
DeprecatedFeatureDatagramV3_1,
2931
}
3032

3133
// Features set by user provided flags
@@ -58,7 +60,7 @@ const (
5860
// DatagramV2 is the currently supported datagram protocol for UDP and ICMP packets
5961
DatagramV2 DatagramVersion = FeatureDatagramV2
6062
// DatagramV3 is a new datagram protocol for UDP and ICMP packets. It is not backwards compatible with datagram v2.
61-
DatagramV3 DatagramVersion = FeatureDatagramV3_1
63+
DatagramV3 DatagramVersion = FeatureDatagramV3_2
6264
)
6365

6466
// Remove any duplicate features from the list and remove deprecated features

features/selector.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ const (
2323
// If the TXT record is missing a key, the field will unmarshal to the default Go value
2424

2525
type featuresRecord struct {
26-
DatagramV3Percentage uint32 `json:"dv3_1"`
26+
DatagramV3Percentage uint32 `json:"dv3_2"`
2727

2828
// DatagramV3Percentage int32 `json:"dv3"` // Removed in TUN-9291
29+
// DatagramV3Percentage uint32 `json:"dv3_1"` // Removed in TUN-9883
2930
// PostQuantumPercentage int32 `json:"pq"` // Removed in TUN-7970
3031
}
3132

@@ -105,7 +106,7 @@ func (fs *featureSelector) postQuantumMode() PostQuantumMode {
105106

106107
func (fs *featureSelector) datagramVersion() DatagramVersion {
107108
// If user provides the feature via the cli, we take it as priority over remote feature evaluation
108-
if slices.Contains(fs.cliFeatures, FeatureDatagramV3_1) {
109+
if slices.Contains(fs.cliFeatures, FeatureDatagramV3_2) {
109110
return DatagramV3
110111
}
111112
// If the user specifies DatagramV2, we also take that over remote

features/selector_test.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ func TestUnmarshalFeaturesRecord(t *testing.T) {
2222
expectedPercentage uint32
2323
}{
2424
{
25-
record: []byte(`{"dv3_1":0}`),
25+
record: []byte(`{"dv3_2":0}`),
2626
expectedPercentage: 0,
2727
},
2828
{
29-
record: []byte(`{"dv3_1":39}`),
29+
record: []byte(`{"dv3_2":39}`),
3030
expectedPercentage: 39,
3131
},
3232
{
33-
record: []byte(`{"dv3_1":100}`),
33+
record: []byte(`{"dv3_2":100}`),
3434
expectedPercentage: 100,
3535
},
3636
{
@@ -40,7 +40,7 @@ func TestUnmarshalFeaturesRecord(t *testing.T) {
4040
record: []byte(`{"kyber":768}`), // Unmarshal to default struct if key is not present
4141
},
4242
{
43-
record: []byte(`{"pq": 101,"dv3":100}`), // Expired keys don't unmarshal to anything
43+
record: []byte(`{"pq": 101,"dv3":100,"dv3_1":100}`), // Expired keys don't unmarshal to anything
4444
},
4545
}
4646

@@ -111,10 +111,10 @@ func TestFeaturePrecedenceEvaluationDatagramVersion(t *testing.T) {
111111
},
112112
{
113113
name: "user_specified_v3",
114-
cli: []string{FeatureDatagramV3_1},
114+
cli: []string{FeatureDatagramV3_2},
115115
remote: featuresRecord{},
116-
expectedFeatures: dedupAndRemoveFeatures(append(defaultFeatures, FeatureDatagramV3_1)),
117-
expectedVersion: FeatureDatagramV3_1,
116+
expectedFeatures: dedupAndRemoveFeatures(append(defaultFeatures, FeatureDatagramV3_2)),
117+
expectedVersion: FeatureDatagramV3_2,
118118
},
119119
}
120120

@@ -150,6 +150,12 @@ func TestDeprecatedFeaturesRemoved(t *testing.T) {
150150
remote: featuresRecord{},
151151
expectedFeatures: defaultFeatures,
152152
},
153+
{
154+
name: "support_datagram_v3_1",
155+
cli: []string{DeprecatedFeatureDatagramV3_1},
156+
remote: featuresRecord{},
157+
expectedFeatures: defaultFeatures,
158+
},
153159
}
154160

155161
for _, test := range tests {

0 commit comments

Comments
 (0)