// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.router.config;

enum ChannelWidth {
    AUTO = 0;
    WIDTH_20_MHZ = 1;
    WIDTH_40_MHZ = 2;
    WIDTH_80_MHZ = 3;
    WIDTH_160_MHZ = 4;
};

bits Band : uint8 {
    BAND_2400_MHZ = 1;
    BAND_5000_MHZ = 2;
};

flexible union ChannelNumber {
    1: uint32 number;
    2: Band auto_band;
};

struct Channel {
    /// [0] is primary channel, [1] (if provided) is secondary for HT/VHT.
    vector<ChannelNumber>:2 ch;
    ChannelWidth width;
};

struct Radio {
    Id element;
    uint32 phy;
    Channel channel;
};

// TODO(guzt): Add mesh related information.

struct WlanNetwork {
    Id element;
    string name;
    string psk;
    vector<Id> radio_phys;
    bool enable_band_steering;
};

struct Regulatory {
    Id element;
    string county_code;
};
