-rw-r--r-- | libopie2/opienet/onetwork.cpp | 41 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.h | 49 |
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 | |||
@@ -103,16 +103,22 @@ void ONetwork::synchronize() | |||
103 | iface = new ONetworkInterface( this, (const char*) str ); | 103 | iface = new ONetworkInterface( this, (const char*) str ); |
104 | } | 104 | } |
105 | _interfaces.insert( str, iface ); | 105 | _interfaces.insert( str, iface ); |
106 | s.readLine(); | 106 | s.readLine(); |
107 | } | 107 | } |
108 | } | 108 | } |
109 | 109 | ||
110 | 110 | ||
111 | int ONetwork::count() const | ||
112 | { | ||
113 | return _interfaces.count(); | ||
114 | } | ||
115 | |||
116 | |||
111 | ONetworkInterface* ONetwork::interface( const QString& iface ) const | 117 | ONetworkInterface* ONetwork::interface( const QString& iface ) const |
112 | { | 118 | { |
113 | return _interfaces[iface]; | 119 | return _interfaces[iface]; |
114 | } | 120 | } |
115 | 121 | ||
116 | 122 | ||
117 | ONetwork* ONetwork::instance() | 123 | ONetwork* ONetwork::instance() |
118 | { | 124 | { |
@@ -206,21 +212,31 @@ bool ONetworkInterface::setUp( bool b ) | |||
206 | 212 | ||
207 | bool ONetworkInterface::isUp() const | 213 | bool ONetworkInterface::isUp() const |
208 | { | 214 | { |
209 | ioctl( SIOCGIFFLAGS ); | 215 | ioctl( SIOCGIFFLAGS ); |
210 | return _ifr.ifr_flags & IFF_UP; | 216 | return _ifr.ifr_flags & IFF_UP; |
211 | } | 217 | } |
212 | 218 | ||
213 | 219 | ||
220 | void 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 | |||
214 | QString ONetworkInterface::ipV4Address() const | 230 | QString 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 |
223 | return "<unknown>"; | 239 | return "<unknown>"; |
224 | } | 240 | } |
225 | 241 | ||
226 | 242 | ||
@@ -240,16 +256,39 @@ OMacAddress ONetworkInterface::macAddress() const | |||
240 | } | 256 | } |
241 | else | 257 | else |
242 | { | 258 | { |
243 | return OMacAddress::unknown; | 259 | return OMacAddress::unknown; |
244 | } | 260 | } |
245 | } | 261 | } |
246 | 262 | ||
247 | 263 | ||
264 | void 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 | |||
274 | QString 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 | |||
248 | int ONetworkInterface::dataLinkType() const | 287 | int ONetworkInterface::dataLinkType() const |
249 | { | 288 | { |
250 | if ( ioctl( SIOCGIFHWADDR ) ) | 289 | if ( ioctl( SIOCGIFHWADDR ) ) |
251 | { | 290 | { |
252 | return _ifr.ifr_hwaddr.sa_family; | 291 | return _ifr.ifr_hwaddr.sa_family; |
253 | } | 292 | } |
254 | else | 293 | else |
255 | { | 294 | { |
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 | |||
@@ -51,48 +51,52 @@ | |||
51 | #endif | 51 | #endif |
52 | #ifndef IW_MAX_PRIV_DEF | 52 | #ifndef IW_MAX_PRIV_DEF |
53 | #define IW_MAX_PRIV_DEF 128 | 53 | #define IW_MAX_PRIV_DEF 128 |
54 | #endif | 54 | #endif |
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> |
65 | 65 | ||
66 | class ONetworkInterface; | 66 | class ONetworkInterface; |
67 | class OWirelessNetworkInterface; | 67 | class OWirelessNetworkInterface; |
68 | class OChannelHopper; | 68 | class OChannelHopper; |
69 | class OMonitoringInterface; | 69 | class OMonitoringInterface; |
70 | 70 | ||
71 | /*====================================================================================== | 71 | /*====================================================================================== |
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 | */ |
81 | class ONetwork : public QObject | 81 | class ONetwork : public QObject |
82 | { | 82 | { |
83 | Q_OBJECT | 83 | Q_OBJECT |
84 | 84 | ||
85 | public: | 85 | public: |
86 | typedef QDict<ONetworkInterface> InterfaceMap; | 86 | typedef QDict<ONetworkInterface> InterfaceMap; |
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 | /** |
95 | * @returns an iterator usable for iterating through all network interfaces. | 99 | * @returns an iterator usable for iterating through all network interfaces. |
96 | */ | 100 | */ |
97 | InterfaceIterator iterator() const; | 101 | InterfaceIterator iterator() const; |
98 | /** | 102 | /** |
@@ -101,20 +105,25 @@ class ONetwork : public QObject | |||
101 | // FIXME QString? -zecke | 105 | // FIXME QString? -zecke |
102 | bool isWirelessInterface( const char* interface ) const; | 106 | bool isWirelessInterface( const char* interface ) const; |
103 | /** | 107 | /** |
104 | * @returns a pointer to the @ref ONetworkInterface object for the specified @p interface or 0, if not found | 108 | * @returns a pointer to the @ref ONetworkInterface object for the specified @p interface or 0, if not found |
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; |
117 | }; | 126 | }; |
118 | 127 | ||
119 | 128 | ||
120 | /*====================================================================================== | 129 | /*====================================================================================== |
@@ -169,40 +178,52 @@ class ONetworkInterface : public QObject | |||
169 | /** | 178 | /** |
170 | * Setting an interface to up enables it to receive packets. | 179 | * Setting an interface to up enables it to receive packets. |
171 | */ | 180 | */ |
172 | bool setUp( bool ); | 181 | bool setUp( bool ); |
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 | ||
205 | protected: | 226 | protected: |
206 | const int _sfd; | 227 | const int _sfd; |
207 | mutable ifreq _ifr; | 228 | mutable ifreq _ifr; |
208 | OMonitoringInterface* _mon; | 229 | OMonitoringInterface* _mon; |