syntax = "proto3";

option go_package = "github.com/opencord/voltha-protos/go/voltha";

package voltha;

import "google/protobuf/empty.proto";
import "voltha_protos/openflow_13.proto";


message PonSimOnuDeviceInfo {
    int32 uni_port = 1;
    string serial_number = 2;
}

message PonSimDeviceInfo {
    int32 nni_port = 1;
    repeated PonSimOnuDeviceInfo onus = 2;
}

message FlowTable {
    int32 port = 1;  // Used to address right device
    repeated openflow_13.ofp_flow_stats flows = 2;
}

message PonSimFrame {
    string id = 1;
    bytes payload = 2;
    int32 out_port = 3;
}

message PonSimPacketCounter {
    string name = 1;
    int64 value = 2;
}

message PonSimPortMetrics {
    string port_name = 1;
    repeated PonSimPacketCounter packets = 2;
}

message PonSimMetrics {
    string device = 1;
    repeated PonSimPortMetrics metrics = 2;
}

message PonSimMetricsRequest {
    int32 port = 1;
}

service PonSim {
    rpc SendFrame(PonSimFrame)
        returns (google.protobuf.Empty) {}

    rpc ReceiveFrames(google.protobuf.Empty)
        returns (stream PonSimFrame) {}

    rpc GetDeviceInfo(google.protobuf.Empty)
        returns(PonSimDeviceInfo) {}

    rpc UpdateFlowTable(FlowTable)
        returns(google.protobuf.Empty) {}

    rpc GetStats(google.protobuf.Empty)
        returns(PonSimMetrics) {}

}
