// 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;
};

xunion ChannelNumber {
    uint32 number;
    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;
};
