syntax = "proto3";

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

package voltha;

import "google/protobuf/empty.proto";
import "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;
}

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) {}

}
