1/*
2 * Copyright 2010, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _NETWORK_INTERFACE_H
6#define _NETWORK_INTERFACE_H
7
8
9#include <net/if.h>
10#include <net/if_types.h>
11
12#include <ObjectList.h>
13#include <NetworkAddress.h>
14
15
16class BNetworkInterface;
17class BNetworkRoute;
18
19
20class BNetworkInterfaceAddress {
21public:
22								BNetworkInterfaceAddress();
23								~BNetworkInterfaceAddress();
24
25			status_t			SetTo(const BNetworkInterface& interface,
26									int32 index);
27
28			void				SetAddress(const BNetworkAddress& address);
29			void				SetMask(const BNetworkAddress& mask);
30			void				SetBroadcast(const BNetworkAddress& broadcast);
31			void				SetDestination(
32									const BNetworkAddress& destination);
33
34			BNetworkAddress&	Address() { return fAddress; }
35			BNetworkAddress&	Mask() { return fMask; }
36			BNetworkAddress&	Broadcast() { return fBroadcast; }
37			BNetworkAddress&	Destination() { return fBroadcast; }
38
39			const BNetworkAddress& Address() const { return fAddress; }
40			const BNetworkAddress& Mask() const { return fMask; }
41			const BNetworkAddress& Broadcast() const { return fBroadcast; }
42			const BNetworkAddress& Destination() const { return fBroadcast; }
43
44			void				SetFlags(uint32 flags);
45			uint32				Flags() const { return fFlags; }
46
47			int32				Index() const { return fIndex; }
48
49private:
50			int32				fIndex;
51			BNetworkAddress		fAddress;
52			BNetworkAddress		fMask;
53			BNetworkAddress		fBroadcast;
54			uint32				fFlags;
55};
56
57
58class BNetworkInterface {
59public:
60								BNetworkInterface();
61								BNetworkInterface(const char* name);
62								BNetworkInterface(uint32 index);
63								~BNetworkInterface();
64
65			void				Unset();
66			void				SetTo(const char* name);
67			status_t			SetTo(uint32 index);
68
69			bool				Exists() const;
70
71			const char*			Name() const;
72			uint32				Index() const;
73			uint32				Flags() const;
74			uint32				MTU() const;
75			int32				Media() const;
76			uint32				Metric() const;
77			uint32				Type() const;
78			status_t			GetStats(ifreq_stats& stats);
79			bool				HasLink() const;
80
81			status_t			SetFlags(uint32 flags);
82			status_t			SetMTU(uint32 mtu);
83			status_t			SetMedia(int32 media);
84			status_t			SetMetric(uint32 metric);
85
86			int32				CountAddresses() const;
87			status_t			GetAddressAt(int32 index,
88									BNetworkInterfaceAddress& address);
89			int32				FindAddress(const BNetworkAddress& address);
90			int32				FindFirstAddress(int family);
91
92			status_t			AddAddress(
93									const BNetworkInterfaceAddress& address);
94			status_t			AddAddress(const BNetworkAddress& address);
95			status_t			SetAddress(
96									const BNetworkInterfaceAddress& address);
97			status_t			RemoveAddress(
98									const BNetworkInterfaceAddress& address);
99			status_t			RemoveAddress(const BNetworkAddress& address);
100			status_t			RemoveAddressAt(int32 index);
101
102			status_t			GetHardwareAddress(BNetworkAddress& address);
103
104			status_t			AddRoute(const BNetworkRoute& route);
105			status_t			AddDefaultRoute(const BNetworkAddress& gateway);
106			status_t			RemoveRoute(const BNetworkRoute& route);
107			status_t			RemoveRoute(int family,
108									const BNetworkRoute& route);
109			status_t			RemoveDefaultRoute(int family);
110			status_t			GetRoutes(int family,
111									BObjectList<BNetworkRoute>& routes) const;
112			status_t			GetDefaultRoute(int family,
113									BNetworkRoute& route) const;
114			status_t			GetDefaultGateway(int family,
115									BNetworkAddress& gateway) const;
116
117			status_t			AutoConfigure(int family);
118
119private:
120			char				fName[IF_NAMESIZE];
121			BList				fAddresses;
122};
123
124
125#endif	// _NETWORK_INTERFACE_H
126