summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/onetwork.cpp41
-rw-r--r--libopie2/opienet/onetwork.h49
2 files changed, 75 insertions, 15 deletions
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp
index f0094c7..be2736a 100644
--- a/libopie2/opienet/onetwork.cpp
+++ b/libopie2/opienet/onetwork.cpp
@@ -107,8 +107,14 @@ void ONetwork::synchronize()
107 } 107 }
108} 108}
109 109
110 110
111int ONetwork::count() const
112{
113 return _interfaces.count();
114}
115
116
111ONetworkInterface* ONetwork::interface( const QString& iface ) const 117ONetworkInterface* ONetwork::interface( const QString& iface ) const
112{ 118{
113 return _interfaces[iface]; 119 return _interfaces[iface];
114} 120}
@@ -210,13 +216,23 @@ bool ONetworkInterface::isUp() const
210 return _ifr.ifr_flags & IFF_UP; 216 return _ifr.ifr_flags & IFF_UP;
211} 217}
212 218
213 219
220void ONetworkInterface::setIPV4Address( const QHostAddress& addr )
221{
222 struct sockaddr_in *sa = (struct sockaddr_in *) &_ifr.ifr_addr;
223 sa->sin_family = AF_INET;
224 sa->sin_port = 0;
225 sa->sin_addr.s_addr = htonl( addr.ip4Addr() );
226 ioctl( SIOCSIFADDR );
227}
228
229
214QString ONetworkInterface::ipV4Address() const 230QString ONetworkInterface::ipV4Address() const
215{ 231{
216 if ( ioctl( SIOCGIFADDR ) ) 232 if ( ioctl( SIOCGIFADDR ) )
217 { 233 {
218 struct sockaddr_in *sa = (struct sockaddr_in *) &_ifr.ifr_addr; 234 struct sockaddr_in* sa = (struct sockaddr_in *) &_ifr.ifr_addr;
219 //FIXME: Use QHostAddress here 235 //FIXME: Use QHostAddress here
220 return QString( inet_ntoa( sa->sin_addr ) ); 236 return QString( inet_ntoa( sa->sin_addr ) );
221 } 237 }
222 else 238 else
@@ -244,8 +260,31 @@ OMacAddress ONetworkInterface::macAddress() const
244 } 260 }
245} 261}
246 262
247 263
264void ONetworkInterface::setIPV4Netmask( const QHostAddress& addr )
265{
266 struct sockaddr_in *sa = (struct sockaddr_in *) &_ifr.ifr_addr;
267 sa->sin_family = AF_INET;
268 sa->sin_port = 0;
269 sa->sin_addr.s_addr = htonl( addr.ip4Addr() );
270 ioctl( SIOCSIFNETMASK );
271}
272
273
274QString ONetworkInterface::ipV4Netmask() const
275{
276 if ( ioctl( SIOCGIFNETMASK ) )
277 {
278 struct sockaddr_in* sa = (struct sockaddr_in *) &_ifr.ifr_addr;
279 //FIXME: Use QHostAddress here
280 return QString( inet_ntoa( sa->sin_addr ) );
281 }
282 else
283 return "<unknown>";
284}
285
286
248int ONetworkInterface::dataLinkType() const 287int ONetworkInterface::dataLinkType() const
249{ 288{
250 if ( ioctl( SIOCGIFHWADDR ) ) 289 if ( ioctl( SIOCGIFHWADDR ) )
251 { 290 {
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index db8e702..2348bbc 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -55,10 +55,10 @@
55 55
56// ML: Yeah, I hate to include kernel headers, but it's necessary here 56// ML: Yeah, I hate to include kernel headers, but it's necessary here
57// ML: Here comes an ugly hack to prevent <linux/wireless.h> including <linux/if.h> 57// ML: Here comes an ugly hack to prevent <linux/wireless.h> including <linux/if.h>
58// ML: which conflicts with the user header <net/if.h> 58// ML: which conflicts with the user header <net/if.h>
59// ML: We really a user header for the Wireless Extensions, something like <net/wireless.h> 59// ML: We really need a user header for the Wireless Extensions, something like <net/wireless.h>
60// ML: I will drop Jean an mail on that subject 60// ML: I will drop Jean a mail on that subject
61 61
62#include <net/if.h> 62#include <net/if.h>
63#define _LINUX_IF_H 63#define _LINUX_IF_H
64#include <linux/wireless.h> 64#include <linux/wireless.h>
@@ -72,11 +72,11 @@ class OMonitoringInterface;
72 * ONetwork 72 * ONetwork
73 *======================================================================================*/ 73 *======================================================================================*/
74 74
75/** 75/**
76 * @brief A container class for all network devices. 76 * @brief A container class for all network interfaces
77 * 77 *
78 * This class provides access to all available network devices of your computer. 78 * This class provides access to all available network interfaces of your computer.
79 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 79 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
80 */ 80 */
81class ONetwork : public QObject 81class ONetwork : public QObject
82{ 82{
@@ -87,8 +87,12 @@ class ONetwork : public QObject
87 typedef QDictIterator<ONetworkInterface> InterfaceIterator; 87 typedef QDictIterator<ONetworkInterface> InterfaceIterator;
88 88
89 public: 89 public:
90 /** 90 /**
91 * @returns the number of available interfaces
92 */
93 int count() const;
94 /**
91 * @returns a pointer to the (one and only) @ref ONetwork instance. 95 * @returns a pointer to the (one and only) @ref ONetwork instance.
92 */ 96 */
93 static ONetwork* instance(); 97 static ONetwork* instance();
94 /** 98 /**
@@ -105,12 +109,17 @@ class ONetwork : public QObject
105 * @see ONetworkInterface 109 * @see ONetworkInterface
106 */ 110 */
107 // FIXME: const QString& is prefered over QString!!! -zecke 111 // FIXME: const QString& is prefered over QString!!! -zecke
108 ONetworkInterface* interface( const QString& interface ) const; 112 ONetworkInterface* interface( const QString& interface ) const;
113 /**
114 * @internal Rebuild the internal interface database
115 * @note Sometimes it might be useful to call this from client code,
116 * e.g. after cardctl insert
117 */
118 void synchronize();
109 119
110 protected: 120 protected:
111 ONetwork(); 121 ONetwork();
112 void synchronize();
113 122
114 private: 123 private:
115 static ONetwork* _instance; 124 static ONetwork* _instance;
116 InterfaceMap _interfaces; 125 InterfaceMap _interfaces;
@@ -173,32 +182,44 @@ class ONetworkInterface : public QObject
173 /** 182 /**
174 * @returns true if the interface is up. 183 * @returns true if the interface is up.
175 */ 184 */
176 bool isUp() const; 185 bool isUp() const;
177 /* 186 /**
178 * @returns true if the interface is a loopback interface. 187 * @returns true if the interface is a loopback interface.
179 */ 188 */
180 bool isLoopback() const; 189 bool isLoopback() const;
181 /* 190 /**
182 * @returns true if the interface is featuring supports the wireless extension protocol. 191 * @returns true if the interface is featuring supports the wireless extension protocol.
183 */ 192 */
184 bool isWireless() const; 193 bool isWireless() const;
185 /* 194 /**
186 * @returns the IPv4 address associated with this interface. 195 * Associate the IP address @ addr with the interface.
196 */
197 void setIPV4Address( const QHostAddress& addr );
198 /**
199 * @returns the IPv4 address associated with the interface.
187 */ 200 */
188 QString ipV4Address() const; 201 QString ipV4Address() const;
189 /* 202 /**
190 * Associate the MAC address @a addr with the interface. 203 * Associate the MAC address @a addr with the interface.
191 * @note It can be necessary to shut down the interface prior to calling this method. 204 * @note It can be necessary to shut down the interface prior to calling this method.
192 * @warning This is not supported by all drivers. 205 * @warning This is not supported by all drivers.
193 */ 206 */
194 void setMacAddress( const OMacAddress& addr ); 207 void setMacAddress( const OMacAddress& addr );
195 /* 208 /**
196 * @returns the MAC address associated with this interface. 209 * @returns the MAC address associated with the interface.
197 */ 210 */
198 OMacAddress macAddress() const; 211 OMacAddress macAddress() const;
199 /* 212 /**
200 * @returns the data link type currently associated with this interface. 213 * Associate the IPv4 @a netmask with the interface.
214 */
215 void setIPV4Netmask( const QHostAddress& netmask );
216 /**
217 * @returns the IPv4 netmask associated with the interface.
218 */
219 QString ipV4Netmask() const;
220 /**
221 * @returns the data link type currently associated with the interface.
201 * @see #include <net/if_arp.h> for possible values. 222 * @see #include <net/if_arp.h> for possible values.
202 */ 223 */
203 int dataLinkType() const; 224 int dataLinkType() const;
204 225