155714Skris/* 2120631Snectar * Copyright 2010, Haiku, Inc. All Rights Reserved. 3120631Snectar * Distributed under the terms of the MIT License. 4120631Snectar */ 5120631Snectar#ifndef _NETWORK_DEVICE_H 6120631Snectar#define _NETWORK_DEVICE_H 7120631Snectar 8120631Snectar 9120631Snectar#include <net/if.h> 10296465Sdelphij 11120631Snectar#include <NetworkAddress.h> 12120631Snectar 13120631Snectar 14120631Snectarclass BNetworkAddress; 15120631Snectar 16120631Snectar 17120631Snectarstruct wireless_network { 18120631Snectar char name[32]; 19120631Snectar BNetworkAddress address; 20120631Snectar uint8 noise_level; 21120631Snectar uint8 signal_strength; 22120631Snectar uint32 flags; 23120631Snectar uint32 authentication_mode; 24120631Snectar uint32 cipher; 25120631Snectar uint32 group_cipher; 26120631Snectar uint32 key_mode; 27120631Snectar}; 28120631Snectar 29120631Snectar// flags 30120631Snectar#define B_NETWORK_IS_ENCRYPTED 0x01 31120631Snectar#define B_NETWORK_IS_PERSISTENT 0x02 32120631Snectar 33120631Snectar// authentication modes 34120631Snectarenum { 35120631Snectar B_NETWORK_AUTHENTICATION_NONE = 0, 36120631Snectar B_NETWORK_AUTHENTICATION_WEP = 1, 37120631Snectar B_NETWORK_AUTHENTICATION_WPA = 2, 38120631Snectar B_NETWORK_AUTHENTICATION_WPA2 = 3 39120631Snectar}; 40120631Snectar 41120631Snectar// cipher algorithms 42120631Snectarenum { 43120631Snectar B_NETWORK_CIPHER_NONE = 0x01, 44120631Snectar B_NETWORK_CIPHER_WEP_40 = 0x02, 45120631Snectar B_NETWORK_CIPHER_WEP_104 = 0x04, 46120631Snectar B_NETWORK_CIPHER_TKIP = 0x08, 47120631Snectar B_NETWORK_CIPHER_CCMP = 0x10, 48120631Snectar B_NETWORK_CIPHER_AES_128_CMAC = 0x20 49120631Snectar}; 50120631Snectar 51120631Snectar// key modes 52120631Snectarenum { 53120631Snectar B_KEY_MODE_IEEE802_1X = 0x0001, 54120631Snectar B_KEY_MODE_PSK = 0x0002, 5555714Skris B_KEY_MODE_NONE = 0x0004, 56296465Sdelphij B_KEY_MODE_FT_IEEE802_1X = 0x0020, 57296465Sdelphij B_KEY_MODE_FT_PSK = 0x0040, 58296465Sdelphij B_KEY_MODE_IEEE802_1X_SHA256 = 0x0080, 59296465Sdelphij B_KEY_MODE_PSK_SHA256 = 0x0100, 60296465Sdelphij B_KEY_MODE_WPS = 0x0200 61296465Sdelphij}; 62296465Sdelphij 6355714Skris 64100936Snectarclass BNetworkDevice { 65100936Snectarpublic: 66100936Snectar BNetworkDevice(); 67100936Snectar BNetworkDevice(const char* name); 68100936Snectar ~BNetworkDevice(); 69100936Snectar 70100936Snectar void Unset(); 71100936Snectar void SetTo(const char* name); 7255714Skris 73100936Snectar const char* Name() const; 74100936Snectar bool Exists() const; 75100936Snectar uint32 Index() const; 7655714Skris 7755714Skris uint32 Flags() const; 7855714Skris bool HasLink() const; 7959191Skris 8055714Skris int32 CountMedia() const; 8155714Skris int32 GetMediaAt(int32 index) const; 8255714Skris 8355714Skris int32 Media() const; 8455714Skris status_t SetMedia(int32 media); 8555714Skris 8655714Skris status_t GetHardwareAddress(BNetworkAddress& address); 87109998Smarkm 88100928Snectar bool IsEthernet(); 89109998Smarkm bool IsWireless(); 90109998Smarkm 91100928Snectar status_t Scan(bool wait = true, 92109998Smarkm bool forceRescan = true); 93109998Smarkm 9459191Skris status_t GetNextNetwork(uint32& cookie, 9559191Skris wireless_network& network); 9659191Skris status_t GetNetwork(const char* name, 9755714Skris wireless_network& network); 9855714Skris status_t GetNetwork(const BNetworkAddress& address, 9955714Skris wireless_network& network); 10068651Skris 10155714Skris status_t JoinNetwork(const char* name, 10268651Skris const char* password = NULL); 10355714Skris status_t JoinNetwork(const wireless_network& network, 10455714Skris const char* password = NULL); 10555714Skris status_t JoinNetwork(const BNetworkAddress& address, 10655714Skris const char* password = NULL); 107296465Sdelphij 108296465Sdelphij status_t LeaveNetwork(const char* name); 109296465Sdelphij status_t LeaveNetwork(const wireless_network& network); 110296465Sdelphij status_t LeaveNetwork(const BNetworkAddress& address); 111296465Sdelphij 112296465Sdelphij status_t GetNextAssociatedNetwork(uint32& cookie, 113296465Sdelphij wireless_network& network); 114296465Sdelphij status_t GetNextAssociatedNetwork(uint32& cookie, 115296465Sdelphij BNetworkAddress& address); 116296465Sdelphij 117296465Sdelphijprivate: 11855714Skris char fName[IF_NAMESIZE]; 11955714Skris}; 12055714Skris 12155714Skris 122296465Sdelphij#endif // _NETWORK_DEVICE_H 123296465Sdelphij