238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
|
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
|
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
"up" {
if {[info exists ifaceinfo(flags)]} {
set flags $ifaceinfo(flags)
} else {
set flags ""
}
foreach newflag [list UP RUNNING] {
foreach newflag [list UP] {
if {[lsearch -exact $flags $newflag] == -1} {
lappend flags $newflag
}
}
::tuapi::syscall::ifconfig $interface flags $flags
}
"down" {
if {[info exists ifaceinfo(flags)]} {
set flags $ifaceinfo(flags)
} else {
set flags ""
}
set flagidx [lsearch -exact $flags "UP"]
if {$flagidx != -1} {
set flags [lreplace $flags $flagidx $flagidx]
::tuapi::syscall::ifconfig $interface flags $flags
}
}
default {
incr idx
set optval [lindex $args $idx]
::tuapi::syscall::ifconfig $interface $opt $optval
}
}
}
}
proc ::tuapi::helper::foreach_line {fd sep code} {
while {![eof $fd]} {
gets $fd line
|
623
624
625
626
627
628
629
630
|
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
|
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
if {![info exists optval]} {
continue
}
puts "${include_help}$optval"
}
}
}
proc ::ifconfig {{ifacelist ""} {config ""}} {
if {$ifacelist == "" || $ifacelist == "-a"} {
set ifacelist [tuapi::syscall::ifconfig]
set config ""
}
if {$config != ""} {
if {[string match "*.*.*.*" [lindex $config 0]]} {
set config [linsert $config 0 "address"]
}
puts [list ::tuapi::ifconfig [lindex $ifacelist 0] {*}$config]
return [::tuapi::ifconfig [lindex $ifacelist 0] {*}$config]
}
foreach iface $ifacelist {
unset -nocomplain ifaceinfo
array set ifaceinfo [tuapi::syscall::ifconfig $iface]
set secondline ""
foreach {label entry} [list inet address netmask netmask broadcast broadcast] {
if {![info exists ifaceinfo($entry)]} {
continue
}
append secondline " $label $ifaceinfo($entry)"
}
puts "$iface: flags=<[join $ifaceinfo(flags) ,]> mtu $ifaceinfo(mtu) index $ifaceinfo(index)"
puts "\t[string trim $secondline]"
if {[info exists ifaceinfo(hwaddr)]} {
puts "\tether $ifaceinfo(hwaddr)"
}
}
}
}
|