/* * * Copyright (c) 2021 Project CHIP Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @file * Utilities for accessing parameters of the network interface and the wireless * statistics(extracted from /proc/net/wireless) on Linux platforms. */ #pragma once #include #include #include namespace chip { namespace DeviceLayer { namespace Internal { static constexpr uint16_t kWiFi_BAND_2_4_GHZ = 2400; static constexpr uint16_t kWiFi_BAND_5_0_GHZ = 5000; static constexpr char kWpaSupplicantServiceName[] = "fi.w1.wpa_supplicant1"; static constexpr char kWpaSupplicantObjectPath[] = "/fi/w1/wpa_supplicant1"; static constexpr char kWpaSupplicantBlobUnknown[] = "fi.w1.wpa_supplicant1.BlobUnknown"; class ConnectivityUtils { public: static uint16_t MapChannelToFrequency(const uint16_t inBand, const uint8_t inChannel); static uint8_t MapFrequencyToChannel(const uint16_t frequency); static app::Clusters::GeneralDiagnostics::InterfaceTypeEnum GetInterfaceConnectionType(const char * ifname); static CHIP_ERROR GetInterfaceHardwareAddrs(const char * ifname, uint8_t * buf, size_t bufSize); static CHIP_ERROR GetInterfaceIPv4Addrs(const char * ifname, uint8_t & size, NetworkInterface * ifp); static CHIP_ERROR GetInterfaceIPv6Addrs(const char * ifname, uint8_t & size, NetworkInterface * ifp); static CHIP_ERROR GetWiFiInterfaceName(char * ifname, size_t bufSize); static CHIP_ERROR GetWiFiChannelNumber(const char * ifname, uint16_t & channelNumber); static CHIP_ERROR GetWiFiRssi(const char * ifname, int8_t & rssi); static CHIP_ERROR GetWiFiBeaconLostCount(const char * ifname, uint32_t & beaconLostCount); static CHIP_ERROR GetWiFiCurrentMaxRate(const char * ifname, uint64_t & currentMaxRate); static CHIP_ERROR GetEthInterfaceName(char * ifname, size_t bufSize); static CHIP_ERROR GetEthPHYRate(const char * ifname, app::Clusters::EthernetNetworkDiagnostics::PHYRateEnum & pHYRate); static CHIP_ERROR GetEthFullDuplex(const char * ifname, bool & fullDuplex); private: static uint16_t Map2400MHz(const uint8_t inChannel); static uint16_t Map5000MHz(const uint8_t inChannel); static double ConvertFrequenceToFloat(const iw_freq * in); static CHIP_ERROR GetWiFiParameter(int skfd, const char * ifname, int request, struct iwreq * pwrq); static CHIP_ERROR GetWiFiStats(int skfd, const char * ifname, struct iw_statistics * stats); }; } // namespace Internal } // namespace DeviceLayer } // namespace chip