| #!/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 |