xref: /haiku/headers/os/net/NetworkInterface.h (revision 71452e98334eaac603bf542d159e24788a46bebb)
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 
16 class BNetworkInterface;
17 class BNetworkRoute;
18 
19 
20 class BNetworkInterfaceAddress {
21 public:
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 
49 private:
50 			int32				fIndex;
51 			BNetworkAddress		fAddress;
52 			BNetworkAddress		fMask;
53 			BNetworkAddress		fBroadcast;
54 			uint32				fFlags;
55 };
56 
57 
58 class BNetworkInterface {
59 public:
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 
119 private:
120 			char				fName[IF_NAMESIZE];
121 			BList				fAddresses;
122 };
123 
124 
125 #endif	// _NETWORK_INTERFACE_H
126