summaryrefslogtreecommitdiff
authorclem <clem>2004-09-16 22:30:54 (UTC)
committer clem <clem>2004-09-16 22:30:54 (UTC)
commitba8276a03172cfdb41aac4b0cd53307dfdd2b8f1 (patch) (unidiff)
treec1a6f6712064942b773bbc0b11cc474955a96a74
parent85ebe50b5cfa9244c1610aac5d72de8a4cc263b6 (diff)
downloadopie-ba8276a03172cfdb41aac4b0cd53307dfdd2b8f1.zip
opie-ba8276a03172cfdb41aac4b0cd53307dfdd2b8f1.tar.gz
opie-ba8276a03172cfdb41aac4b0cd53307dfdd2b8f1.tar.bz2
define ARPHRD_IEEE80211 if <net/if_arp.h> doesn't (i.e. if our crosscompiler's version is 2.95 and not 3.3)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/networksettings2/system.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/noncore/settings/networksettings2/networksettings2/system.cpp b/noncore/settings/networksettings2/networksettings2/system.cpp
index 271e73d..298bdc9 100644
--- a/noncore/settings/networksettings2/networksettings2/system.cpp
+++ b/noncore/settings/networksettings2/networksettings2/system.cpp
@@ -1,429 +1,433 @@
1#include <sys/types.h> 1#include <sys/types.h>
2#include <sys/wait.h> 2#include <sys/wait.h>
3 3
4#include <net/if.h> 4#include <net/if.h>
5#include <net/if_arp.h> 5#include <net/if_arp.h>
6#include <netinet/in.h> 6#include <netinet/in.h>
7#include <arpa/inet.h> 7#include <arpa/inet.h>
8#include <sys/ioctl.h> 8#include <sys/ioctl.h>
9#include <sys/socket.h> 9#include <sys/socket.h>
10#include <stdlib.h> 10#include <stdlib.h>
11#include <stdio.h> 11#include <stdio.h>
12#include <fcntl.h> 12#include <fcntl.h>
13#include <errno.h> 13#include <errno.h>
14#include <unistd.h> 14#include <unistd.h>
15 15
16#include <qdir.h> 16#include <qdir.h>
17#include <qregexp.h> 17#include <qregexp.h>
18#include <qstringlist.h> 18#include <qstringlist.h>
19#include <qfile.h> 19#include <qfile.h>
20#include <qtextstream.h> 20#include <qtextstream.h>
21#include <qapplication.h> 21#include <qapplication.h>
22 22
23#include "resources.h" 23#include "resources.h"
24#include "system.h" 24#include "system.h"
25 25
26#define PROCNETDEV "/proc/net/dev" 26#define PROCNETDEV "/proc/net/dev"
27 27
28#ifndef ARPHRD_IEEE80211
29#define ARPHRD_IEEE80211 801
30#endif
31
28static char Dig2Hex[] = { 32static char Dig2Hex[] = {
29 '0', '1', '2', '3', 33 '0', '1', '2', '3',
30 '4', '5', '6', '7', 34 '4', '5', '6', '7',
31 '8', '9', 'A', 'B', 35 '8', '9', 'A', 'B',
32 'C', 'D', 'E', 'F' 36 'C', 'D', 'E', 'F'
33}; 37};
34 38
35// get HIGH nibble of byte 39// get HIGH nibble of byte
36#define HN(x) Dig2Hex[(((x)&0xf0)>>4)] 40#define HN(x) Dig2Hex[(((x)&0xf0)>>4)]
37// get LOW nibble of byte 41// get LOW nibble of byte
38#define LN(x) Dig2Hex[((x)&0x0f)] 42#define LN(x) Dig2Hex[((x)&0x0f)]
39 43
40System::System( void ) : QObject(), ProbedInterfaces() { 44System::System( void ) : QObject(), ProbedInterfaces() {
41 probeInterfaces(); 45 probeInterfaces();
42} 46}
43 47
44System::~System( void ) { 48System::~System( void ) {
45 if( ProcDevNet ) 49 if( ProcDevNet )
46 delete ProcDevNet; 50 delete ProcDevNet;
47} 51}
48 52
49int System::runAsRoot( const QString & S ) { 53int System::runAsRoot( const QString & S ) {
50 QString MyS = S; 54 QString MyS = S;
51 char * usr = getenv("USER"); 55 char * usr = getenv("USER");
52 char ch; 56 char ch;
53 57
54 if( S.isEmpty() ) { 58 if( S.isEmpty() ) {
55 // loophole to start shell 59 // loophole to start shell
56 return 8888; 60 return 8888;
57 } 61 }
58 if( usr == 0 || strcmp( usr, "root" ) ) { 62 if( usr == 0 || strcmp( usr, "root" ) ) {
59 // unknown or non-root user -> use SUDO 63 // unknown or non-root user -> use SUDO
60 MyS.prepend( "sudo " ); 64 MyS.prepend( "sudo " );
61 } 65 }
62 66
63 Log(("Executing %s\n", MyS.latin1() )); 67 Log(("Executing %s\n", MyS.latin1() ));
64 68
65 emit lineFromCommand( tr("Command : ") + MyS ); 69 emit lineFromCommand( tr("Command : ") + MyS );
66 emit lineFromCommand( "---------------" ); 70 emit lineFromCommand( "---------------" );
67 Log(( "Command : %s\n", MyS.latin1() ) ); 71 Log(( "Command : %s\n", MyS.latin1() ) );
68 MyS += " 2>&1 "; 72 MyS += " 2>&1 ";
69 OutputOfCmd = popen( MyS.latin1(), "r" ) ; 73 OutputOfCmd = popen( MyS.latin1(), "r" ) ;
70 if( ! OutputOfCmd ) { 74 if( ! OutputOfCmd ) {
71 // cannot fork 75 // cannot fork
72 return 1; 76 return 1;
73 } 77 }
74 78
75 // read all data 79 // read all data
76 QString Line = ""; 80 QString Line = "";
77 while( 1 ) { 81 while( 1 ) {
78 if( fread( &ch, 1, 1, OutputOfCmd ) < 1 ) 82 if( fread( &ch, 1, 1, OutputOfCmd ) < 1 )
79 // eof 83 // eof
80 break; 84 break;
81 if( ch == '\n' || ch == '\r' ) { 85 if( ch == '\n' || ch == '\r' ) {
82 if( ! Line.isEmpty() ) { 86 if( ! Line.isEmpty() ) {
83 Log(( "read cmd output : **%s**\n", Line.latin1() ) ); 87 Log(( "read cmd output : **%s**\n", Line.latin1() ) );
84 emit lineFromCommand( Line ); 88 emit lineFromCommand( Line );
85 Line = ""; 89 Line = "";
86 qApp->processEvents(); 90 qApp->processEvents();
87 } 91 }
88 } else { 92 } else {
89 Line += ch; 93 Line += ch;
90 } 94 }
91 } 95 }
92 96
93 if( ! Line.isEmpty() ) { 97 if( ! Line.isEmpty() ) {
94 emit lineFromCommand( Line ); 98 emit lineFromCommand( Line );
95 Log(( "read cmd output : **%s**\n", Line.latin1() ) ); 99 Log(( "read cmd output : **%s**\n", Line.latin1() ) );
96 } 100 }
97 Log(( "End of command\n", Line.latin1() ) ); 101 Log(( "End of command\n", Line.latin1() ) );
98 102
99 if( pclose( OutputOfCmd ) < 0 ) { 103 if( pclose( OutputOfCmd ) < 0 ) {
100 // error in command 104 // error in command
101 return 3; 105 return 3;
102 } 106 }
103 107
104 // all is fine 108 // all is fine
105 return 0; 109 return 0;
106} 110}
107 111
108void System::refreshStatistics( InterfaceInfo & I ) { 112void System::refreshStatistics( InterfaceInfo & I ) {
109 if( ! ProcDevNet ) { 113 if( ! ProcDevNet ) {
110 return; 114 return;
111 } 115 }
112 // cannot seek on dev 116 // cannot seek on dev
113 ProcDevNet->close(); 117 ProcDevNet->close();
114 ProcDevNet->open( IO_ReadOnly ); 118 ProcDevNet->open( IO_ReadOnly );
115 119
116 QString line; 120 QString line;
117 QTextStream procTs(ProcDevNet); 121 QTextStream procTs(ProcDevNet);
118 QStringList SL; 122 QStringList SL;
119 int loc = -1; 123 int loc = -1;
120 int version; 124 int version;
121 125
122 procTs.readLine(); 126 procTs.readLine();
123 line = procTs.readLine(); 127 line = procTs.readLine();
124 // get version 128 // get version
125 if( line.find("compressed") ) 129 if( line.find("compressed") )
126 version = 3; 130 version = 3;
127 else if( line.find( "bytes" ) ) 131 else if( line.find( "bytes" ) )
128 version = 2; 132 version = 2;
129 else 133 else
130 version = 1; 134 version = 1;
131 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { 135 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) {
132 if( (loc = line.find(":") ) == -1) { 136 if( (loc = line.find(":") ) == -1) {
133 continue; 137 continue;
134 } 138 }
135 139
136 if( I.Name != line.left(loc) ) 140 if( I.Name != line.left(loc) )
137 continue; 141 continue;
138 142
139 // tokenize 143 // tokenize
140 SL = QStringList::split( ' ', line, FALSE ); 144 SL = QStringList::split( ' ', line, FALSE );
141 145
142 // update data 146 // update data
143 switch( version ) { 147 switch( version ) {
144 case 1 : 148 case 1 :
145 I.RcvBytes = SL[1]; 149 I.RcvBytes = SL[1];
146 I.RcvErrors = SL[3]; 150 I.RcvErrors = SL[3];
147 I.RcvDropped = SL[4]; 151 I.RcvDropped = SL[4];
148 I.SndBytes = SL[6]; 152 I.SndBytes = SL[6];
149 I.SndErrors = SL[8]; 153 I.SndErrors = SL[8];
150 I.SndDropped = SL[9]; 154 I.SndDropped = SL[9];
151 I.Collisions = SL[11]; 155 I.Collisions = SL[11];
152 break; 156 break;
153 case 2 : 157 case 2 :
154 I.RcvBytes = SL[1]; 158 I.RcvBytes = SL[1];
155 I.RcvErrors = SL[3]; 159 I.RcvErrors = SL[3];
156 I.RcvDropped = SL[4]; 160 I.RcvDropped = SL[4];
157 I.SndBytes = SL[7]; 161 I.SndBytes = SL[7];
158 I.SndErrors = SL[9]; 162 I.SndErrors = SL[9];
159 I.SndDropped = SL[10]; 163 I.SndDropped = SL[10];
160 I.Collisions = SL[12]; 164 I.Collisions = SL[12];
161 break; 165 break;
162 case 3 : 166 case 3 :
163 I.RcvBytes = SL[1]; 167 I.RcvBytes = SL[1];
164 I.RcvErrors = SL[3]; 168 I.RcvErrors = SL[3];
165 I.RcvDropped = SL[4]; 169 I.RcvDropped = SL[4];
166 I.SndBytes = SL[9]; 170 I.SndBytes = SL[9];
167 I.SndErrors = SL[11]; 171 I.SndErrors = SL[11];
168 I.SndDropped = SL[12]; 172 I.SndDropped = SL[12];
169 I.Collisions = SL[14]; 173 I.Collisions = SL[14];
170 break; 174 break;
171 } 175 }
172 break; 176 break;
173 } 177 }
174} 178}
175 179
176// 180//
177// THIS UPDATES THE LIST -> INTERFACES ARE NOT DELETED BUT 181// THIS UPDATES THE LIST -> INTERFACES ARE NOT DELETED BUT
178// FLAGGED AS ! 'IsUp' IF NO LONGER PRESENT 182// FLAGGED AS ! 'IsUp' IF NO LONGER PRESENT
179// 183//
180 184
181void System::probeInterfaces( void ) { 185void System::probeInterfaces( void ) {
182 186
183 // probe interfaces 187 // probe interfaces
184 int sockfd; 188 int sockfd;
185 // get list of all interfaces 189 // get list of all interfaces
186 struct ifreq ifrs; 190 struct ifreq ifrs;
187 InterfaceInfo * IFI; 191 InterfaceInfo * IFI;
188 192
189 // flag all as 'down' 193 // flag all as 'down'
190 for( QDictIterator<InterfaceInfo> it( ProbedInterfaces ); 194 for( QDictIterator<InterfaceInfo> it( ProbedInterfaces );
191 it.current(); 195 it.current();
192 ++it ) { 196 ++it ) {
193 it.current()->IsUp = 0; 197 it.current()->IsUp = 0;
194 } 198 }
195 199
196 sockfd = socket(PF_INET, SOCK_DGRAM, 0); 200 sockfd = socket(PF_INET, SOCK_DGRAM, 0);
197 if(sockfd == -1) 201 if(sockfd == -1)
198 return; 202 return;
199 203
200 // read interfaces from /proc/dev/net 204 // read interfaces from /proc/dev/net
201 // SIOCGIFCONF does not return ALL interfaces ???!? 205 // SIOCGIFCONF does not return ALL interfaces ???!?
202 ProcDevNet = new QFile(PROCNETDEV); 206 ProcDevNet = new QFile(PROCNETDEV);
203 if( ! ProcDevNet->open(IO_ReadOnly) ) { 207 if( ! ProcDevNet->open(IO_ReadOnly) ) {
204 delete ProcDevNet; 208 delete ProcDevNet;
205 ProcDevNet =0; 209 ProcDevNet =0;
206 return; 210 return;
207 } 211 }
208 212
209 QString line; 213 QString line;
210 QString NicName; 214 QString NicName;
211 QTextStream procTs(ProcDevNet); 215 QTextStream procTs(ProcDevNet);
212 int loc = -1; 216 int loc = -1;
213 217
214 procTs.readLine(); // eat a line 218 procTs.readLine(); // eat a line
215 procTs.readLine(); // eat a line 219 procTs.readLine(); // eat a line
216 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { 220 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) {
217 if((loc = line.find(":")) == -1) { 221 if((loc = line.find(":")) == -1) {
218 continue; 222 continue;
219 } 223 }
220 224
221 NicName = line.left(loc); 225 NicName = line.left(loc);
222 226
223 // set name for ioctl 227 // set name for ioctl
224 strcpy( ifrs.ifr_name, NicName.latin1() ); 228 strcpy( ifrs.ifr_name, NicName.latin1() );
225 229
226 if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) { 230 if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) {
227 // new nic 231 // new nic
228 Log(("NEWNIC %s\n", NicName.latin1())); 232 Log(("NEWNIC %s\n", NicName.latin1()));
229 IFI = new InterfaceInfo; 233 IFI = new InterfaceInfo;
230 IFI->Name = line.left(loc); 234 IFI->Name = line.left(loc);
231 IFI->NetNode = 0; 235 IFI->NetNode = 0;
232 ProbedInterfaces.insert( IFI->Name, IFI ); 236 ProbedInterfaces.insert( IFI->Name, IFI );
233 237
234 // get dynamic info 238 // get dynamic info
235 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { 239 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) {
236 IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT); 240 IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT);
237 } else { 241 } else {
238 IFI->IsPointToPoint = 0; 242 IFI->IsPointToPoint = 0;
239 } 243 }
240 244
241 // settings that never change 245 // settings that never change
242 IFI->DstAddress = ""; 246 IFI->DstAddress = "";
243 247
244 if( IFI->IsPointToPoint ) { 248 if( IFI->IsPointToPoint ) {
245 if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) { 249 if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) {
246 IFI->DstAddress = 250 IFI->DstAddress =
247 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr); 251 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr);
248 } 252 }
249 } 253 }
250 254
251 IFI->CardType = 999999; 255 IFI->CardType = 999999;
252 IFI->MACAddress = ""; 256 IFI->MACAddress = "";
253 257
254 if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) { 258 if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) {
255 Log(("%s = %d\n", IFI->Name.latin1(), 259 Log(("%s = %d\n", IFI->Name.latin1(),
256 ifrs.ifr_hwaddr.sa_family )); 260 ifrs.ifr_hwaddr.sa_family ));
257 261
258 IFI->CardType = ifrs.ifr_hwaddr.sa_family; 262 IFI->CardType = ifrs.ifr_hwaddr.sa_family;
259 switch( ifrs.ifr_hwaddr.sa_family ) { 263 switch( ifrs.ifr_hwaddr.sa_family ) {
260 case ARPHRD_ETHER : // regular MAC address 264 case ARPHRD_ETHER : // regular MAC address
261 // valid address -> convert to regular ::: format 265 // valid address -> convert to regular ::: format
262 // length = 6 bytes = 12 DIGITS -> 6 : 266 // length = 6 bytes = 12 DIGITS -> 6 :
263 IFI->MACAddress.sprintf( 267 IFI->MACAddress.sprintf(
264 "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", 268 "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c",
265 HN( ifrs.ifr_hwaddr.sa_data[0] ), 269 HN( ifrs.ifr_hwaddr.sa_data[0] ),
266 LN( ifrs.ifr_hwaddr.sa_data[0] ), 270 LN( ifrs.ifr_hwaddr.sa_data[0] ),
267 HN( ifrs.ifr_hwaddr.sa_data[1] ), 271 HN( ifrs.ifr_hwaddr.sa_data[1] ),
268 LN( ifrs.ifr_hwaddr.sa_data[1] ), 272 LN( ifrs.ifr_hwaddr.sa_data[1] ),
269 HN( ifrs.ifr_hwaddr.sa_data[2] ), 273 HN( ifrs.ifr_hwaddr.sa_data[2] ),
270 LN( ifrs.ifr_hwaddr.sa_data[2] ), 274 LN( ifrs.ifr_hwaddr.sa_data[2] ),
271 HN( ifrs.ifr_hwaddr.sa_data[3] ), 275 HN( ifrs.ifr_hwaddr.sa_data[3] ),
272 LN( ifrs.ifr_hwaddr.sa_data[3] ), 276 LN( ifrs.ifr_hwaddr.sa_data[3] ),
273 HN( ifrs.ifr_hwaddr.sa_data[4] ), 277 HN( ifrs.ifr_hwaddr.sa_data[4] ),
274 LN( ifrs.ifr_hwaddr.sa_data[4] ), 278 LN( ifrs.ifr_hwaddr.sa_data[4] ),
275 HN( ifrs.ifr_hwaddr.sa_data[5] ), 279 HN( ifrs.ifr_hwaddr.sa_data[5] ),
276 LN( ifrs.ifr_hwaddr.sa_data[5] ) 280 LN( ifrs.ifr_hwaddr.sa_data[5] )
277 ); 281 );
278 break; 282 break;
279#ifdef ARPHRD_IEEE1394 283#ifdef ARPHRD_IEEE1394
280 case ARPHRD_IEEE1394 : // Firewire Eth address 284 case ARPHRD_IEEE1394 : // Firewire Eth address
281 IFI->MACAddress.sprintf( 285 IFI->MACAddress.sprintf(
282 "%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-00-00", 286 "%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-00-00",
283 HN( ifrs.ifr_hwaddr.sa_data[0] ), 287 HN( ifrs.ifr_hwaddr.sa_data[0] ),
284 LN( ifrs.ifr_hwaddr.sa_data[0] ), 288 LN( ifrs.ifr_hwaddr.sa_data[0] ),
285 HN( ifrs.ifr_hwaddr.sa_data[1] ), 289 HN( ifrs.ifr_hwaddr.sa_data[1] ),
286 LN( ifrs.ifr_hwaddr.sa_data[1] ), 290 LN( ifrs.ifr_hwaddr.sa_data[1] ),
287 HN( ifrs.ifr_hwaddr.sa_data[2] ), 291 HN( ifrs.ifr_hwaddr.sa_data[2] ),
288 LN( ifrs.ifr_hwaddr.sa_data[2] ), 292 LN( ifrs.ifr_hwaddr.sa_data[2] ),
289 HN( ifrs.ifr_hwaddr.sa_data[3] ), 293 HN( ifrs.ifr_hwaddr.sa_data[3] ),
290 LN( ifrs.ifr_hwaddr.sa_data[3] ), 294 LN( ifrs.ifr_hwaddr.sa_data[3] ),
291 HN( ifrs.ifr_hwaddr.sa_data[4] ), 295 HN( ifrs.ifr_hwaddr.sa_data[4] ),
292 LN( ifrs.ifr_hwaddr.sa_data[4] ), 296 LN( ifrs.ifr_hwaddr.sa_data[4] ),
293 HN( ifrs.ifr_hwaddr.sa_data[5] ), 297 HN( ifrs.ifr_hwaddr.sa_data[5] ),
294 LN( ifrs.ifr_hwaddr.sa_data[5] ), 298 LN( ifrs.ifr_hwaddr.sa_data[5] ),
295 HN( ifrs.ifr_hwaddr.sa_data[6] ), 299 HN( ifrs.ifr_hwaddr.sa_data[6] ),
296 LN( ifrs.ifr_hwaddr.sa_data[6] ), 300 LN( ifrs.ifr_hwaddr.sa_data[6] ),
297 HN( ifrs.ifr_hwaddr.sa_data[7] ), 301 HN( ifrs.ifr_hwaddr.sa_data[7] ),
298 LN( ifrs.ifr_hwaddr.sa_data[7] ), 302 LN( ifrs.ifr_hwaddr.sa_data[7] ),
299 HN( ifrs.ifr_hwaddr.sa_data[8] ), 303 HN( ifrs.ifr_hwaddr.sa_data[8] ),
300 LN( ifrs.ifr_hwaddr.sa_data[8] ), 304 LN( ifrs.ifr_hwaddr.sa_data[8] ),
301 HN( ifrs.ifr_hwaddr.sa_data[9] ), 305 HN( ifrs.ifr_hwaddr.sa_data[9] ),
302 LN( ifrs.ifr_hwaddr.sa_data[9] ), 306 LN( ifrs.ifr_hwaddr.sa_data[9] ),
303 HN( ifrs.ifr_hwaddr.sa_data[10] ), 307 HN( ifrs.ifr_hwaddr.sa_data[10] ),
304 LN( ifrs.ifr_hwaddr.sa_data[10] ), 308 LN( ifrs.ifr_hwaddr.sa_data[10] ),
305 HN( ifrs.ifr_hwaddr.sa_data[11] ), 309 HN( ifrs.ifr_hwaddr.sa_data[11] ),
306 LN( ifrs.ifr_hwaddr.sa_data[11] ), 310 LN( ifrs.ifr_hwaddr.sa_data[11] ),
307 HN( ifrs.ifr_hwaddr.sa_data[12] ), 311 HN( ifrs.ifr_hwaddr.sa_data[12] ),
308 LN( ifrs.ifr_hwaddr.sa_data[12] ), 312 LN( ifrs.ifr_hwaddr.sa_data[12] ),
309 HN( ifrs.ifr_hwaddr.sa_data[13] ), 313 HN( ifrs.ifr_hwaddr.sa_data[13] ),
310 LN( ifrs.ifr_hwaddr.sa_data[13] ) 314 LN( ifrs.ifr_hwaddr.sa_data[13] )
311 ); 315 );
312 break; 316 break;
313#endif 317#endif
314 case ARPHRD_PPP : // PPP 318 case ARPHRD_PPP : // PPP
315 break; 319 break;
316 case ARPHRD_IEEE80211 : // WLAN 320 case ARPHRD_IEEE80211 : // WLAN
317 break; 321 break;
318 case ARPHRD_IRDA : // IRDA 322 case ARPHRD_IRDA : // IRDA
319 break; 323 break;
320 } 324 }
321 } 325 }
322 } else // else already probed before -> just update 326 } else // else already probed before -> just update
323 Log(("OLDNIC %s\n", NicName.latin1())); 327 Log(("OLDNIC %s\n", NicName.latin1()));
324 328
325 // get dynamic info 329 // get dynamic info
326 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { 330 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) {
327 IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP); 331 IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP);
328 IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST); 332 IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST);
329 } else { 333 } else {
330 IFI->IsUp = 0; 334 IFI->IsUp = 0;
331 IFI->HasMulticast = 0; 335 IFI->HasMulticast = 0;
332 } 336 }
333 337
334 if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) { 338 if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) {
335 IFI->Address = 339 IFI->Address =
336 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_addr)->sin_addr); 340 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_addr)->sin_addr);
337 } else { 341 } else {
338 IFI->Address = ""; 342 IFI->Address = "";
339 IFI->IsUp = 0; 343 IFI->IsUp = 0;
340 } 344 }
341 if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) { 345 if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) {
342 IFI->BCastAddress = 346 IFI->BCastAddress =
343 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr); 347 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr);
344 } else { 348 } else {
345 IFI->BCastAddress = ""; 349 IFI->BCastAddress = "";
346 } 350 }
347 if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) { 351 if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) {
348 IFI->Netmask = 352 IFI->Netmask =
349 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr); 353 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr);
350 } else { 354 } else {
351 IFI->Netmask = ""; 355 IFI->Netmask = "";
352 } 356 }
353 Log(("NIC %s UP %d\n", NicName.latin1(), IFI->IsUp )); 357 Log(("NIC %s UP %d\n", NicName.latin1(), IFI->IsUp ));
354 } 358 }
355} 359}
356 360
357void System::execAsUser( QString & Cmd, char * argv[] ) { 361void System::execAsUser( QString & Cmd, char * argv[] ) {
358 CurrentQPEUser CU = NSResources->currentUser(); 362 CurrentQPEUser CU = NSResources->currentUser();
359 363
360 if( CU.UserName.isEmpty() ) { 364 if( CU.UserName.isEmpty() ) {
361 // if we come here, the exec was not successfull 365 // if we come here, the exec was not successfull
362 Log(("User not known \n" )); 366 Log(("User not known \n" ));
363 return; 367 return;
364 } 368 }
365 369
366 // now we are ready to exec the requested command 370 // now we are ready to exec the requested command
367 setuid( CU.Uid ); 371 setuid( CU.Uid );
368 setgid( CU.Gid ); 372 setgid( CU.Gid );
369 373
370 char ** envp = (char **)alloca( sizeof( char *) * 374 char ** envp = (char **)alloca( sizeof( char *) *
371 (CU.EnvList.count()+1) ); 375 (CU.EnvList.count()+1) );
372 376
373 for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) { 377 for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) {
374 *(envp+i) = CU.EnvList[i]; 378 *(envp+i) = CU.EnvList[i];
375 } 379 }
376 envp[CU.EnvList.count()]=NULL; 380 envp[CU.EnvList.count()]=NULL;
377 381
378 execve( Cmd.latin1(), argv, envp ); 382 execve( Cmd.latin1(), argv, envp );
379 383
380 // if we come here, the exec was not successfull 384 // if we come here, the exec was not successfull
381 Log(("Could not exec : %d\n", errno )); 385 Log(("Could not exec : %d\n", errno ));
382} 386}
383 387
384#include <stdarg.h> 388#include <stdarg.h>
385static FILE * logf = 0; 389static FILE * logf = 0;
386 390
387void VLog( char * Format, ... ) { 391void VLog( char * Format, ... ) {
388 va_list l; 392 va_list l;
389 393
390 va_start(l, Format ); 394 va_start(l, Format );
391 395
392 if( logf == (FILE *)0 ) { 396 if( logf == (FILE *)0 ) {
393 if( getenv("NS2STDERR") ) { 397 if( getenv("NS2STDERR") ) {
394 logf = stderr; 398 logf = stderr;
395 } else { 399 } else {
396 logf = fopen( "/tmp/ns2log", "a" ); 400 logf = fopen( "/tmp/ns2log", "a" );
397 } 401 }
398 if( ! logf ) { 402 if( ! logf ) {
399 fprintf( stderr, "Cannot open logfile /tmp/ns2log %d\n", 403 fprintf( stderr, "Cannot open logfile /tmp/ns2log %d\n",
400 errno ); 404 errno );
401 logf = (FILE *)1; 405 logf = (FILE *)1;
402 } else { 406 } else {
403 fprintf( logf, "____ OPEN LOGFILE ____\n"); 407 fprintf( logf, "____ OPEN LOGFILE ____\n");
404 } 408 }
405 } 409 }
406 410
407 if( (long)logf > 1 ) { 411 if( (long)logf > 1 ) {
408 vfprintf( logf, Format, l ); 412 vfprintf( logf, Format, l );
409 } 413 }
410 va_end( l ); 414 va_end( l );
411 415
412} 416}
413 417
414void LogClose( void ) { 418void LogClose( void ) {
415 if( (long)logf > 1 ) { 419 if( (long)logf > 1 ) {
416 fprintf( logf, "____ CLOSE LOGFILE ____\n"); 420 fprintf( logf, "____ CLOSE LOGFILE ____\n");
417 if( logf != stderr ) { 421 if( logf != stderr ) {
418 fclose( logf ); 422 fclose( logf );
419 } 423 }
420 logf = 0; 424 logf = 0;
421 } 425 }
422} 426}
423 427
424QString removeSpaces( const QString & X ) { 428QString removeSpaces( const QString & X ) {
425 QStringList SL; 429 QStringList SL;
426 430
427 SL = QStringList::split( " ", X ); 431 SL = QStringList::split( " ", X );
428 return SL.join( "_" ); 432 return SL.join( "_" );
429} 433}