WifiNetwork.h revision 3c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5
182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat/*
282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * Copyright (C) 2008 The Android Open Source Project
382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *
482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * you may not use this file except in compliance with the License.
682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * You may obtain a copy of the License at
782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *
882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *
1082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * Unless required by applicable law or agreed to in writing, software
1182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
1282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * See the License for the specific language governing permissions and
1482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * limitations under the License.
1582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat */
1682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
1782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#ifndef _WIFI_NETWORK_H
1882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#define _WIFI_NETWORK_H
1982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
2082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#include <sys/types.h>
2182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
223c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat#include <utils/List.h>
2382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
2482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass KeyManagementMask {
2582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
2682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t NONE      = 0;
2782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WPA_PSK   = 0x01;
2882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WPA_EAP   = 0x02;
2982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t IEEE8021X = 0x04;
3082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t ALL       = WPA_PSK | WPA_EAP | IEEE8021X;
3182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
3282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
3382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass SecurityProtocolMask {
3482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
3582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WPA = 0x01;
3682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t RSN = 0x02;
3782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
3882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
3982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass AuthenticationAlgorithmMask {
4082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
4182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t OPEN   = 0x01;
4282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t SHARED = 0x02;
4382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t LEAP   = 0x04;
4482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
4582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
463c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass PairwiseCiphersMask {
4782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
4882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t NONE = 0x00;
4982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t TKIP = 0x01;
5082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t CCMP = 0x02;
5182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
5282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
533c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass GroupCiphersMask {
5482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
5582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WEP40  = 0x01;
5682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WEP104 = 0x02;
5782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t TKIP   = 0x04;
5882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t CCMP   = 0x08;
5982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
6082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
6182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass Supplicant;
623c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass InterfaceConfig;
633c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass Controller;
643c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass WifiController;
6582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
663c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat#include "IPropertyProvider.h"
673c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
683c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass WifiNetwork : public IPropertyProvider{
693c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatpublic:
703c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    static const char *PropertyNames[];
713c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
723c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatprivate:
7382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    Supplicant *mSuppl;
743c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    InterfaceConfig *mIfaceCfg;
753c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiController *mController;
7682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
7782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
7882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Unique network id - normally provided by supplicant
7982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
8082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int mNetid;
8182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
8282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
8382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The networks' SSID. Can either be an ASCII string,
8482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * which must be enclosed in double quotation marks
8582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * (ie: "MyNetwork"), or a string of hex digits which
8682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * are not enclosed in quotes (ie: 01ab7893)
8782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
8882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mSsid;
8982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
9082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
9182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * When set, this entry should only be used
9282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * when associating with the AP having the specified
9382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * BSSID. The value is a string in the format of an
9482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Ethernet MAC address
9582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
9682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mBssid;
9782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
9882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
9982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     *  Pre-shared key for use with WPA-PSK
10082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
10182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mPsk;
10282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
10382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
10482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Up to four WEP keys. Either in ASCII string enclosed in
10582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * double quotes, or a string of hex digits
10682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
10782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mWepKeys[4];
10882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
10982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
11082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Default WEP key index, ranging from 0 -> NUM_WEP_KEYS -1
11182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
11282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int mDefaultKeyIndex;
11382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
11482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
11582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Priority determines the preference given to a network by
11682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * supplicant when choosing an access point with which
11782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * to associate
11882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
11982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int mPriority;
12082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
12182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
12282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * This is a network that does not broadcast it's SSID, so an
12382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * SSID-specific probe request must be used for scans.
12482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
12582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mHiddenSsid;
12682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
12782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
12882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of key management protocols supported by this configuration.
12982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
13082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t mAllowedKeyManagement;
13182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
13282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
13382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of security protocols supported by this configuration.
13482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
13582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t mAllowedProtocols;
13682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
13782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
13882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of authentication protocols supported by this configuration.
13982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
14082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t mAllowedAuthAlgorithms;
14182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
14282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
14382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of pairwise ciphers for WPA supported by this configuration.
14482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
14582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t mAllowedPairwiseCiphers;
14682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
14782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
14882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of group ciphers for WPA supported by this configuration.
14982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
15082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t mAllowedGroupCiphers;
15182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
1523c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    /*
1533c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat     * Set if this Network is enabled
1543c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat     */
1553c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    bool mEnabled;
1563c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
1573c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatprivate:
1583c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork();
1593c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int registerProperties();
1603c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int unregisterProperties();
1613c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
16282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
1633c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork(WifiController *c, Supplicant *suppl, int networkId);
1643c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork(WifiController *c, Supplicant *suppl, const char *data);
1653c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
16682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    virtual ~WifiNetwork();
16782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
1683c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork *clone();
1693c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
17082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int getNetworkId() { return mNetid; }
17182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getSsid() { return mSsid; }
17282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getBssid() { return mBssid; }
17382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getPsk() { return mPsk; }
17482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getWepKey(int idx) { return mWepKeys[idx]; }
17582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int getDefaultKeyIndex() { return mDefaultKeyIndex; }
17682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int getPriority() { return mPriority; }
17782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getHiddenSsid() { return mHiddenSsid; }
17882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t getAllowedKeyManagement() { return mAllowedKeyManagement; }
17982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t getAllowedProtocols() { return mAllowedProtocols; }
18082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t getAllowedAuthAlgorithms() { return mAllowedAuthAlgorithms; }
18182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t getAllowedPairwiseCiphers() { return mAllowedPairwiseCiphers; }
18282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    uint32_t getAllowedGroupCiphers() { return mAllowedGroupCiphers; }
1833c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    bool getEnabled() { return mEnabled; }
1843c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    Controller *getController() { return (Controller *) mController; }
18582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
1863c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int set(const char *name, const char *value);
1873c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    const char *get(const char *name, char *buffer, size_t maxsize);
1883c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
1893c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat//    InterfaceConfig *getIfaceCfg() { return mIfaceCfg; }
1903c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
1913c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setEnabled(bool enabled);
1923c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setSsid(const char *ssid);
1933c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setBssid(const char *bssid);
1943c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setPsk(const char *psk);
1953c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setWepKey(int idx, const char *key);
19682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setDefaultKeyIndex(int idx);
19782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setPriority(int pri);
1983c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setHiddenSsid(const char *ssid);
19982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setAllowedKeyManagement(uint32_t mask);
20082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setAllowedProtocols(uint32_t mask);
2013c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setAllowedAuthAlgorithms(uint32_t mask);
20282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setAllowedPairwiseCiphers(uint32_t mask);
20382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setAllowedGroupCiphers(uint32_t mask);
2043c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
2053c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    // XXX:Should this really be exposed?.. meh
2063c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int refresh();
20782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
20882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
20982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehattypedef android::List<WifiNetwork *> WifiNetworkCollection;
21082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
21182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#endif
212