NetworkInterface.h revision 31ea7654
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#include <sys/socket.h>
12
13#include <ObjectList.h>
14
15
16class BNetworkAddress;
17class BNetworkInterface;
18
19
20class BNetworkInterfaceAddress {
21public:
22								BNetworkInterfaceAddress();
23								~BNetworkInterfaceAddress();
24
25			status_t			SetTo(const char* interfaceName,
26									int32 index);
27
28			void				SetAddress(const sockaddr& address);
29			void				SetMask(const sockaddr& mask);
30			void				SetBroadcast(const sockaddr& broadcast);
31			void				SetDestination(const sockaddr& destination);
32
33			const sockaddr&		Address() const { return (sockaddr&)fAddress; }
34			const sockaddr&		Mask() const { return (sockaddr&)fMask; }
35			const sockaddr&		Broadcast() const
36									{ return (sockaddr&)fBroadcast; }
37			const sockaddr&		Destination() const
38									{ return (sockaddr&)fBroadcast; }
39
40			void				SetFlags(uint32 flags);
41			uint32				Flags() const { return fFlags; }
42
43			int32				Index() const { return fIndex; }
44
45private:
46			int32				fIndex;
47			sockaddr_storage	fAddress;
48			sockaddr_storage	fMask;
49			sockaddr_storage	fBroadcast;
50			uint32				fFlags;
51};
52
53
54class BNetworkInterface {
55public:
56								BNetworkInterface();
57								BNetworkInterface(const char* name);
58								BNetworkInterface(uint32 index);
59								~BNetworkInterface();
60
61			void				Unset();
62			void				SetTo(const char* name);
63			status_t			SetTo(uint32 index);
64
65			bool				Exists() const;
66
67			const char*			Name() const;
68			uint32				Index() const;
69			uint32				Flags() const;
70			uint32				MTU() const;
71			int32				Media() const;
72			uint32				Metric() const;
73			uint32				Type() const;
74			status_t			GetStats(ifreq_stats& stats);
75			bool				HasLink() const;
76
77			status_t			SetFlags(uint32 flags);
78			status_t			SetMTU(uint32 mtu);
79			status_t			SetMedia(int32 media);
80			status_t			SetMetric(uint32 metric);
81
82			int32				CountAddresses() const;
83			status_t			GetAddressAt(int32 index,
84									BNetworkInterfaceAddress& address);
85			int32				FindAddress(const BNetworkAddress& address);
86			int32				FindFirstAddress(int family);
87
88			status_t			AddAddress(
89									const BNetworkInterfaceAddress& address);
90			status_t			AddAddress(const BNetworkAddress& address);
91			status_t			SetAddress(
92									const BNetworkInterfaceAddress& address);
93			status_t			RemoveAddress(
94									const BNetworkInterfaceAddress& address);
95			status_t			RemoveAddress(const BNetworkAddress& address);
96			status_t			RemoveAddressAt(int32 index);
97
98			status_t			GetHardwareAddress(BNetworkAddress& address);
99
100			status_t			AddRoute(const route_entry& route);
101			status_t			AddDefaultRoute(const BNetworkAddress& gateway);
102			status_t			RemoveRoute(const route_entry& route);
103			status_t			RemoveRoute(int family,
104									const route_entry& route);
105			status_t			RemoveDefaultRoute(int family);
106			status_t			GetRoutes(int family, BObjectList<route_entry>& routes) const;
107			status_t			GetDefaultRoute(int family, BNetworkAddress& gateway) const;
108
109			status_t			AutoConfigure(int family);
110
111private:
112			char				fName[IF_NAMESIZE];
113			BList				fAddresses;
114};
115
116
117#endif	// _NETWORK_INTERFACE_H
118