blob: 8512b198c78b85718d2d4bd8f71eff3f53042f56 [file] [log] [blame]
#!/bin/bash
#
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Script that turns on useful logging for modem managers.
MM_LEVEL_LIST="err warn info debug"
usage() {
echo "
Usage: mm_debug <level>|--reset|--help|--list_valid_levels
mm_debug sets the log level of all running modem managers.
<level> : The log level of modem managers to set to. Valid log levels
can be viewed by using the --list_valid_levels option.
e.g. mm_debug err
Sets the log level of all running modem managers to 'err'.
--reset : Resets the log level of all running modem managers to 'info'.
--help : Displays this output.
--list_valid_levels: Displays all valid log levels.
"
}
dbus_call() {
local dest=$1
local object_path=$2
local method=$3
shift 3
dbus-send --print-reply --fixed --system --dest=$dest \
"$object_path" "$method" "$@"
}
# Lists all valid log levels.
list_valid_levels() {
echo "Valid levels are: ${MM_LEVEL_LIST// /, }"
}
# Returns whether or not $2 exists in $1 where $1 is a space-separated
# list of log levels.
is_valid_level() {
expr match " $1 " ".* $2 .*"> /dev/null
}
# Returns all modem managers that are currently running.
get_all_modem_managers() {
dbus_call org.freedesktop.DBus /org/freedesktop/DBus \
org.freedesktop.DBus.ListNames | awk '/ModemManager/ { print $2 }'
}
# Sets the log level of the specified modem manager.
set_modem_manager_logging() {
local manager=$1
local level=$2
local object_path=
local method=
case "$manager" in
org.chromium.ModemManager)
object_path=/org/chromium/ModemManager
method=org.freedesktop.ModemManager.SetLogging
if [[ "$level" == "err" ]]; then
level=error
fi
;;
org.freedesktop.ModemManager)
object_path=/org/freedesktop/ModemManager
method=org.freedesktop.ModemManager.SetLogging
;;
org.freedesktop.ModemManager1)
object_path=/org/freedesktop/ModemManager1
method=org.freedesktop.ModemManager1.SetLogging
;;
*)
return 1
;;
esac
dbus_call "$manager" "$object_path" "$method" "string:$level"
}
# Sets the log level of all modem managers that are currently running.
set_all_modem_managers_logging() {
local level=$1
if ! is_valid_level "$MM_LEVEL_LIST" "$level"; then
echo "ERROR: '$level' is not a valid level."
list_valid_levels
return 1
fi
for manager in $(get_all_modem_managers); do
set_modem_manager_logging "$manager" "$level"
done
}
if [ $# -ne 1 ]; then
usage
exit 1
fi
case "$1" in
--reset)
set_all_modem_managers_logging "info"
;;
--list_valid_levels)
list_valid_levels
;;
--help|--*)
usage
;;
*)
set_all_modem_managers_logging "$1"
;;
esac