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