Skip to content

Commit 07c11ba

Browse files
Merge pull request #77 from aalyria/34C0F5EE7CDD237AAA15E73070735946
Project import generated by Copybara.
2 parents b860b0b + a6182a3 commit 07c11ba

File tree

24 files changed

+904
-99
lines changed

24 files changed

+904
-99
lines changed

MODULE.bazel

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ bazel_dep(name = "gazelle", version = "0.35.0")
3838
bazel_dep(name = "container_structure_test", version = "1.16.0", dev_dependency = True)
3939

4040
go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk")
41-
go_sdk.download(version = "1.22.1")
41+
go_sdk.download(version = "1.22.3")
4242

4343
oci = use_extension("@rules_oci//oci:extensions.bzl", "oci")
4444
oci.pull(

WORKSPACE

+3-3
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ go_rules_dependencies()
135135

136136
# Install the Go toolchains. (https://github.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#go-toolchain)
137137
go_register_toolchains(
138-
version = "1.22.2",
138+
version = "1.22.3",
139139
)
140140

141141
gazelle_dependencies()
@@ -472,8 +472,8 @@ go_repository(
472472
# https://github.com/bazelbuild/rules_go/blob/master/go/dependencies.rst#grpc-dependencies.
473473
build_file_proto_mode = "disable",
474474
importpath = "google.golang.org/grpc",
475-
sum = "h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=",
476-
version = "v1.62.1",
475+
sum = "h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=",
476+
version = "v1.63.2",
477477
)
478478

479479
go_repository(

api/cdpi/v1alpha/BUILD

+4-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ cpp_grpc_library(
4949

5050
go_proto_library(
5151
name = "cdpi_go_grpc",
52-
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
52+
compilers = [
53+
"@io_bazel_rules_go//proto:go_proto",
54+
"@io_bazel_rules_go//proto:go_grpc_v2",
55+
],
5356
importpath = "aalyria.com/spacetime/api/cdpi/v1alpha",
5457
proto = ":cdpi_proto",
5558
deps = [

api/common/network.proto

+67-4
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,20 @@ message PacketClassifier {
8080
}
8181
optional EthernetHeader ethernet_header = 3;
8282

83+
// [RFC 3032](https://rfc-editor.org/rfc/rfc3032)
8384
message MplsLabelStackEntry {
84-
optional uint32 label = 1;
85-
// When matching on additional fields in the MPLS label stack entry is
86-
// needed we can add them here.
85+
optional uint32 label = 1; // restricted to unsigned 20-bit values
86+
87+
// TODO: Consider https://rfc-editor.org/rfc/rfc5462 field.
88+
// optional uint32 traffic_class = 2; unsigned 3-bit values only
89+
90+
// If this MplsLabelStackEntry is last in an ordered list of entries,
91+
// then it may be inferred that it is the bottom of the stack. Whether
92+
// the Bottom-of-Stack bit is to be set or not may require additional
93+
// context.
94+
//
95+
// TODO: Consider explicit Bottom of Stack indicator.
96+
// optional bool s = 3;
8797
}
8898
optional MplsLabelStackEntry mpls_label_stack_entry = 4;
8999

@@ -116,12 +126,65 @@ message IpFlowClassifier {
116126
reserved 4 to max; // Next IDs.
117127
}
118128

129+
// MEF EVC E-Line Flow Classifier
130+
//
131+
// Suitable for describing a MEF 10.4 section 8.3.1 Point-to-Point EVC,
132+
// specifically:
133+
//
134+
// * "Ethernet Private Line Service (EPL)
135+
// Point-to-Point EVC, all to one bundling"
136+
//
137+
// See also: MEF 6.3 Section 9.1, MEF 7.4 Section 11.1
138+
//
139+
// * "Ethernet Virtual Private Line (EVPL)
140+
// Point-to-Point EVC, bundling and/or multiplexing"
141+
//
142+
// See also: MEF 6.3 Section 9.2, MEF 7.4 Section 11.2
143+
message EvcElineFlowClassifier {
144+
// A locally meaningful name for traffic described by this classifier.
145+
//
146+
// Possible examples include:
147+
// * the MEF 10.4 section 10.1 EVC EP ID service attribute that
148+
// corresponds to the UNI and Map service attributes below, or
149+
// * an identifier for the pseudowire that will carry this traffic.
150+
//
151+
// This does not appear anywhere in the data plane and the value is
152+
// opaque to rest of the system.
153+
optional string id = 1;
154+
155+
// E.g., MEF 10.4 section 10.2 EVC EP UNI service attribute.
156+
optional NetworkInterfaceId uni = 2;
157+
158+
// MEF 10.4 section 10.4 EVC EP Map service attribute.
159+
//
160+
// For section 10.4.1 "EVC EP Map Service Attribute = List", add
161+
// all applicable non-zero, non-4095 Customer Edge VLAN IDs.
162+
//
163+
// For section 10.4.2 "EVC EP Map service attribute = All", leave
164+
// this list empty.
165+
//
166+
// For section 10.4.3 "EVC EP Map service attribute = UT/PT", use
167+
// only a single VLAN ID, either 0 (zero) or the value of the UNI's
168+
// Default CE-VLAN ID attribute (MEF 10.3 and earlier), whichever
169+
// has local meaning.
170+
repeated uint32 vlan_ids = 3;
171+
172+
// For use if Ethernet service frames are classified by another
173+
// network element and encapsulated inside an MPLS label stack
174+
// that uniquely identifies the flow.
175+
//
176+
repeated PacketClassifier.MplsLabelStackEntry mpls_stack = 4;
177+
}
178+
119179
// Rules for matching a network flow.
120180
message FlowClassifier {
121181
optional IpFlowClassifier ip_classifier = 1;
122182

123183
optional PacketClassifier.GenericLayer4Header l4_classifier = 2;
124184

125185
optional PacketClassifier.EthernetHeader ethernet_classifier = 3;
126-
reserved 4 to max; // Next IDs.
186+
187+
optional EvcElineFlowClassifier evc_eline_classifier = 4;
188+
189+
reserved 5 to max; // Next IDs.
127190
}

api/common/telemetry.proto

+16
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,22 @@ message RadioStats {
159159
reserved 1, 2;
160160
}
161161

162+
// Summary interface statistics, with the time observed.
163+
//
164+
// Modeled after RFC 8343 `ietf-interfaces` module `statistics`
165+
// entry, slightly simplified:
166+
//
167+
// +--ro statistics
168+
// +--ro in-octets? yang:counter64
169+
// +--ro in-unicast-pkts? yang:counter64
170+
// +--ro in-discards? yang:counter32
171+
// +--ro in-errors? yang:counter32
172+
// +--ro out-octets? yang:counter64
173+
// +--ro out-unicast-pkts? yang:counter64
174+
// +--ro out-discards? yang:counter32
175+
// +--ro out-errors? yang:counter32
176+
//
177+
// Field names inspired by Linux RT_NETLINK structures.
162178
message InterfaceStats {
163179
optional DateTime timestamp = 9;
164180

api/federation/BUILD

+4-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ go_proto_library(
4242

4343
go_proto_library(
4444
name = "v1alpha_go_proto",
45-
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
45+
compilers = [
46+
"@io_bazel_rules_go//proto:go_proto",
47+
"@io_bazel_rules_go//proto:go_grpc_v2",
48+
],
4649
importpath = "aalyria.com/spacetime/api/fed/v1alpha",
4750
proto = ":federation_proto",
4851
visibility = ["//visibility:public"],

api/nbi/v1alpha/BUILD

+4-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ python_grpc_library(
7171

7272
go_proto_library(
7373
name = "v1alpha_go_proto",
74-
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
74+
compilers = [
75+
"@io_bazel_rules_go//proto:go_proto",
76+
"@io_bazel_rules_go//proto:go_grpc_v2",
77+
],
7578
importpath = "aalyria.com/spacetime/api/nbi/v1alpha",
7679
proto = ":nbi_proto",
7780
deps = [

api/nbi/v1alpha/resources/BUILD

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ proto_library(
3636
],
3737
deps = [
3838
"//api/common:common_proto",
39+
"//api/types:types_proto",
3940
"@com_google_googleapis//google/rpc:code_proto",
4041
"@com_google_googleapis//google/type:interval_proto",
4142
"@com_google_googleapis//google/type:money_proto",
@@ -51,6 +52,7 @@ cpp_grpc_library(
5152
protos = [":resources_proto"],
5253
deps = [
5354
"//api/common:common_cpp_proto",
55+
"//api/types:types_cpp_proto",
5456
"@com_google_googleapis//google/api:annotations_cc_proto",
5557
"@com_google_googleapis//google/rpc:code_cc_proto",
5658
"@com_google_googleapis//google/type:interval_cc_proto",
@@ -64,6 +66,7 @@ go_proto_library(
6466
proto = ":resources_proto",
6567
deps = [
6668
"//api/common:common_go_proto",
69+
"//api/types:types_go_proto",
6770
"@org_golang_google_genproto//googleapis/type/interval",
6871
"@org_golang_google_genproto//googleapis/type/money",
6972
"@org_golang_google_genproto_googleapis_rpc//code",
@@ -75,6 +78,7 @@ java_grpc_library(
7578
protos = [":resources_proto"],
7679
deps = [
7780
"//api/common:common_java_proto",
81+
"//api/types:types_java_proto",
7882
"@com_google_googleapis//google/api:api_java_proto",
7983
"@com_google_googleapis//google/rpc:rpc_java_proto",
8084
"@com_google_googleapis//google/type:type_java_proto",

api/nbi/v1alpha/resources/intent.proto

+2-10
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,8 @@ option go_package = "aalyria.com/spacetime/api/nbi/v1alpha/resources";
3636
enum IntentState {
3737
UNKNOWN = 0;
3838
INSTALL_REQ = 1;
39-
PUSHING = 9;
4039
SCHEDULED = 10;
4140
SCHEDULING = 12;
42-
MAYBE_INSTALLED = 11;
4341
INSTALLING = 3; // In process of being deprecated.
4442
INSTALLED = 4;
4543
WITHDRAW_REQ = 5;
@@ -49,7 +47,7 @@ enum IntentState {
4947
WITHDRAWING = 6;
5048
FAILED = 8;
5149

52-
reserved 2, 7;
50+
reserved 2, 7, 9, 11;
5351
}
5452

5553
// Specifies a policy that reserves the use of a network resource.
@@ -114,13 +112,7 @@ message Intent {
114112
repeated aalyria.spacetime.api.common.ScheduledControlUpdate
115113
compiled_withdrawal_updates = 17;
116114

117-
// Automatically retry installation if the intent fails to install.
118-
// The first try will occur at time_to_enact (or immediately, if unset). If
119-
// the intent fails to install, it will retry immediately, until the intent is
120-
// removed.
121-
optional bool auto_retry = 12;
122-
123-
reserved 2, 18 to max; // Next IDs.
115+
reserved 2, 12, 18 to max; // Next IDs.
124116
}
125117

126118
// Models an intent to configure steerable beams and/or radio resources.

api/nbi/v1alpha/resources/network_element.proto

+24-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package aalyria.spacetime.api.nbi.v1alpha.resources;
1818

1919
import "api/common/time.proto";
2020
import "api/common/wireless_transceiver.proto";
21+
import "api/types/ietf.proto";
2122
import "google/protobuf/any.proto";
2223
import "google/protobuf/duration.proto";
2324

@@ -26,7 +27,7 @@ option go_package = "aalyria.com/spacetime/api/nbi/v1alpha/resources";
2627

2728
// Models an abstract network node (a device, or an entire network).
2829
message NetworkNode {
29-
reserved 3, 6, 11 to max;
30+
reserved 6, 11 to max;
3031

3132
// A globally unique identifier for the network node.
3233
optional string node_id = 1;
@@ -35,6 +36,16 @@ message NetworkNode {
3536
optional string name = 2;
3637
optional string type = 7;
3738

39+
message RoutingConfiguration {
40+
// The router ID of this NetworkNode.
41+
optional types.RouterId router_id = 1;
42+
43+
// The Segment Routing (RFC 8402) Node SID for this NetworkNode.
44+
optional types.SegmentId node_sid = 2;
45+
}
46+
// Note: Only a single IP VRF at this time.
47+
optional RoutingConfiguration routing_config = 3;
48+
3849
// A node may optionally act a gateway for a set of specified IP subnets.
3950
repeated string subnet = 8;
4051

@@ -118,7 +129,7 @@ message SdnAgent {
118129
// Models a network interface (aka network device, port, cable, or adapter).
119130
// Next ID: 18
120131
message NetworkInterface {
121-
reserved 2, 5, 7, 9 to 13, 18 to max;
132+
reserved 2, 5, 9 to 13, 18 to max;
122133

123134
// A node-unique identifier for the network interface.
124135
optional string interface_id = 1;
@@ -160,6 +171,17 @@ message NetworkInterface {
160171
WirelessDevice wireless = 6;
161172
}
162173

174+
message RoutingConfiguration {
175+
message AdjacencySidEntry {
176+
// Required.
177+
optional types.SegmentId sid = 1;
178+
// Only required if the link is not P2P (e.g., a LAN).
179+
optional string next_hop = 2; // An IPv4 or IPv6 address.
180+
}
181+
repeated AdjacencySidEntry adjacency_sids = 1;
182+
}
183+
optional RoutingConfiguration routing_config = 7;
184+
163185
message Impairment {
164186
enum Type {
165187
// The interface is known to be unusable.

api/nbi/v1alpha/resources/network_link.proto

+55-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package aalyria.spacetime.api.nbi.v1alpha.resources;
1919
import "api/common/control_radio.proto";
2020
import "api/common/coordinates.proto";
2121
import "api/common/network.proto";
22+
import "api/common/platform_antenna.proto";
2223
import "api/common/time.proto";
2324
import "api/common/wireless_transceiver.proto";
2425

@@ -57,6 +58,46 @@ message Radio {
5758
// For optical transceivers, this may be converted to wavelength.
5859
optional uint64 center_frequency_hz = 1;
5960
optional string band_profile_id = 2;
61+
optional aalyria.spacetime.api.common.Polarization polarization = 3;
62+
63+
message TxRadioConfiguration {
64+
65+
message BeamPower {
66+
enum PowerType {
67+
POWER_TYPE_UNSPECIFIED = 0;
68+
POWER_TYPE_NADIR_EQUIVALENT_BEAM_PEAK_EIRP_PSD_DBW_PER_MHZ = 1;
69+
POWER_TYPE_BEAM_PEAK_EIRP_PSD_DBW_PER_MHZ = 2;
70+
}
71+
optional PowerType power_type = 1;
72+
optional double power_value = 2;
73+
}
74+
optional BeamPower transmit_power = 1;
75+
76+
optional string modulator_id = 2;
77+
78+
enum ModulatorMode {
79+
MODULATOR_MODE_UNSPECIFIED = 0;
80+
MODULATOR_MODE_DVB_S2X = 1;
81+
MODULATOR_MODE_DIGITAL_TRANSPARENT = 2;
82+
}
83+
optional ModulatorMode modulator_mode = 3;
84+
}
85+
86+
optional TxRadioConfiguration tx_radio = 4;
87+
88+
optional RxRadioConfiguration rx_radio = 5;
89+
}
90+
91+
message RxRadioConfiguration {
92+
optional string demodulator_id = 1;
93+
94+
enum DemodulatorMode {
95+
DEMODULATOR_MODE_UNSPECIFIED = 0;
96+
DEMODULATOR_MODE_DVB_S2X = 1;
97+
DEMODULATOR_MODE_DVB_RCS2_TDMA = 2;
98+
DEMODULATOR_MODE_DIGITAL_TRANSPARENT = 3;
99+
}
100+
optional DemodulatorMode demodulator_mode = 2;
60101
}
61102

62103
message LinkEnd {
@@ -84,7 +125,9 @@ message BidirectionalLink {
84125
optional Radio b_to_a_radio = 4;
85126
}
86127

87-
// Configures a directional link.
128+
// Configures a directional link. The link may be a point-to-multipoint link
129+
// between a transmitter and a list of receiving platforms, or a
130+
// point-to-point link between two transceivers.
88131
message DirectionalLink {
89132
// Identifies the wireless network interface.
90133
optional aalyria.spacetime.api.common.NetworkInterfaceId id = 1;
@@ -96,6 +139,17 @@ message DirectionalLink {
96139
// This field is optional and may be omitted for wireless interfaces whose
97140
// beams are fixed to the platform. It is required for steerable beams.
98141
optional BeamTarget target = 3;
142+
143+
// Identifies the platforms that are on the receiving end of the
144+
// point-to-multipoint link.
145+
repeated RxPlatform rx_platforms = 4;
146+
}
147+
148+
message RxPlatform {
149+
optional aalyria.spacetime.api.common.NetworkInterfaceId id = 1;
150+
151+
// Defines the radio configuration to apply to the receiving platform.
152+
optional RxRadioConfiguration rx_radio = 2;
99153
}
100154

101155
// Defines whether or not a link is usable or possible.

0 commit comments

Comments
 (0)