syntax = "proto3";
option java_package = "org.onosproject.grpc";

package Link;

enum LinkType {
  // Signifies that this is a direct single-segment link.
  DIRECT = 0;

  // Signifies that this link is potentially comprised from multiple
  //underlying segments or hops, and as such should be used to tag
  // links traversing optical paths, tunnels or intervening 'dark'
  // switches.
  INDIRECT = 1;

  // Signifies that this link is an edge, i.e. host link.
  EDGE = 2;

  // Signifies that this link represents a logical link backed by
  // some form of a tunnel, e.g., GRE, MPLS, ODUk, OCH.
  TUNNEL = 3;

  // Signifies that this link is realized by fiber (either single channel or WDM).
  OPTICAL = 4;

  // Signifies that this link is a virtual link or a pseudo-wire.
  VIRTUAL = 5;
}

message ConnectPoint {
  oneof element_id {
    // DeviceID as String DeviceId#toString
    string device_id = 1;

    // TODO add support to other element_id if required
  }
  // PortNumber as String PortNumber#toString
  string port_number = 2;
}

message LinkDescription {
  ConnectPoint src = 1;
  ConnectPoint dst = 2;
  LinkType type = 3;
  map<string, string> annotations = 4;
}

// Message te represent no return value
message Void {}

message LinkDetectedMsg {
  // ProviderId scheme only
  string provider_id = 1;
  LinkDescription link_description = 2;
}

message LinkVanishedMsg {
  // ProviderId scheme only
  string provider_id = 1;
  oneof subject {
    LinkDescription link_description = 2;
    ConnectPoint connect_point = 3;
    string device_id = 4;
  }
}

service LinkProviderServiceRpc {
  rpc LinkDetected(LinkDetectedMsg) returns (Void);
  rpc LinkVanished(LinkVanishedMsg) returns (Void);
}
