__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
#!/usr/bin/tclsh
# Wrapper (tcl) for usb_modeswitch, called from
# /lib/udev/rules.d/40-usb_modeswitch.rules
# (part of data pack "usb-modeswitch-data") via
# /lib/udev/usb_modeswitch
#
# Does ID check on newly discovered USB devices and calls
# the mode switching program with the matching parameter
# file from /usr/share/usb_modeswitch
#
# Part of usb-modeswitch-2.6.1 package, 2020/07/10
# (C) Josua Dietze 2009 - 2020
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details:
#
# http://www.gnu.org/licenses/gpl.txt
set arg0 [lindex $argv 0]
if [regexp {\.tcl$} $arg0] {
if [file exists $arg0] {
set argv [lrange $argv 1 end]
source $arg0
exit
}
}
# Setting of these switches is done in the global config
# file (/etc/usb_modeswitch.conf) if available
set flags(logging) 0
set flags(noswitching) 0
set flags(stordelay) 0
set flags(nombim) 0
set flags(logwrite) 0
# also settable in device config files
set flags(nombim) 0
set flags(althuawei) 0
# Execution starts at file bottom
proc {Main} {argv argc} {
global scsi usb config match device flags setup devdir loginit
set flags(config) ""
# arg0: optional custom location of configuration file
# arg1: the "kernel name" for the device to switch (udev: %k)
# The parameter "bus id" for the device (udev: %b) is now deprecated
#
# From version 2.5.0 upward %b is removed by udev sh script
# which can handle old and new udev params ('%b/%k' and '%k')
Log "Raw parameters: $argv"
set device "noname"
set arg0 ""
for {set i 0} {$i < [llength $argv]} {incr i} {
set option [lindex $argv $i]
switch -glob -- $option {
"--config-file" {
if [regexp {config-file=(\"[^\"]+\"|[^ ]+)} $option d param] {
set arg0 [string trim $param {"}]
} else {
set arg0 [lindex $argv $i+1]
}
}
"--switch-mode" {
if [regexp {switch-mode=(.+)} $option d param] {
set arg1 $param
} else {
set arg1 [lindex $argv $i+1]
}
}
}
}
Log "[ParseGlobalConfig $arg0]"
set flags(logwrite) 1
# The facility to add a symbolic link pointing to the
# ttyUSB port which provides interrupt transfer, i.e.
# the port to connect through.
# Will check for interrupt endpoint in ttyUSB port (lowest if
# there is more than one); if found, return "gsmmodem[n]" name
# to udev for symlink creation
# This is run once for every port of LISTED devices by
# a udev rule
if {[lindex $argv 0] == "--symlink-name"} {
puts -nonewline [SymLinkName [lindex $argv 1]]
SafeExit
}
if {$flags(stordelay) > 0} {
SetStorageDelay $flags(stordelay)
}
if [info exists arg1] {
if {[string length $arg1] == 0} {
ShowUsage
Log "\nNo device provided for mode-switching. Exit"
SafeExit
}
} else {
ShowUsage
Log "\nNo command option given. Exit"
SafeExit
}
if {![regexp {(.*?):.*$} $arg1 d device]} {
if {![regexp {([0-9]+-[0-9]+\.?[0-9]*.*)} $arg1 d device]} {
ShowUsage
Log "Could not determine device dir from udev values! Exit"
SafeExit
}
}
set setup(dbdir) /usr/share/usb_modeswitch
set setup(dbdir_etc) /etc/usb_modeswitch.d
if {![file exists $setup(dbdir)] && ![file exists $setup(dbdir_etc)]} {
Log "\nError: no config database found in /usr/share or /etc. Exit"
SafeExit
}
set bindir /usr/sbin
set devList1 {}
set devList2 {}
set ifChk 0
set devdir /sys/bus/usb/devices/$device
if {![file isdirectory $devdir]} {
Log "Top device directory not found ($devdir)! Exit"
SafeExit
}
Log "Use top device dir $devdir"
set iface 0
Log "Check class of first interface ..."
set config(class) [IfClass 0 $devdir]
if {$config(class) < 0} {
Log " No access to first interface. Exit"
SafeExit
}
Log " Interface class is $config(class)."
set ifdir [file tail [IfDir $iface $devdir]]
regexp {:([0-9]+\.[0-9]+)$} $ifdir d iface
# Mapping of the short string identifiers (in the config
# file names) to the long name used here
#
# If we need them it's a snap to add new attributes here!
set match(sVe) scsi(vendor)
set match(sMo) scsi(model)
set match(sRe) scsi(rev)
set match(uMa) usb(manufacturer)
set match(uPr) usb(product)
set match(uSe) usb(serial)
# Now reading the USB attributes
if {![ReadUSBAttrs $devdir]} {
Log "USB attributes not found in sysfs tree. Exit"
SafeExit
}
set config(vendor) $usb(idVendor)
set config(product) $usb(idProduct)
if $flags(logging) {
Log "\n----------------\nUSB values from sysfs:"
foreach attr {manufacturer product serial} {
Log " $attr\t$usb($attr)"
}
Log "----------------"
}
if $flags(noswitching) {
SysLog "usb_modeswitch: switching disabled, no action for $usb(idVendor):$usb(idProduct)"
Log "\nSwitching globally disabled. Exit"
SafeExit
}
if {$usb(bNumConfigurations) == "1"} {
set configParam "-u -1"
Log "bNumConfigurations is 1 - don't check for active configuration"
} else {
set configParam ""
}
# Check (and switch) for operating system if Huawei device present
set flags(os) "linux"
if {$usb(idVendor) == "12d1" && [regexp -nocase {android} [exec cat /proc/version]]} {
set flags(os) "android"
}
if {$flags(os) == "android"} {
set configList [ConfigGet conflist $usb(idVendor):#android]
} else {
set configList [ConfigGet conflist $usb(idVendor):$usb(idProduct)]
}
if {[llength $configList] == 0} {
Log "Aargh! Config file missing for $usb(idVendor):$usb(idProduct)! Exit"
SafeExit
}
Log "ConfigList: $configList"
# Check if there is more than one config file for this USB ID,
# which would make an attribute test necessary. If so, check if
# SCSI values are needed
set scsiNeeded 0
if {[llength $configList] > 1} {
if [regexp {:s} $configList] {
set scsiNeeded 1
}
}
if $scsiNeeded {
if [ReadSCSIAttrs $devdir:$iface] {
Log "----------------\nSCSI values from sysfs:"
foreach attr {vendor model rev} {
Log " $attr\t$scsi($attr)"
}
Log "----------------"
} else {
Log "Could not get SCSI attributes, exclude devices with SCSI match"
}
} else {
Log "SCSI attributes not needed, move on"
}
# Now check for a matching config file. Matching is done
# by MatchDevice
set report ""
foreach mconfig $configList {
# skipping installer leftovers like "*.rpmnew"
if [regexp {\.(dpkg|rpm)} $mconfig] {continue}
Log "Check config: $mconfig"
if [MatchDevice $mconfig] {
Log "! matched. Read config data"
set flags(config) [ConfigGet conffile $mconfig]
break
} else {
Log "* no match, don't use this config"
}
}
if {$flags(config) == ""} {
Log "No matching config file found. Exit"
SafeExit
}
ParseDeviceConfig $flags(config)
if [regexp -nocase {0x([0-9a-f]+)} $config(TargetClass) d tc] {
if {$tc == $config(class)} {
Log "Class of interface 0 matches target. Do nothing"
set report "ok:busdev"
}
}
if [string length $usb(busnum)] {
set busParam "-b [string trimleft $usb(busnum) 0]"
set devParam "-g [string trimleft $usb(devnum) 0]"
} else {
set busParam ""
set devParam ""
}
if [regexp -nocase $flags(os) $flags(config)] {
Log "Note: Using generic manufacturer configuration for \"$flags(os)\""
}
if $flags(althuawei) {
regsub {HuaweiNewMode} $flags(config) {HuaweiAltMode} flags(config)
Log "Alternative Huawei mode set globally, modify config"
}
if $flags(nombim) {
set config(NoMBIMCheck) 1
}
if {$config(NoMBIMCheck)==0 && $usb(bNumConfigurations) > 1} {
Log "Device may have an MBIM configuration, check driver ..."
if [CheckMBIM] {
Log " driver for MBIM devices is available"
Log "Find MBIM configuration number ..."
if [catch {set cfgno [exec /usr/sbin/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] {
Log "Error when trying to find MBIM configuration, switch to legacy modem mode"
} else {
set cfgno [string trim $cfgno]
if {$cfgno > 0} {
set config(Configuration) $cfgno
set flags(config) "Configuration=$cfgno"
} else {
Log " No MBIM configuration found, switch to legacy modem mode"
}
}
} else {
Log " no MBIM driver found, switch to legacy modem mode"
}
}
if [PantechAutoSwitch] {
Log "Waiting for Pantech auto-modeswitch"
set report "ok:busdev"
}
if {$config(Configuration) == 0} {
Log "Config file contains dummy method, do nothing. Exit"
SafeExit
}
# General wait - some devices need this
after 500
if {$config(WaitBefore) != ""} {
Log "Delay time of $config(WaitBefore) seconds"
append config(WaitBefore) "000"
after $config(WaitBefore)
}
if {$report == ""} {
# Now we are actually switching
if $flags(logging) {
Log "Command line:\nusb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f \$flags(config)"
catch {set report [exec /usr/sbin/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
Log "\nVerbose debug output of usb_modeswitch and libusb follows"
Log "(Note that some USB errors are to be expected in the process)"
Log "--------------------------------"
Log $report
Log "--------------------------------"
Log "(end of usb_modeswitch output)\n"
} else {
catch {set report [exec /usr/sbin/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
}
}
# Switching is complete; success checking was either
# done by usb_modeswitch and logged via syslog OR bus/dev
# parameter were used; then we do check for success HERE
if {$config(Configuration) != ""} {
set ifdir [regsub {(\d):\d+\.0} $ifdir "\\1:$config(Configuration).0"]
}
if [regexp {ok:busdev} $report] {
if [CheckSuccess $devdir] {
Log "Mode switching was successful, found $usb(idVendor):$usb(idProduct) ($usb(manufacturer): $usb(product))"
SysLog "usb_modeswitch: switched to $usb(idVendor):$usb(idProduct) on [format %03d $usb(busnum)]/[format %03d $usb(devnum)]"
} else {
Log "\nTarget config not matching - current values are"
LogAttributes
Log "\nMode switching may have failed. Exit"
SafeExit
}
} else {
if {![file isdirectory $devdir]} {
Log "Device directory in sysfs is gone! Something went wrong, abort"
SafeExit
}
if {![regexp {ok:} $report]} {
Log "\nCore program reported switching failure. Exit"
SafeExit
}
# Give the device another second if it's not fully back yet
if {![file exists $devdir/idProduct]} {
after 1000
}
ReadUSBAttrs $devdir $ifdir
}
# driver binding removed !!
if {[string length "$usb(idVendor)$usb(idProduct)"] < 8} {
if {![regexp {ok:(\w{4}):(\w{4})} $report d usb(idVendor) usb(idProduct)]} {
Log "No target vendor/product ID found or given, can't continue. Abort"
SafeExit
}
}
# wait for drivers to bind
after 500
if {[llength [glob -nocomplain $devdir/$ifdir/ttyUSB*]] > 0} {
Log "Serial USB driver bound to interface 0\n will try to guess and symlink modem port on next connect"
AddToList link_list $usb(idVendor):$usb(idProduct)
}
# In newer kernels there is a switch to avoid the use of a device
# reset (e.g. from usb-storage) which would possibly switch back
# a mode-switching device to initial mode
if [regexp {ok:} $report] {
Log "Check for AVOID_RESET_QUIRK kernel attribute"
if [file exists $devdir/avoid_reset_quirk] {
if [catch {exec echo "1" >$devdir/avoid_reset_quirk 2>/dev/null} err] {
Log " Error setting the attribute: $err"
} else {
Log " AVOID_RESET_QUIRK activated"
}
} else {
Log " not present in this kernel"
}
}
Log "\nAll done, exit\n"
SafeExit
}
# end of proc {Main}
proc {ReadSCSIAttrs} {topdir} {
global scsi
set counter 0
set sysdir $topdir
Log "Check storage tree in sysfs ..."
while {$counter < 20} {
Log " loop $counter/20"
if {![file isdirectory $sysdir]} {
# Device is gone. Unplugged? Switched by kernel?
Log " sysfs device tree is gone; abort SCSI value check"
return 0
}
# Searching the storage/SCSI tree; might take a while
if {[set dirList [glob -nocomplain $topdir/host*]] != ""} {
set sysdir [lindex $dirList 0]
if {[set dirList [glob -nocomplain $sysdir/target*]] != ""} {
set sysdir [lindex $dirList 0]
regexp {.*target(.*)} $sysdir d subdir
if {[set dirList [glob -nocomplain $sysdir/$subdir*]] != ""} {
set sysdir [lindex $dirList 0]
if [file exists $sysdir/vendor] {
Log " Storage tree is ready"
break
}
}
}
}
after 500
incr counter
}
if {$counter == 20} {
Log "SCSI tree not found; you may want to check if this path/file exists:"
Log "$sysdir/vendor\n"
return 0
}
Log "Read SCSI values ..."
foreach attr {vendor model rev} {
if [file exists $sysdir/$attr] {
set rc [open $sysdir/$attr r]
set scsi($attr) [read -nonewline $rc]
close $rc
} else {
set scsi($attr) ""
Log "Warning: SCSI attribute \"$attr\" not found."
}
}
return 1
}
# end of proc {ReadSCSIAttrs}
proc {ReadUSBAttrs} {dir args} {
global usb
set attrList {idVendor idProduct bConfigurationValue manufacturer product serial devnum busnum bNumConfigurations}
set mandatoryList {idVendor idProduct bNumConfigurations}
set result 1
if {$args != ""} {
lappend attrList "$args/bInterfaceClass"
lappend mandatoryList "$args/bInterfaceClass"
}
foreach attr $attrList {
if [file exists $dir/$attr] {
set rc [open $dir/$attr r]
set usb($attr) [string trim [read -nonewline $rc]]
close $rc
} else {
set usb($attr) ""
if {[lsearch $mandatoryList $attr] > -1} {
set result 0
}
if {$attr == "serial"} {continue}
Log " Warning: USB attribute \"$attr\" not found"
}
}
return $result
}
# end of proc {ReadUSBAttrs}
proc {MatchDevice} {config} {
global scsi usb match
set devinfo [file tail $config]
set infoList [split $devinfo :]
set stringList [lrange $infoList 2 end]
if {[llength $stringList] == 0} {return 1}
foreach teststring $stringList {
if {$teststring == "?"} {return 0}
set tokenList [split $teststring =]
set id [lindex $tokenList 0]
set matchstring [lindex $tokenList 1]
set blankstring ""
regsub -all {_} $matchstring { } blankstring
Log "match $match($id)"
Log " string1 (exact): $matchstring"
Log " string2 (blanks): $blankstring"
Log " device string: [set $match($id)]"
if {!([string match *$matchstring* [set $match($id)]] || [string match *$blankstring* [set $match($id)]])} {
return 0
}
}
return 1
}
# end of proc {MatchDevice}
proc {ParseGlobalConfig} {path} {
global flags
set configFile ""
if [string length $path] {
set places [list $path]
} else {
set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch]
}
foreach cfg $places {
if [file exists $cfg] {
set configFile $cfg
break
}
}
if {$configFile == ""} {return "No configuration file found, using defaults"}
set rc [open $configFile r]
while {![eof $rc]} {
gets $rc line
if [regexp {^#} [string trim $line]] {continue}
if [regexp {DisableMBIMGlobal\s*=\s*([^\s]+)} $line d val] {
set flags(nombim) [regexp -nocase {1|yes|true} $val]
}
if [regexp {DisableSwitching\s*=\s*([^\s]+)} $line d val] {
set flags(noswitching) [regexp -nocase {1|yes|true} $val]
}
if [regexp {EnableLogging\s*=\s*([^\s]+)} $line d val] {
set flags(logging) [regexp -nocase {1|yes|true} $val]
}
if [regexp {SetStorageDelay\s*=\s*([^\s]+)} $line d val] {
if [regexp {\d+} $val] {
set flags(stordelay) $val
}
}
if [regexp {HuaweiAltModeGlobal\s*=\s*([^\s]+)} $line d val] {
set flags(althuawei) [regexp -nocase {1|yes|true} $val]
}
}
return "Use global config file: $configFile"
}
# end of proc {ParseGlobalConfig}
proc ParseDeviceConfig {cfg} {
global config
set config(WaitBefore) ""
set config(TargetVendor) ""
set config(TargetProduct) ""
set config(TargetClass) ""
set config(Configuration) ""
set config(NoMBIMCheck) 0
set config(PantechMode) 0
set config(CheckSuccess) 20
foreach pname [lsort [array names config]] {
if [regexp -line "^\[^# \]*?$pname.*?= *(0x(\\w+)|\"(\[0-9a-fA-F,\]+)\"|(\[0-9\]+)) *\$" $cfg d config($pname)] {
# Log "config: $pname set to $config($pname)"
}
}
set config(WaitBefore) [string trimleft $config(WaitBefore) 0]
}
# end of proc {ParseDeviceConfig}
proc ConfigGet {command config} {
global setup usb flags
switch $command {
conflist {
# Unpackaged configs first; sorting is essential for priority
set configList [lsort -decreasing [glob -nocomplain $setup(dbdir_etc)/$config*]]
set configList [concat $configList [lsort -decreasing [glob -nocomplain $setup(dbdir)/$config*]]]
eval lappend configList [glob -nocomplain $setup(dbdir)/$usb(idVendor):#$flags(os)]
if [file exists $setup(dbdir)/configPack.tar.gz] {
Log "Found packed config collection $setup(dbdir)/configPack.tar.gz"
if [catch {set packedList [exec tar -tzf $setup(dbdir)/configPack.tar.gz 2>/dev/null]} err] {
Log "Error: problem opening config package; tar returned\n $err"
return {}
}
set packedList [split $packedList \n]
set packedConfigList [lsort -decreasing [lsearch -glob -all -inline $packedList $config*]]
lappend packedConfigList [lsearch -inline $packedList $usb(idVendor):#$flags(os)]
# Now add packaged configs with a mark, again sorted for priority
foreach packedConfig $packedConfigList {
lappend configList "pack/$packedConfig"
}
}
return $configList
}
conffile {
if [regexp {^pack/} $config] {
set config [regsub {pack/} $config {}]
Log "Extract config $config from collection $setup(dbdir)/configPack.tar.gz"
set configContent [exec tar -xzOf $setup(dbdir)/configPack.tar.gz $config 2>/dev/null]
} else {
if [regexp [list $setup(dbdir_etc)] $config] {
Log "Use config file from override folder $setup(dbdir_etc)"
SysLog "usb_modeswitch: use overriding config file $config; make sure this is intended"
SysLog "usb_modeswitch: please report any new or corrected settings; otherwise, check for outdated files"
}
set rc [open $config r]
set configContent [read $rc]
close $rc
}
return $configContent
}
}
}
# end of proc {ConfigGet}
proc {Log} {msg} {
global flags device loginit
if {$flags(logwrite) == 0} {append loginit $msg\n}
if {$flags(logging) == 0} {return}
if $flags(logwrite) {
if [string length $loginit] {
exec echo "\nUSB_ModeSwitch log from [clock format [clock seconds]]" >/var/log/usb_modeswitch_$device
exec echo "$loginit" >>/var/log/usb_modeswitch_$device
set loginit ""
}
exec echo $msg >>/var/log/usb_modeswitch_$device
} else {
append loginit "\n$msg"
}
}
# end of proc {Log}
# Writing the log file and exit
proc {SafeExit} {} {
global flags
set flags(logwrite) 1
Log ""
exit
}
# end of proc {SafeExit}
proc {SymLinkName} {path} {
global device flags
proc {hasInterrupt} {ifDir} {
if {[llength [glob -nocomplain $ifDir/ttyUSB*]] == 0} {
Log " no ttyUSB interface - skip endpoint check"
return 0
}
foreach epDir [glob -nocomplain $ifDir/ep_*] {
set e [file tail $epDir]
Log " check $e ..."
if [file exists $epDir/type] {
set rc [open $epDir/type r]
set type [read $rc]
close $rc
if [regexp {Interrupt} $type] {
Log " $e has interrupt transfer type"
return 1
}
}
}
return 0
}
# In case the device path is returned as /class/tty/ttyUSB,
# get the USB device path from linked tree "device"
set linkpath /sys$path/device
if [file exists $linkpath] {
if {[file type $linkpath] == "link"} {
set rawpath [file readlink $linkpath]
set trimpath [regsub -all {\.\./} $rawpath {}]
if [file isdirectory /sys/$trimpath] {
append loginit "\n Use path $path\n"
set path /$trimpath
}
}
}
if {![regexp {([0-9]+-[0-9]+[\.0-9]*:[^/]*).*(ttyUSB[0-9]+)} $path d myDev myPort]} {
if $flags(logging) {
set device [clock clicks]
Log "This is not a ttyUSB port. Abort"
}
return ""
}
set device ttyUSB_$myDev
set flags(logwrite) 1
Log "My name is $myPort\n"
if {![regexp {(.*?[0-9]+)\.([0-9]+)/ttyUSB} /sys$path d ifRoot ifNum]} {
Log "Could not find interface in path\n $path. Abort"
return ""
}
set ifDir $ifRoot.$ifNum
Log "Check my endpoints ...\n in $ifDir"
if [hasInterrupt $ifDir] {
Log "\n--> I am an interrupt port"
set rightPort 1
} else {
Log "\n--> I am not an interrupt port\n"
set rightPort 0
}
# There are devices with more than one interrupt interface.
# Assume that the lowest of these is usable. Check all
# possible lower interfaces
if { $rightPort && ($ifNum > 0) } {
Log "\nLook for lower ports with interrupt endpoints"
for {set i 0} {$i < $ifNum} {incr i} {
set ifDir $ifRoot.$i
Log " in ifDir $ifDir ..."
if [hasInterrupt $ifDir] {
Log "\n--> found an interrupt interface below me\n"
set rightPort 0
break
}
}
}
if {$rightPort == 0} {
Log "Return empty name and exit"
return ""
}
Log "\n--> No interrupt interface below me\n"
cd /dev
set idx 2
set symlinkName "gsmmodem"
while {$idx < 256} {
if {![file exists $symlinkName]} {
set placeholder [open /dev/$symlinkName w]
close $placeholder
break
}
set symlinkName gsmmodem$idx
incr idx
}
if {$idx == 256} {return ""}
Log "Return symlink name \"$symlinkName\" and exit"
return $symlinkName
}
# end of proc {SymLinkName}
# Add USB ID to list of devices needing later treatment
proc {AddToList} {name id} {
set listfile /var/lib/usb_modeswitch/$name
if [file exists $listfile] {
set rc [open $listfile r]
set buffer [read $rc]
close $rc
if [string match *$id* $buffer] {
return
}
set idList [split [string trim $buffer] \n]
}
lappend idList $id
set buffer [join $idList "\n"]
if [catch {set lc [open $listfile w]}] {return}
puts $lc $buffer
close $lc
}
# end of proc {AddToList}
proc {CheckSuccess} {devdir} {
global config usb flags
# For Cisco AM10, target device not on same port
if {$usb(idVendor) == "1307" && $usb(idProduct) == "1169"} {
set devdir [string range $devdir 0 end-1]2
}
set ifdir [file tail [IfDir 0 $devdir]]
if {[string length $config(TargetClass)] || [string length $config(Configuration)]} {
set config(TargetVendor) $usb(idVendor)
set config(TargetProduct) $usb(idProduct)
}
Log "Check success of mode switch for max. $config(CheckSuccess) seconds ..."
set expected 1
for {set i 1} {$i <= $config(CheckSuccess)} {incr i} {
after 1000
if {![file isdirectory $devdir]} {
Log " Wait for device file system ($i sec.) ..."
continue
} else {
Log " Read attributes ..."
}
set ifdir [IfDir 0 $devdir]
if {$ifdir == ""} {continue}
set ifdir [file tail $ifdir]
if {![ReadUSBAttrs $devdir $ifdir]} {
Log " Essential attributes are missing, continue wait ..."
continue
}
if [string length $config(Configuration)] {
if {$usb(bConfigurationValue) != $config(Configuration)} {continue}
}
if [string length $config(TargetClass)] {
if {![regexp -nocase $usb($ifdir/bInterfaceClass) $config(TargetClass)]} {
if {$config(class) != $usb($ifdir/bInterfaceClass} {
set expected 0
} else {continue}
}
}
if {![regexp -nocase $usb(idVendor) $config(TargetVendor)]} {
if {![regexp -nocase $usb(idVendor) $config(vendor)]} {
set expected 0
} else {continue}
}
if {![regexp -nocase $usb(idProduct) $config(TargetProduct)]} {
if {![regexp -nocase $usb(idProduct) $config(product)]} {
set expected 0
} else {continue}
}
# Arriving here means that device attributes have changed
if $expected {
Log " All attributes matched"
} else {
if [regexp -nocase {/[0-9a-f]+:#} $flags(config)] {
Log " idProduct has changed after generic mode-switch, assume success"
} else {
if [regexp {HuaweiAltMode} $flags(config)] {
Log " Alternative target attributes found, assume success"
} else {
Log " Attributes are different but target values are unexpected:"
LogAttributes
}
}
}
break
}
if {$i > 20} {return 0} else {return 1}
}
# end of proc {CheckSuccess}
proc {IfDir} {iface devdir} {
set files [glob -nocomplain $devdir/*]
set iffiles [lsort [lsearch -all -inline -regexp $files {^.*/[^/]*[0-9]+\.[0-9]$}]]
set sorted [concat $iffiles [lsort [lsearch -all -inline -regexp $files {^.*/[^/]*[0-9]+\.[0-9][0-9]$}]]]
if {[llength $sorted] == 0} {
return ""
}
set ifdir [lindex $sorted $iface]
if {![string length $ifdir] || ![file isdirectory $ifdir]} {
return ""
}
return $ifdir
}
# end of proc {IfDir}
proc {IfClass} {iface devdir} {
set ifdir [IfDir $iface $devdir]
if {![file exists $ifdir/bInterfaceClass]} {
return -1
}
set rc [open $ifdir/bInterfaceClass r]
set c [read $rc]
close $rc
return [string trim $c]
}
# end of proc {IfClass}
proc {ShowUsage} {} {
puts "Dispatcher for 'usb_modeswitch'; usually run by udev, not intended for interactive operation"
puts "Usage: usb_modeswitch_dispatcher [--config-file=<path>] --switch-mode=<device kernel name>"
puts " usb_modeswitch_dispatcher --symlink-name=<sys path to device>"
}
# end of proc {ShowUsage}
proc {SysLog} {msg} {
global flags
if {![info exists flags(logger)]} {
set flags(logger) ""
foreach fn {/bin/logger /usr/bin/logger} {
if [file exists $fn] {
set flags(logger) $fn
}
}
Log "Logger is $flags(logger)"
}
if {$flags(logger) == ""} {
Log "Can't add system message, no syslog helper found"
return
}
catch {exec $flags(logger) -p syslog.notice "$msg" 2>/dev/null}
}
# end of proc {SysLog}
proc {SetStorageDelay} {secs} {
Log "Adjust delay for USB storage devices ..."
set attrib /sys/module/usb_storage/parameters/delay_use
if {![file exists $attrib]} {
Log "Error: could not find delay_use attribute"
return
}
if [catch {set ch [open $attrib r+]} err] {
Log "Error: could not access delay_use attribute: $err"
return
}
if {[read $ch] < $secs} {
seek $ch 0 start
puts -nonewline $ch $secs
Log " Delay set to $secs seconds\n"
} else {
Log " Current value is higher than $secs. Leave it alone\n"
}
close $ch
}
# end of proc {SetStorageDelay}
proc {CheckMBIM} {} {
set kversion [exec uname -r]
if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/cdc_mbim*]] {return 1}
if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1}
return 0
}
# end of proc {CheckMBIM}
proc {CheckQMI} {} {
set kversion [exec uname -r]
if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/qmi_wwan*]] {return 1}
if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1}
return 0
}
# end of proc {CheckQMI}
proc {PantechAutoSwitch} {} {
global config flags
if {$config(PantechMode) == 3} {return 1}
if {$config(PantechMode) == 1} {
if {"$config(vendor):$config(product)" == "10a9:6080"} {
set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=2"]
Log " PantechMode changed to 2"
return 0
} elseif [CheckQMI] {
set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=4"]
Log " PantechMode changed to 4"
return 0
} else {
return 1
}
} else {return 0}
}
# end of proc {PantechAutoSwitch}
proc {LogAttributes} {} {
global flags usb
if $flags(logging) {
set attrList {idVendor idProduct bConfigurationValue manufacturer product serial}
foreach attr [lsort [array names usb]] {
Log " [format %-26s $attr:] $usb($attr)"
}
}
}
# end of proc {LogAttributes}
proc {HasFF} {devdir} {
set i 0
while {[set dir [IfDir $i $devdir]] != ""} {
set c [exec cat $dir/bInterfaceClass]
if {$c == "ff"} {return 1}
incr i
}
return 0
}
# end of proc {HasFF}
# The actual entry point
Main $argv $argc
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| ModemManager | File | 2.07 MB | 0755 |
|
| a2disconf | File | 15.75 KB | 0755 |
|
| a2dismod | File | 15.75 KB | 0755 |
|
| a2dissite | File | 15.75 KB | 0755 |
|
| a2enconf | File | 15.75 KB | 0755 |
|
| a2enmod | File | 15.75 KB | 0755 |
|
| a2ensite | File | 15.75 KB | 0755 |
|
| a2query | File | 9.6 KB | 0755 |
|
| aa-load | File | 38.75 KB | 0755 |
|
| aa-remove-unknown | File | 3.15 KB | 0755 |
|
| aa-status | File | 39.06 KB | 0755 |
|
| aa-teardown | File | 137 B | 0755 |
|
| accessdb | File | 14.55 KB | 0755 |
|
| add-shell | File | 1.03 KB | 0755 |
|
| addgnupghome | File | 3 KB | 0755 |
|
| addgroup | File | 53.9 KB | 0755 |
|
| adduser | File | 53.9 KB | 0755 |
|
| agetty | File | 59.56 KB | 0755 |
|
| apache2 | File | 736.55 KB | 0755 |
|
| apache2ctl | File | 7.26 KB | 0755 |
|
| apachectl | File | 7.26 KB | 0755 |
|
| apparmor_parser | File | 1.55 MB | 0755 |
|
| apparmor_status | File | 39.06 KB | 0755 |
|
| applygnupgdefaults | File | 2.17 KB | 0755 |
|
| argdist-bpfcc | File | 36 KB | 0755 |
|
| arpd | File | 26.33 KB | 0755 |
|
| arptables | File | 219.16 KB | 0755 |
|
| arptables-nft | File | 219.16 KB | 0755 |
|
| arptables-nft-restore | File | 219.16 KB | 0755 |
|
| arptables-nft-save | File | 219.16 KB | 0755 |
|
| arptables-restore | File | 219.16 KB | 0755 |
|
| arptables-save | File | 219.16 KB | 0755 |
|
| badblocks | File | 34.32 KB | 0755 |
|
| bashreadline-bpfcc | File | 2.32 KB | 0755 |
|
| bashreadline.bt | File | 698 B | 0755 |
|
| bcache-super-show | File | 14.3 KB | 0755 |
|
| bindsnoop-bpfcc | File | 15.96 KB | 0755 |
|
| biolatency-bpfcc | File | 11.1 KB | 0755 |
|
| biolatency-kp.bt | File | 664 B | 0755 |
|
| biolatency.bt | File | 681 B | 0755 |
|
| biolatpcts-bpfcc | File | 10.01 KB | 0755 |
|
| biopattern-bpfcc | File | 3.86 KB | 0755 |
|
| biosdecode | File | 27.2 KB | 0755 |
|
| biosnoop-bpfcc | File | 10.58 KB | 0755 |
|
| biosnoop.bt | File | 1.12 KB | 0755 |
|
| biostacks.bt | File | 915 B | 0755 |
|
| biotop-bpfcc | File | 9.34 KB | 0755 |
|
| bitesize-bpfcc | File | 1.14 KB | 0755 |
|
| bitesize.bt | File | 567 B | 0755 |
|
| blkdeactivate | File | 15.97 KB | 0755 |
|
| blkdiscard | File | 22.38 KB | 0755 |
|
| blkid | File | 54.41 KB | 0755 |
|
| blkzone | File | 34.38 KB | 0755 |
|
| blockdev | File | 34.38 KB | 0755 |
|
| bpflist-bpfcc | File | 2.54 KB | 0755 |
|
| bpftool | File | 1.58 KB | 0755 |
|
| bridge | File | 108.49 KB | 0755 |
|
| btrfsdist-bpfcc | File | 6.47 KB | 0755 |
|
| btrfsslower-bpfcc | File | 9.75 KB | 0755 |
|
| cache_check | File | 1.36 MB | 0755 |
|
| cache_dump | File | 1.36 MB | 0755 |
|
| cache_metadata_size | File | 1.36 MB | 0755 |
|
| cache_repair | File | 1.36 MB | 0755 |
|
| cache_restore | File | 1.36 MB | 0755 |
|
| cache_writeback | File | 1.36 MB | 0755 |
|
| cachestat-bpfcc | File | 6.38 KB | 0755 |
|
| cachetop-bpfcc | File | 9.15 KB | 0755 |
|
| capable-bpfcc | File | 8.28 KB | 0755 |
|
| capable.bt | File | 1.88 KB | 0755 |
|
| capsh | File | 57.09 KB | 0755 |
|
| cfdisk | File | 94.73 KB | 0755 |
|
| cgdisk | File | 166.48 KB | 0755 |
|
| chcpu | File | 30.38 KB | 0755 |
|
| check_forensic | File | 952 B | 0755 |
|
| chgpasswd | File | 58.32 KB | 0755 |
|
| chmem | File | 34.38 KB | 0755 |
|
| chpasswd | File | 54.43 KB | 0755 |
|
| chroot | File | 38.51 KB | 0755 |
|
| cobjnew-bpfcc | File | 53 B | 0755 |
|
| compactsnoop-bpfcc | File | 11.1 KB | 0755 |
|
| cpgr | File | 48.45 KB | 0755 |
|
| cppw | File | 48.45 KB | 0755 |
|
| cpudist-bpfcc | File | 6.85 KB | 0755 |
|
| cpuunclaimed-bpfcc | File | 14.59 KB | 0755 |
|
| cpuwalk.bt | File | 497 B | 0755 |
|
| criticalstat-bpfcc | File | 8.41 KB | 0755 |
|
| cron | File | 58.67 KB | 0755 |
|
| cryptdisks_start | File | 1.51 KB | 0755 |
|
| cryptdisks_stop | File | 844 B | 0755 |
|
| cryptsetup | File | 225.9 KB | 0755 |
|
| ctrlaltdel | File | 14.38 KB | 0755 |
|
| dbconfig-generate-include | File | 12.36 KB | 0755 |
|
| dbconfig-load-include | File | 5.57 KB | 0755 |
|
| dbslower-bpfcc | File | 7.22 KB | 0755 |
|
| dbstat-bpfcc | File | 3.7 KB | 0755 |
|
| dcb | File | 80.52 KB | 0755 |
|
| dcsnoop-bpfcc | File | 4.03 KB | 0755 |
|
| dcsnoop.bt | File | 1.23 KB | 0755 |
|
| dcstat-bpfcc | File | 3.77 KB | 0755 |
|
| ddns-confgen | File | 22.3 KB | 0755 |
|
| deadlock-bpfcc | File | 20.45 KB | 0755 |
|
| debugfs | File | 225.87 KB | 0755 |
|
| delgroup | File | 18.53 KB | 0755 |
|
| deluser | File | 18.53 KB | 0755 |
|
| depmod | File | 170.24 KB | 0755 |
|
| devlink | File | 150.86 KB | 0755 |
|
| dhcpcd | File | 395.4 KB | 0755 |
|
| dirtop-bpfcc | File | 8.37 KB | 0755 |
|
| dmeventd | File | 50.38 KB | 0755 |
|
| dmidecode | File | 135.25 KB | 0755 |
|
| dmsetup | File | 171.05 KB | 0755 |
|
| dmstats | File | 171.05 KB | 0755 |
|
| dosfsck | File | 78.38 KB | 0755 |
|
| dosfslabel | File | 38.38 KB | 0755 |
|
| dpkg-preconfigure | File | 4.25 KB | 0755 |
|
| dpkg-reconfigure | File | 4.43 KB | 0755 |
|
| drsnoop-bpfcc | File | 6.73 KB | 0755 |
|
| dumpe2fs | File | 34.31 KB | 0755 |
|
| e2freefrag | File | 18.3 KB | 0755 |
|
| e2fsck | File | 364.34 KB | 0755 |
|
| e2image | File | 42.31 KB | 0755 |
|
| e2label | File | 110.56 KB | 0755 |
|
| e2mmpstatus | File | 34.31 KB | 0755 |
|
| e2scrub | File | 7.12 KB | 0755 |
|
| e2scrub_all | File | 5.27 KB | 0755 |
|
| e2undo | File | 22.3 KB | 0755 |
|
| e4crypt | File | 30.38 KB | 0755 |
|
| e4defrag | File | 34.3 KB | 0755 |
|
| ebtables | File | 219.16 KB | 0755 |
|
| ebtables-nft | File | 219.16 KB | 0755 |
|
| ebtables-nft-restore | File | 219.16 KB | 0755 |
|
| ebtables-nft-save | File | 219.16 KB | 0755 |
|
| ebtables-restore | File | 219.16 KB | 0755 |
|
| ebtables-save | File | 219.16 KB | 0755 |
|
| ebtables-translate | File | 219.16 KB | 0755 |
|
| era_check | File | 1.36 MB | 0755 |
|
| era_dump | File | 1.36 MB | 0755 |
|
| era_invalidate | File | 1.36 MB | 0755 |
|
| era_restore | File | 1.36 MB | 0755 |
|
| ethtool | File | 651.68 KB | 0755 |
|
| execsnoop-bpfcc | File | 9.82 KB | 0755 |
|
| execsnoop.bt | File | 928 B | 0755 |
|
| exitsnoop-bpfcc | File | 9.42 KB | 0755 |
|
| ext4dist-bpfcc | File | 6.53 KB | 0755 |
|
| ext4slower-bpfcc | File | 9.71 KB | 0755 |
|
| faillock | File | 22.31 KB | 0755 |
|
| fatlabel | File | 38.38 KB | 0755 |
|
| fdisk | File | 114.42 KB | 0755 |
|
| filefrag | File | 18.32 KB | 0755 |
|
| filegone-bpfcc | File | 5.64 KB | 0755 |
|
| filelife-bpfcc | File | 6.38 KB | 0755 |
|
| fileslower-bpfcc | File | 7.2 KB | 0755 |
|
| filetop-bpfcc | File | 6.35 KB | 0755 |
|
| findfs | File | 14.38 KB | 0755 |
|
| fixparts | File | 58.48 KB | 0755 |
|
| fsadm | File | 24 KB | 0755 |
|
| fsck | File | 42.42 KB | 0755 |
|
| fsck.btrfs | File | 1.16 KB | 0755 |
|
| fsck.cramfs | File | 30.44 KB | 0755 |
|
| fsck.ext2 | File | 364.34 KB | 0755 |
|
| fsck.ext3 | File | 364.34 KB | 0755 |
|
| fsck.ext4 | File | 364.34 KB | 0755 |
|
| fsck.fat | File | 78.38 KB | 0755 |
|
| fsck.minix | File | 54.41 KB | 0755 |
|
| fsck.msdos | File | 78.38 KB | 0755 |
|
| fsck.vfat | File | 78.38 KB | 0755 |
|
| fsck.xfs | File | 2.51 KB | 0755 |
|
| fsfreeze | File | 14.38 KB | 0755 |
|
| fstab-decode | File | 14.3 KB | 0755 |
|
| fstrim | File | 42.38 KB | 0755 |
|
| funccount-bpfcc | File | 12.68 KB | 0755 |
|
| funcinterval-bpfcc | File | 5.46 KB | 0755 |
|
| funclatency-bpfcc | File | 11.28 KB | 0755 |
|
| funcslower-bpfcc | File | 10.38 KB | 0755 |
|
| gdisk | File | 198.48 KB | 0755 |
|
| genl | File | 120.58 KB | 0755 |
|
| getcap | File | 14.3 KB | 0755 |
|
| gethostlatency-bpfcc | File | 3.82 KB | 0755 |
|
| gethostlatency.bt | File | 1.19 KB | 0755 |
|
| getpcaps | File | 14.3 KB | 0755 |
|
| getty | File | 59.56 KB | 0755 |
|
| groupadd | File | 71.13 KB | 0755 |
|
| groupdel | File | 62.91 KB | 0755 |
|
| groupmems | File | 58.34 KB | 0755 |
|
| groupmod | File | 71.04 KB | 0755 |
|
| grpck | File | 58.32 KB | 0755 |
|
| grpconv | File | 50.16 KB | 0755 |
|
| grpunconv | File | 50.16 KB | 0755 |
|
| grub-bios-setup | File | 958.55 KB | 0755 |
|
| grub-install | File | 1.17 MB | 0755 |
|
| grub-macbless | File | 946.41 KB | 0755 |
|
| grub-mkconfig | File | 8.63 KB | 0755 |
|
| grub-mkdevicemap | File | 70.69 KB | 0755 |
|
| grub-probe | File | 954.66 KB | 0755 |
|
| grub-reboot | File | 4.73 KB | 0755 |
|
| grub-set-default | File | 3.47 KB | 0755 |
|
| halt | File | 1.43 MB | 0755 |
|
| hardirqs-bpfcc | File | 6.85 KB | 0755 |
|
| hdparm | File | 139.43 KB | 0755 |
|
| httxt2dbm | File | 14.3 KB | 0755 |
|
| iconvconfig | File | 34.47 KB | 0755 |
|
| init | File | 98.45 KB | 0755 |
|
| inject-bpfcc | File | 16.06 KB | 0755 |
|
| insmod | File | 170.24 KB | 0755 |
|
| install-sgmlcatalog | File | 4.44 KB | 0755 |
|
| installkernel | File | 2.6 KB | 0755 |
|
| integritysetup | File | 67.06 KB | 0755 |
|
| invoke-rc.d | File | 16.13 KB | 0755 |
|
| ip | File | 754.8 KB | 0755 |
|
| ip6tables | File | 219.16 KB | 0755 |
|
| ip6tables-apply | File | 6.89 KB | 0755 |
|
| ip6tables-legacy | File | 92.95 KB | 0755 |
|
| ip6tables-legacy-restore | File | 92.95 KB | 0755 |
|
| ip6tables-legacy-save | File | 92.95 KB | 0755 |
|
| ip6tables-nft | File | 219.16 KB | 0755 |
|
| ip6tables-nft-restore | File | 219.16 KB | 0755 |
|
| ip6tables-nft-save | File | 219.16 KB | 0755 |
|
| ip6tables-restore | File | 219.16 KB | 0755 |
|
| ip6tables-restore-translate | File | 219.16 KB | 0755 |
|
| ip6tables-save | File | 219.16 KB | 0755 |
|
| ip6tables-translate | File | 219.16 KB | 0755 |
|
| iptables | File | 219.16 KB | 0755 |
|
| iptables-apply | File | 6.89 KB | 0755 |
|
| iptables-legacy | File | 92.95 KB | 0755 |
|
| iptables-legacy-restore | File | 92.95 KB | 0755 |
|
| iptables-legacy-save | File | 92.95 KB | 0755 |
|
| iptables-nft | File | 219.16 KB | 0755 |
|
| iptables-nft-restore | File | 219.16 KB | 0755 |
|
| iptables-nft-save | File | 219.16 KB | 0755 |
|
| iptables-restore | File | 219.16 KB | 0755 |
|
| iptables-restore-translate | File | 219.16 KB | 0755 |
|
| iptables-save | File | 219.16 KB | 0755 |
|
| iptables-translate | File | 219.16 KB | 0755 |
|
| iscsi-iname | File | 18.3 KB | 0755 |
|
| iscsi_discovery | File | 5.17 KB | 0755 |
|
| iscsiadm | File | 370.43 KB | 0755 |
|
| iscsid | File | 286.55 KB | 0755 |
|
| iscsistart | File | 274.49 KB | 0755 |
|
| isosize | File | 14.38 KB | 0755 |
|
| iucode-tool | File | 54.34 KB | 0755 |
|
| iucode_tool | File | 54.34 KB | 0755 |
|
| javacalls-bpfcc | File | 55 B | 0755 |
|
| javaflow-bpfcc | File | 54 B | 0755 |
|
| javagc-bpfcc | File | 52 B | 0755 |
|
| javaobjnew-bpfcc | File | 56 B | 0755 |
|
| javastat-bpfcc | File | 54 B | 0755 |
|
| javathreads-bpfcc | File | 57 B | 0755 |
|
| kbdrate | File | 18.31 KB | 0755 |
|
| killall5 | File | 26.23 KB | 0755 |
|
| killsnoop-bpfcc | File | 4.45 KB | 0755 |
|
| killsnoop.bt | File | 873 B | 0755 |
|
| klockstat-bpfcc | File | 13.04 KB | 0755 |
|
| kpartx | File | 42.16 KB | 0755 |
|
| kvmexit-bpfcc | File | 11.19 KB | 0755 |
|
| ldattach | File | 26.38 KB | 0755 |
|
| ldconfig | File | 387 B | 0755 |
|
| ldconfig.real | File | 1 MB | 0755 |
|
| llcstat-bpfcc | File | 4.48 KB | 0755 |
|
| loads.bt | File | 1.1 KB | 0755 |
|
| locale-gen | File | 4.21 KB | 0755 |
|
| logrotate | File | 94.24 KB | 0755 |
|
| logsave | File | 14.16 KB | 0755 |
|
| losetup | File | 74.52 KB | 0755 |
|
| lsmod | File | 170.24 KB | 0755 |
|
| luksformat | File | 3.32 KB | 0755 |
|
| lvchange | File | 3.01 MB | 0755 |
|
| lvconvert | File | 3.01 MB | 0755 |
|
| lvcreate | File | 3.01 MB | 0755 |
|
| lvdisplay | File | 3.01 MB | 0755 |
|
| lvextend | File | 3.01 MB | 0755 |
|
| lvm | File | 3.01 MB | 0755 |
|
| lvmconfig | File | 3.01 MB | 0755 |
|
| lvmdiskscan | File | 3.01 MB | 0755 |
|
| lvmdump | File | 10.12 KB | 0755 |
|
| lvmpolld | File | 235.97 KB | 0755 |
|
| lvmsadc | File | 3.01 MB | 0755 |
|
| lvmsar | File | 3.01 MB | 0755 |
|
| lvreduce | File | 3.01 MB | 0755 |
|
| lvremove | File | 3.01 MB | 0755 |
|
| lvrename | File | 3.01 MB | 0755 |
|
| lvresize | File | 3.01 MB | 0755 |
|
| lvs | File | 3.01 MB | 0755 |
|
| lvscan | File | 3.01 MB | 0755 |
|
| lxc | File | 589 B | 0755 |
|
| lxd | File | 589 B | 0755 |
|
| make-bcache | File | 22.38 KB | 0755 |
|
| make-ssl-cert | File | 6.65 KB | 0755 |
|
| mariadbd | File | 26.09 MB | 0755 |
|
| mdadm | File | 622.21 KB | 0755 |
|
| mdflush-bpfcc | File | 2.24 KB | 0755 |
|
| mdflush.bt | File | 775 B | 0755 |
|
| mdmon | File | 258.8 KB | 0755 |
|
| memleak-bpfcc | File | 20.8 KB | 0755 |
|
| mkdosfs | File | 50.83 KB | 0755 |
|
| mke2fs | File | 130.62 KB | 0755 |
|
| mkfs | File | 14.38 KB | 0755 |
|
| mkfs.bfs | File | 22.38 KB | 0755 |
|
| mkfs.btrfs | File | 560.3 KB | 0755 |
|
| mkfs.cramfs | File | 34.32 KB | 0755 |
|
| mkfs.ext2 | File | 130.62 KB | 0755 |
|
| mkfs.ext3 | File | 130.62 KB | 0755 |
|
| mkfs.ext4 | File | 130.62 KB | 0755 |
|
| mkfs.fat | File | 50.83 KB | 0755 |
|
| mkfs.minix | File | 42.39 KB | 0755 |
|
| mkfs.msdos | File | 50.83 KB | 0755 |
|
| mkfs.ntfs | File | 66.38 KB | 0755 |
|
| mkfs.vfat | File | 50.83 KB | 0755 |
|
| mkfs.xfs | File | 438.99 KB | 0755 |
|
| mkhomedir_helper | File | 22.34 KB | 0755 |
|
| mkinitramfs | File | 15.39 KB | 0755 |
|
| mklost+found | File | 14.3 KB | 0755 |
|
| mkntfs | File | 66.38 KB | 0755 |
|
| mkswap | File | 50.38 KB | 0755 |
|
| modinfo | File | 170.24 KB | 0755 |
|
| modprobe | File | 170.24 KB | 0755 |
|
| mount.fuse | File | 18.3 KB | 0755 |
|
| mount.fuse3 | File | 18.3 KB | 0755 |
|
| mount.lowntfs-3g | File | 118.98 KB | 0755 |
|
| mount.ntfs | File | 159.01 KB | 0755 |
|
| mount.ntfs-3g | File | 159.01 KB | 0755 |
|
| mountsnoop-bpfcc | File | 14.62 KB | 0755 |
|
| mpathpersist | File | 31.21 KB | 0755 |
|
| multipath | File | 34.3 KB | 0755 |
|
| multipathc | File | 18.3 KB | 0755 |
|
| multipathd | File | 142.46 KB | 0755 |
|
| mysqld | File | 26.09 MB | 0755 |
|
| mysqld_qslower-bpfcc | File | 3.05 KB | 0755 |
|
| named | File | 574.16 KB | 0755 |
|
| naptime.bt | File | 1.01 KB | 0755 |
|
| needrestart | File | 40.13 KB | 0755 |
|
| netfilter-persistent | File | 1.04 KB | 0755 |
|
| netplan | File | 802 B | 0755 |
|
| netqtop-bpfcc | File | 5.59 KB | 0755 |
|
| newusers | File | 86.96 KB | 0755 |
|
| nfnl_osf | File | 18.3 KB | 0755 |
|
| nfsdist-bpfcc | File | 4.95 KB | 0755 |
|
| nfsslower-bpfcc | File | 13.61 KB | 0755 |
|
| nft | File | 26.23 KB | 0755 |
|
| nodegc-bpfcc | File | 52 B | 0755 |
|
| nodestat-bpfcc | File | 54 B | 0755 |
|
| nologin | File | 14.3 KB | 0755 |
|
| ntfsclone | File | 50.38 KB | 0755 |
|
| ntfscp | File | 30.38 KB | 0755 |
|
| ntfslabel | File | 22.38 KB | 0755 |
|
| ntfsresize | File | 62.39 KB | 0755 |
|
| ntfsundelete | File | 50.38 KB | 0755 |
|
| offcputime-bpfcc | File | 13.46 KB | 0755 |
|
| offwaketime-bpfcc | File | 15.31 KB | 0755 |
|
| on_ac_power | File | 3.7 KB | 0755 |
|
| oomkill-bpfcc | File | 2.04 KB | 0755 |
|
| oomkill.bt | File | 1.17 KB | 0755 |
|
| opensnoop-bpfcc | File | 14.24 KB | 0755 |
|
| opensnoop.bt | File | 953 B | 0755 |
|
| overlayroot-chroot | File | 2.45 KB | 0755 |
|
| ownership | File | 14.45 KB | 0755 |
|
| pam-auth-update | File | 20.96 KB | 0755 |
|
| pam_extrausers_chkpwd | File | 26.31 KB | 2755 |
|
| pam_extrausers_update | File | 34.31 KB | 0755 |
|
| pam_getenv | File | 2.82 KB | 0755 |
|
| pam_namespace_helper | File | 467 B | 0755 |
|
| pam_timestamp_check | File | 14.31 KB | 0755 |
|
| paperconfig | File | 4.07 KB | 0755 |
|
| parted | File | 94.4 KB | 0755 |
|
| partprobe | File | 14.38 KB | 0755 |
|
| pdata_tools | File | 1.36 MB | 0755 |
|
| perlcalls-bpfcc | File | 55 B | 0755 |
|
| perlflow-bpfcc | File | 54 B | 0755 |
|
| perlstat-bpfcc | File | 54 B | 0755 |
|
| phpcalls-bpfcc | File | 54 B | 0755 |
|
| phpdismod | File | 7.11 KB | 0755 |
|
| phpenmod | File | 7.11 KB | 0755 |
|
| phpflow-bpfcc | File | 53 B | 0755 |
|
| phpquery | File | 6.24 KB | 0755 |
|
| phpstat-bpfcc | File | 53 B | 0755 |
|
| pidpersec-bpfcc | File | 1.08 KB | 0755 |
|
| pidpersec.bt | File | 628 B | 0755 |
|
| pivot_root | File | 14.38 KB | 0755 |
|
| plymouthd | File | 146.57 KB | 0755 |
|
| poweroff | File | 1.43 MB | 0755 |
|
| ppchcalls-bpfcc | File | 13.89 KB | 0755 |
|
| profile-bpfcc | File | 14.41 KB | 0755 |
|
| pvchange | File | 3.01 MB | 0755 |
|
| pvck | File | 3.01 MB | 0755 |
|
| pvcreate | File | 3.01 MB | 0755 |
|
| pvdisplay | File | 3.01 MB | 0755 |
|
| pvmove | File | 3.01 MB | 0755 |
|
| pvremove | File | 3.01 MB | 0755 |
|
| pvresize | File | 3.01 MB | 0755 |
|
| pvs | File | 3.01 MB | 0755 |
|
| pvscan | File | 3.01 MB | 0755 |
|
| pwck | File | 54.29 KB | 0755 |
|
| pwconv | File | 46.16 KB | 0755 |
|
| pwhistory_helper | File | 22.31 KB | 0755 |
|
| pwunconv | File | 46.16 KB | 0755 |
|
| pythoncalls-bpfcc | File | 57 B | 0755 |
|
| pythonflow-bpfcc | File | 56 B | 0755 |
|
| pythongc-bpfcc | File | 54 B | 0755 |
|
| pythonstat-bpfcc | File | 56 B | 0755 |
|
| rdmaucma-bpfcc | File | 4.95 KB | 0755 |
|
| readahead-bpfcc | File | 6.54 KB | 0755 |
|
| readprofile | File | 22.41 KB | 0755 |
|
| reboot | File | 1.43 MB | 0755 |
|
| remove-shell | File | 1.08 KB | 0755 |
|
| reset-trace-bpfcc | File | 3.42 KB | 0755 |
|
| resize2fs | File | 70.3 KB | 0755 |
|
| resolvconf | File | 158.67 KB | 0755 |
|
| rmmod | File | 170.24 KB | 0755 |
|
| rmt | File | 54.71 KB | 0755 |
|
| rmt-tar | File | 54.71 KB | 0755 |
|
| rndc | File | 42.3 KB | 0755 |
|
| rndc-confgen | File | 22.3 KB | 0755 |
|
| rsyslogd | File | 771.67 KB | 0755 |
|
| rtacct | File | 28.31 KB | 0755 |
|
| rtcwake | File | 34.38 KB | 0755 |
|
| rtmon | File | 116.52 KB | 0755 |
|
| rubycalls-bpfcc | File | 55 B | 0755 |
|
| rubyflow-bpfcc | File | 54 B | 0755 |
|
| rubygc-bpfcc | File | 52 B | 0755 |
|
| rubyobjnew-bpfcc | File | 56 B | 0755 |
|
| rubystat-bpfcc | File | 54 B | 0755 |
|
| runlevel | File | 1.43 MB | 0755 |
|
| runqlat-bpfcc | File | 9.3 KB | 0755 |
|
| runqlat.bt | File | 788 B | 0755 |
|
| runqlen-bpfcc | File | 8.05 KB | 0755 |
|
| runqlen.bt | File | 1.01 KB | 0755 |
|
| runqslower-bpfcc | File | 9.01 KB | 0755 |
|
| runuser | File | 54.38 KB | 0755 |
|
| service | File | 8.89 KB | 0755 |
|
| setcap | File | 14.3 KB | 0755 |
|
| setuids.bt | File | 1.76 KB | 0755 |
|
| setvesablank | File | 14.37 KB | 0755 |
|
| setvtrgb | File | 14.43 KB | 0755 |
|
| sfdisk | File | 106.38 KB | 0755 |
|
| sgdisk | File | 178.48 KB | 0755 |
|
| shadowconfig | File | 2.22 KB | 0755 |
|
| shmsnoop-bpfcc | File | 7.8 KB | 0755 |
|
| shutdown | File | 1.43 MB | 0755 |
|
| slabratetop-bpfcc | File | 6.38 KB | 0755 |
|
| sofdsnoop-bpfcc | File | 8.06 KB | 0755 |
|
| softirqs-bpfcc | File | 5.59 KB | 0755 |
|
| solisten-bpfcc | File | 5.96 KB | 0755 |
|
| split-logfile | File | 2.36 KB | 0755 |
|
| sshd | File | 899.82 KB | 0755 |
|
| ssllatency.bt | File | 2.08 KB | 0755 |
|
| sslsniff-bpfcc | File | 13.68 KB | 0755 |
|
| sslsnoop.bt | File | 1.99 KB | 0755 |
|
| stackcount-bpfcc | File | 16.26 KB | 0755 |
|
| start-stop-daemon | File | 47.49 KB | 0755 |
|
| statsnoop-bpfcc | File | 4.92 KB | 0755 |
|
| statsnoop.bt | File | 1.26 KB | 0755 |
|
| sudo_logsrvd | File | 248.5 KB | 0755 |
|
| sudo_sendlog | File | 131.67 KB | 0755 |
|
| sulogin | File | 42.38 KB | 0755 |
|
| swapin.bt | File | 600 B | 0755 |
|
| swaplabel | File | 18.38 KB | 0755 |
|
| swapoff | File | 22.38 KB | 0755 |
|
| swapon | File | 42.38 KB | 0755 |
|
| switch_root | File | 22.38 KB | 0755 |
|
| syncsnoop-bpfcc | File | 1.27 KB | 0755 |
|
| syncsnoop.bt | File | 839 B | 0755 |
|
| syscount-bpfcc | File | 8.57 KB | 0755 |
|
| syscount.bt | File | 872 B | 0755 |
|
| sysctl | File | 30.38 KB | 0755 |
|
| tarcat | File | 936 B | 0755 |
|
| tc | File | 630.08 KB | 0755 |
|
| tclcalls-bpfcc | File | 54 B | 0755 |
|
| tclflow-bpfcc | File | 53 B | 0755 |
|
| tclobjnew-bpfcc | File | 55 B | 0755 |
|
| tclstat-bpfcc | File | 53 B | 0755 |
|
| tcpaccept-bpfcc | File | 9 KB | 0755 |
|
| tcpaccept.bt | File | 1.71 KB | 0755 |
|
| tcpcong-bpfcc | File | 20.11 KB | 0755 |
|
| tcpconnect-bpfcc | File | 18.46 KB | 0755 |
|
| tcpconnect.bt | File | 1.58 KB | 0755 |
|
| tcpconnlat-bpfcc | File | 9.07 KB | 0755 |
|
| tcpdrop-bpfcc | File | 7.44 KB | 0755 |
|
| tcpdrop.bt | File | 2.41 KB | 0755 |
|
| tcplife-bpfcc | File | 16.55 KB | 0755 |
|
| tcplife.bt | File | 2.72 KB | 0755 |
|
| tcpretrans-bpfcc | File | 13.77 KB | 0755 |
|
| tcpretrans.bt | File | 2.07 KB | 0755 |
|
| tcprtt-bpfcc | File | 8.7 KB | 0755 |
|
| tcpstates-bpfcc | File | 13.73 KB | 0755 |
|
| tcpsubnet-bpfcc | File | 7.63 KB | 0755 |
|
| tcpsynbl-bpfcc | File | 2.12 KB | 0755 |
|
| tcpsynbl.bt | File | 962 B | 0755 |
|
| tcptop-bpfcc | File | 12.64 KB | 0755 |
|
| tcptracer-bpfcc | File | 17.71 KB | 0755 |
|
| telinit | File | 1.43 MB | 0755 |
|
| thermald | File | 526.73 KB | 0755 |
|
| thin_check | File | 1.36 MB | 0755 |
|
| thin_delta | File | 1.36 MB | 0755 |
|
| thin_dump | File | 1.36 MB | 0755 |
|
| thin_ls | File | 1.36 MB | 0755 |
|
| thin_metadata_size | File | 1.36 MB | 0755 |
|
| thin_repair | File | 1.36 MB | 0755 |
|
| thin_restore | File | 1.36 MB | 0755 |
|
| thin_rmap | File | 1.36 MB | 0755 |
|
| thin_trim | File | 1.36 MB | 0755 |
|
| threadsnoop-bpfcc | File | 1.81 KB | 0755 |
|
| threadsnoop.bt | File | 712 B | 0755 |
|
| tipc | File | 90.52 KB | 0755 |
|
| tplist-bpfcc | File | 4.06 KB | 0755 |
|
| trace-bpfcc | File | 42.86 KB | 0755 |
|
| tsig-keygen | File | 22.3 KB | 0755 |
|
| ttysnoop-bpfcc | File | 7.51 KB | 0755 |
|
| tune2fs | File | 110.56 KB | 0755 |
|
| u-d-c-print-pci-ids | File | 517 B | 0755 |
|
| ucalls | File | 11.69 KB | 0755 |
|
| uflow | File | 7.92 KB | 0755 |
|
| ugc | File | 7.64 KB | 0755 |
|
| umount.udisks2 | File | 14.3 KB | 0755 |
|
| undump.bt | File | 789 B | 0755 |
|
| unix_chkpwd | File | 30.31 KB | 2755 |
|
| unix_update | File | 34.31 KB | 0755 |
|
| uobjnew | File | 6.04 KB | 0755 |
|
| update-ca-certificates | File | 5.32 KB | 0755 |
|
| update-catalog | File | 9.17 KB | 0755 |
|
| update-fonts-alias | File | 5.71 KB | 0755 |
|
| update-fonts-dir | File | 3.98 KB | 0755 |
|
| update-fonts-scale | File | 6.1 KB | 0755 |
|
| update-grub | File | 64 B | 0755 |
|
| update-grub-gfxpayload | File | 301 B | 0755 |
|
| update-grub2 | File | 64 B | 0755 |
|
| update-gsfontmap | File | 390 B | 0755 |
|
| update-ieee-data | File | 3.41 KB | 0755 |
|
| update-info-dir | File | 1.66 KB | 0755 |
|
| update-initramfs | File | 6.75 KB | 0755 |
|
| update-locale | File | 2.99 KB | 0755 |
|
| update-passwd | File | 34.56 KB | 0755 |
|
| update-pciids | File | 1.74 KB | 0755 |
|
| update-rc.d | File | 17.72 KB | 0755 |
|
| update-shells | File | 3.89 KB | 0755 |
|
| update-xmlcatalog | File | 16.88 KB | 0755 |
|
| upgrade-from-grub-legacy | File | 1.56 KB | 0755 |
|
| usb_modeswitch | File | 59.66 KB | 0755 |
|
| usb_modeswitch_dispatcher | File | 26.78 KB | 0755 |
|
| usbmuxd | File | 90.6 KB | 0755 |
|
| useradd | File | 139.88 KB | 0755 |
|
| userdel | File | 91.01 KB | 0755 |
|
| usermod | File | 127.65 KB | 0755 |
|
| ustat | File | 12.12 KB | 0755 |
|
| uthreads | File | 4 KB | 0755 |
|
| uuidd | File | 30.88 KB | 0755 |
|
| validlocale | File | 1.73 KB | 0755 |
|
| vcstime | File | 14.3 KB | 0755 |
|
| vdpa | File | 34.56 KB | 0755 |
|
| veritysetup | File | 43.94 KB | 0755 |
|
| vfscount-bpfcc | File | 1.36 KB | 0755 |
|
| vfscount.bt | File | 515 B | 0755 |
|
| vfsstat-bpfcc | File | 4.06 KB | 0755 |
|
| vfsstat.bt | File | 721 B | 0755 |
|
| vgcfgbackup | File | 3.01 MB | 0755 |
|
| vgcfgrestore | File | 3.01 MB | 0755 |
|
| vgchange | File | 3.01 MB | 0755 |
|
| vgck | File | 3.01 MB | 0755 |
|
| vgconvert | File | 3.01 MB | 0755 |
|
| vgcreate | File | 3.01 MB | 0755 |
|
| vgdisplay | File | 3.01 MB | 0755 |
|
| vgexport | File | 3.01 MB | 0755 |
|
| vgextend | File | 3.01 MB | 0755 |
|
| vgimport | File | 3.01 MB | 0755 |
|
| vgimportclone | File | 3.01 MB | 0755 |
|
| vgmerge | File | 3.01 MB | 0755 |
|
| vgmknodes | File | 3.01 MB | 0755 |
|
| vgreduce | File | 3.01 MB | 0755 |
|
| vgremove | File | 3.01 MB | 0755 |
|
| vgrename | File | 3.01 MB | 0755 |
|
| vgs | File | 3.01 MB | 0755 |
|
| vgscan | File | 3.01 MB | 0755 |
|
| vgsplit | File | 3.01 MB | 0755 |
|
| vigr | File | 60.69 KB | 0755 |
|
| vipw | File | 60.69 KB | 0755 |
|
| virtiostat-bpfcc | File | 8.69 KB | 0755 |
|
| visudo | File | 252.71 KB | 0755 |
|
| vpddecode | File | 14.58 KB | 0755 |
|
| wakeuptime-bpfcc | File | 8.1 KB | 0755 |
|
| wipefs | File | 38.38 KB | 0755 |
|
| writeback.bt | File | 1.66 KB | 0755 |
|
| xfs_admin | File | 2.12 KB | 0755 |
|
| xfs_bmap | File | 695 B | 0755 |
|
| xfs_copy | File | 90.44 KB | 0755 |
|
| xfs_db | File | 688.56 KB | 0755 |
|
| xfs_estimate | File | 14.16 KB | 0755 |
|
| xfs_freeze | File | 800 B | 0755 |
|
| xfs_fsr | File | 42.18 KB | 0755 |
|
| xfs_growfs | File | 38.23 KB | 0755 |
|
| xfs_info | File | 1.26 KB | 0755 |
|
| xfs_io | File | 203.65 KB | 0755 |
|
| xfs_logprint | File | 78.27 KB | 0755 |
|
| xfs_mdrestore | File | 34.23 KB | 0755 |
|
| xfs_metadump | File | 816 B | 0755 |
|
| xfs_mkfile | File | 1.02 KB | 0755 |
|
| xfs_ncheck | File | 685 B | 0755 |
|
| xfs_quota | File | 90.16 KB | 0755 |
|
| xfs_repair | File | 643.32 KB | 0755 |
|
| xfs_rtcp | File | 18.15 KB | 0755 |
|
| xfs_scrub | File | 106.27 KB | 0755 |
|
| xfs_scrub_all | File | 7.66 KB | 0755 |
|
| xfs_spaceman | File | 42.3 KB | 0755 |
|
| xfsdist-bpfcc | File | 4.61 KB | 0755 |
|
| xfsdist.bt | File | 972 B | 0755 |
|
| xfsslower-bpfcc | File | 7.78 KB | 0755 |
|
| xtables-legacy-multi | File | 92.95 KB | 0755 |
|
| xtables-monitor | File | 219.16 KB | 0755 |
|
| xtables-nft-multi | File | 219.16 KB | 0755 |
|
| zerofree | File | 14.15 KB | 0755 |
|
| zfsdist-bpfcc | File | 5.3 KB | 0755 |
|
| zfsslower-bpfcc | File | 8.45 KB | 0755 |
|
| zic | File | 66.39 KB | 0755 |
|
| zramctl | File | 54.52 KB | 0755 |
|