syntax = "proto3";
package connector;

message GetPortsRequest {
};

message SwitchPort {
    enum Speed {
        SPEED_INVALID = 0;
        SPEED_100M = 1;
        SPEED_1G = 2;
        SPEED_10G = 3;
    };
    string name = 1;
    Speed speed = 2;
    enum LinkState {
        LINKSTATE_INVALID = 0;
        LINKSTATE_DOWN = 1;
        LINKSTATE_UP = 2;
    };
    LinkState link_state = 3;
    enum PortMode {
        PORTMODE_INVALID = 0;
        // Interface is bridged to a VLAN, untagged.
        PORTMODE_SWITCHPORT_UNTAGGED = 1;
        // Interfaces is bridged to several tagged 802.1q VLANs.
        PORTMODE_SWITCHPORT_TAGGED = 2;
        // Interface is in 'generic', both tagged 802.1q and untagged mode.
        PORTMODE_SWITCHPORT_GENERIC = 3;
        // Interface is routed, ie routes packets from a separate L3 network
        // and the Switch is the default gateway for machines in this network.
        PORTMODE_ROUTED = 4;
        // Interface is in a configuration state that cannot be clearly stated
        // in terms of this enum, and should be reconfigured.
        PORTMODE_MANGLED = 5;
    };
    PortMode port_mode = 4;
    // For PORTMODE_SWITCHPORT_UNTAGGED and PORTMODE_SWITCHPORT_GENERIC, the
    // VLAN ID that this interface is natively bridged to.
    int32 vlan_native = 5;
    // For PORTMODE_SWITCHPORT_TAGGED and PORTMODE_SWITCHPORT_GENERIC, the VLAN
    // IDs that the interface is bridged to using 802.1q tags.
    repeated int32 vlan_tagged = 6;
    // For PORTMODE_ROUTED
    repeated string prefixes = 7;
    // Interface MTU
    int32 mtu = 8;
    enum SpanningTreeMode {
        SPANNING_TREE_MODE_INVALID = 0;
        // Send STP BPDU, on timeout switch to Forwarding.
        SPANNING_TREE_MODE_AUTO_PORTFAST = 1;
        // Switch to Forwarding immediately on link up.
        SPANNING_TREE_MODE_PORTFAST = 2;
    };
    SpanningTreeMode spanning_tree_mode = 9;
};

message GetPortsResponse {
    repeated SwitchPort ports = 1;
};

service SwitchControl {
    rpc GetPorts(GetPortsRequest) returns (GetPortsResponse);
};
