Skip to content

Commit

Permalink
Project import generated by Copybara.
Browse files Browse the repository at this point in the history
GitOrigin-RevId: f0619c08c7373225c74fb184b0ae2efea35bb327
  • Loading branch information
Aalyria Technologies, Inc authored and nihar-aalyria committed Jun 11, 2024
1 parent b860b0b commit a6182a3
Show file tree
Hide file tree
Showing 24 changed files with 904 additions and 99 deletions.
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ bazel_dep(name = "gazelle", version = "0.35.0")
bazel_dep(name = "container_structure_test", version = "1.16.0", dev_dependency = True)

go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk")
go_sdk.download(version = "1.22.1")
go_sdk.download(version = "1.22.3")

oci = use_extension("@rules_oci//oci:extensions.bzl", "oci")
oci.pull(
Expand Down
6 changes: 3 additions & 3 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ go_rules_dependencies()

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

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

go_repository(
Expand Down
5 changes: 4 additions & 1 deletion api/cdpi/v1alpha/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ cpp_grpc_library(

go_proto_library(
name = "cdpi_go_grpc",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
compilers = [
"@io_bazel_rules_go//proto:go_proto",
"@io_bazel_rules_go//proto:go_grpc_v2",
],
importpath = "aalyria.com/spacetime/api/cdpi/v1alpha",
proto = ":cdpi_proto",
deps = [
Expand Down
71 changes: 67 additions & 4 deletions api/common/network.proto
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,20 @@ message PacketClassifier {
}
optional EthernetHeader ethernet_header = 3;

// [RFC 3032](https://rfc-editor.org/rfc/rfc3032)
message MplsLabelStackEntry {
optional uint32 label = 1;
// When matching on additional fields in the MPLS label stack entry is
// needed we can add them here.
optional uint32 label = 1; // restricted to unsigned 20-bit values

// TODO: Consider https://rfc-editor.org/rfc/rfc5462 field.
// optional uint32 traffic_class = 2; unsigned 3-bit values only

// If this MplsLabelStackEntry is last in an ordered list of entries,
// then it may be inferred that it is the bottom of the stack. Whether
// the Bottom-of-Stack bit is to be set or not may require additional
// context.
//
// TODO: Consider explicit Bottom of Stack indicator.
// optional bool s = 3;
}
optional MplsLabelStackEntry mpls_label_stack_entry = 4;

Expand Down Expand Up @@ -116,12 +126,65 @@ message IpFlowClassifier {
reserved 4 to max; // Next IDs.
}

// MEF EVC E-Line Flow Classifier
//
// Suitable for describing a MEF 10.4 section 8.3.1 Point-to-Point EVC,
// specifically:
//
// * "Ethernet Private Line Service (EPL)
// Point-to-Point EVC, all to one bundling"
//
// See also: MEF 6.3 Section 9.1, MEF 7.4 Section 11.1
//
// * "Ethernet Virtual Private Line (EVPL)
// Point-to-Point EVC, bundling and/or multiplexing"
//
// See also: MEF 6.3 Section 9.2, MEF 7.4 Section 11.2
message EvcElineFlowClassifier {
// A locally meaningful name for traffic described by this classifier.
//
// Possible examples include:
// * the MEF 10.4 section 10.1 EVC EP ID service attribute that
// corresponds to the UNI and Map service attributes below, or
// * an identifier for the pseudowire that will carry this traffic.
//
// This does not appear anywhere in the data plane and the value is
// opaque to rest of the system.
optional string id = 1;

// E.g., MEF 10.4 section 10.2 EVC EP UNI service attribute.
optional NetworkInterfaceId uni = 2;

// MEF 10.4 section 10.4 EVC EP Map service attribute.
//
// For section 10.4.1 "EVC EP Map Service Attribute = List", add
// all applicable non-zero, non-4095 Customer Edge VLAN IDs.
//
// For section 10.4.2 "EVC EP Map service attribute = All", leave
// this list empty.
//
// For section 10.4.3 "EVC EP Map service attribute = UT/PT", use
// only a single VLAN ID, either 0 (zero) or the value of the UNI's
// Default CE-VLAN ID attribute (MEF 10.3 and earlier), whichever
// has local meaning.
repeated uint32 vlan_ids = 3;

// For use if Ethernet service frames are classified by another
// network element and encapsulated inside an MPLS label stack
// that uniquely identifies the flow.
//
repeated PacketClassifier.MplsLabelStackEntry mpls_stack = 4;
}

// Rules for matching a network flow.
message FlowClassifier {
optional IpFlowClassifier ip_classifier = 1;

optional PacketClassifier.GenericLayer4Header l4_classifier = 2;

optional PacketClassifier.EthernetHeader ethernet_classifier = 3;
reserved 4 to max; // Next IDs.

optional EvcElineFlowClassifier evc_eline_classifier = 4;

reserved 5 to max; // Next IDs.
}
16 changes: 16 additions & 0 deletions api/common/telemetry.proto
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,22 @@ message RadioStats {
reserved 1, 2;
}

// Summary interface statistics, with the time observed.
//
// Modeled after RFC 8343 `ietf-interfaces` module `statistics`
// entry, slightly simplified:
//
// +--ro statistics
// +--ro in-octets? yang:counter64
// +--ro in-unicast-pkts? yang:counter64
// +--ro in-discards? yang:counter32
// +--ro in-errors? yang:counter32
// +--ro out-octets? yang:counter64
// +--ro out-unicast-pkts? yang:counter64
// +--ro out-discards? yang:counter32
// +--ro out-errors? yang:counter32
//
// Field names inspired by Linux RT_NETLINK structures.
message InterfaceStats {
optional DateTime timestamp = 9;

Expand Down
5 changes: 4 additions & 1 deletion api/federation/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ go_proto_library(

go_proto_library(
name = "v1alpha_go_proto",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
compilers = [
"@io_bazel_rules_go//proto:go_proto",
"@io_bazel_rules_go//proto:go_grpc_v2",
],
importpath = "aalyria.com/spacetime/api/fed/v1alpha",
proto = ":federation_proto",
visibility = ["//visibility:public"],
Expand Down
5 changes: 4 additions & 1 deletion api/nbi/v1alpha/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ python_grpc_library(

go_proto_library(
name = "v1alpha_go_proto",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
compilers = [
"@io_bazel_rules_go//proto:go_proto",
"@io_bazel_rules_go//proto:go_grpc_v2",
],
importpath = "aalyria.com/spacetime/api/nbi/v1alpha",
proto = ":nbi_proto",
deps = [
Expand Down
4 changes: 4 additions & 0 deletions api/nbi/v1alpha/resources/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ proto_library(
],
deps = [
"//api/common:common_proto",
"//api/types:types_proto",
"@com_google_googleapis//google/rpc:code_proto",
"@com_google_googleapis//google/type:interval_proto",
"@com_google_googleapis//google/type:money_proto",
Expand All @@ -51,6 +52,7 @@ cpp_grpc_library(
protos = [":resources_proto"],
deps = [
"//api/common:common_cpp_proto",
"//api/types:types_cpp_proto",
"@com_google_googleapis//google/api:annotations_cc_proto",
"@com_google_googleapis//google/rpc:code_cc_proto",
"@com_google_googleapis//google/type:interval_cc_proto",
Expand All @@ -64,6 +66,7 @@ go_proto_library(
proto = ":resources_proto",
deps = [
"//api/common:common_go_proto",
"//api/types:types_go_proto",
"@org_golang_google_genproto//googleapis/type/interval",
"@org_golang_google_genproto//googleapis/type/money",
"@org_golang_google_genproto_googleapis_rpc//code",
Expand All @@ -75,6 +78,7 @@ java_grpc_library(
protos = [":resources_proto"],
deps = [
"//api/common:common_java_proto",
"//api/types:types_java_proto",
"@com_google_googleapis//google/api:api_java_proto",
"@com_google_googleapis//google/rpc:rpc_java_proto",
"@com_google_googleapis//google/type:type_java_proto",
Expand Down
12 changes: 2 additions & 10 deletions api/nbi/v1alpha/resources/intent.proto
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,8 @@ option go_package = "aalyria.com/spacetime/api/nbi/v1alpha/resources";
enum IntentState {
UNKNOWN = 0;
INSTALL_REQ = 1;
PUSHING = 9;
SCHEDULED = 10;
SCHEDULING = 12;
MAYBE_INSTALLED = 11;
INSTALLING = 3; // In process of being deprecated.
INSTALLED = 4;
WITHDRAW_REQ = 5;
Expand All @@ -49,7 +47,7 @@ enum IntentState {
WITHDRAWING = 6;
FAILED = 8;

reserved 2, 7;
reserved 2, 7, 9, 11;
}

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

// Automatically retry installation if the intent fails to install.
// The first try will occur at time_to_enact (or immediately, if unset). If
// the intent fails to install, it will retry immediately, until the intent is
// removed.
optional bool auto_retry = 12;

reserved 2, 18 to max; // Next IDs.
reserved 2, 12, 18 to max; // Next IDs.
}

// Models an intent to configure steerable beams and/or radio resources.
Expand Down
26 changes: 24 additions & 2 deletions api/nbi/v1alpha/resources/network_element.proto
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package aalyria.spacetime.api.nbi.v1alpha.resources;

import "api/common/time.proto";
import "api/common/wireless_transceiver.proto";
import "api/types/ietf.proto";
import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";

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

// Models an abstract network node (a device, or an entire network).
message NetworkNode {
reserved 3, 6, 11 to max;
reserved 6, 11 to max;

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

message RoutingConfiguration {
// The router ID of this NetworkNode.
optional types.RouterId router_id = 1;

// The Segment Routing (RFC 8402) Node SID for this NetworkNode.
optional types.SegmentId node_sid = 2;
}
// Note: Only a single IP VRF at this time.
optional RoutingConfiguration routing_config = 3;

// A node may optionally act a gateway for a set of specified IP subnets.
repeated string subnet = 8;

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

// A node-unique identifier for the network interface.
optional string interface_id = 1;
Expand Down Expand Up @@ -160,6 +171,17 @@ message NetworkInterface {
WirelessDevice wireless = 6;
}

message RoutingConfiguration {
message AdjacencySidEntry {
// Required.
optional types.SegmentId sid = 1;
// Only required if the link is not P2P (e.g., a LAN).
optional string next_hop = 2; // An IPv4 or IPv6 address.
}
repeated AdjacencySidEntry adjacency_sids = 1;
}
optional RoutingConfiguration routing_config = 7;

message Impairment {
enum Type {
// The interface is known to be unusable.
Expand Down
56 changes: 55 additions & 1 deletion api/nbi/v1alpha/resources/network_link.proto
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package aalyria.spacetime.api.nbi.v1alpha.resources;
import "api/common/control_radio.proto";
import "api/common/coordinates.proto";
import "api/common/network.proto";
import "api/common/platform_antenna.proto";
import "api/common/time.proto";
import "api/common/wireless_transceiver.proto";

Expand Down Expand Up @@ -57,6 +58,46 @@ message Radio {
// For optical transceivers, this may be converted to wavelength.
optional uint64 center_frequency_hz = 1;
optional string band_profile_id = 2;
optional aalyria.spacetime.api.common.Polarization polarization = 3;

message TxRadioConfiguration {

message BeamPower {
enum PowerType {
POWER_TYPE_UNSPECIFIED = 0;
POWER_TYPE_NADIR_EQUIVALENT_BEAM_PEAK_EIRP_PSD_DBW_PER_MHZ = 1;
POWER_TYPE_BEAM_PEAK_EIRP_PSD_DBW_PER_MHZ = 2;
}
optional PowerType power_type = 1;
optional double power_value = 2;
}
optional BeamPower transmit_power = 1;

optional string modulator_id = 2;

enum ModulatorMode {
MODULATOR_MODE_UNSPECIFIED = 0;
MODULATOR_MODE_DVB_S2X = 1;
MODULATOR_MODE_DIGITAL_TRANSPARENT = 2;
}
optional ModulatorMode modulator_mode = 3;
}

optional TxRadioConfiguration tx_radio = 4;

optional RxRadioConfiguration rx_radio = 5;
}

message RxRadioConfiguration {
optional string demodulator_id = 1;

enum DemodulatorMode {
DEMODULATOR_MODE_UNSPECIFIED = 0;
DEMODULATOR_MODE_DVB_S2X = 1;
DEMODULATOR_MODE_DVB_RCS2_TDMA = 2;
DEMODULATOR_MODE_DIGITAL_TRANSPARENT = 3;
}
optional DemodulatorMode demodulator_mode = 2;
}

message LinkEnd {
Expand Down Expand Up @@ -84,7 +125,9 @@ message BidirectionalLink {
optional Radio b_to_a_radio = 4;
}

// Configures a directional link.
// Configures a directional link. The link may be a point-to-multipoint link
// between a transmitter and a list of receiving platforms, or a
// point-to-point link between two transceivers.
message DirectionalLink {
// Identifies the wireless network interface.
optional aalyria.spacetime.api.common.NetworkInterfaceId id = 1;
Expand All @@ -96,6 +139,17 @@ message DirectionalLink {
// This field is optional and may be omitted for wireless interfaces whose
// beams are fixed to the platform. It is required for steerable beams.
optional BeamTarget target = 3;

// Identifies the platforms that are on the receiving end of the
// point-to-multipoint link.
repeated RxPlatform rx_platforms = 4;
}

message RxPlatform {
optional aalyria.spacetime.api.common.NetworkInterfaceId id = 1;

// Defines the radio configuration to apply to the receiving platform.
optional RxRadioConfiguration rx_radio = 2;
}

// Defines whether or not a link is usable or possible.
Expand Down
Loading

0 comments on commit a6182a3

Please sign in to comment.