blob: 8512b198c78b85718d2d4bd8f71eff3f53042f56 [file] [log] [blame]
Darin Petkov2a0614e2012-10-22 15:28:41 +02001#!/bin/bash
2#
3# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6#
7# Script that turns on useful logging for modem managers.
8
9
10MM_LEVEL_LIST="err warn info debug"
11
12usage() {
13 echo "
14Usage: mm_debug <level>|--reset|--help|--list_valid_levels
15
16 mm_debug sets the log level of all running modem managers.
17
18 <level> : The log level of modem managers to set to. Valid log levels
19 can be viewed by using the --list_valid_levels option.
20
21 e.g. mm_debug err
22 Sets the log level of all running modem managers to 'err'.
23
24 --reset : Resets the log level of all running modem managers to 'info'.
25
26 --help : Displays this output.
27
28 --list_valid_levels: Displays all valid log levels.
29"
30}
31
32dbus_call() {
33 local dest=$1
34 local object_path=$2
35 local method=$3
36 shift 3
37 dbus-send --print-reply --fixed --system --dest=$dest \
38 "$object_path" "$method" "$@"
39}
40
41# Lists all valid log levels.
42list_valid_levels() {
43 echo "Valid levels are: ${MM_LEVEL_LIST// /, }"
44}
45
46# Returns whether or not $2 exists in $1 where $1 is a space-separated
47# list of log levels.
48is_valid_level() {
49 expr match " $1 " ".* $2 .*"> /dev/null
50}
51
52# Returns all modem managers that are currently running.
53get_all_modem_managers() {
54 dbus_call org.freedesktop.DBus /org/freedesktop/DBus \
55 org.freedesktop.DBus.ListNames | awk '/ModemManager/ { print $2 }'
56}
57
58# Sets the log level of the specified modem manager.
59set_modem_manager_logging() {
60 local manager=$1
61 local level=$2
62 local object_path=
63 local method=
64
65 case "$manager" in
66 org.chromium.ModemManager)
67 object_path=/org/chromium/ModemManager
68 method=org.freedesktop.ModemManager.SetLogging
69 if [[ "$level" == "err" ]]; then
70 level=error
71 fi
72 ;;
73 org.freedesktop.ModemManager)
74 object_path=/org/freedesktop/ModemManager
75 method=org.freedesktop.ModemManager.SetLogging
76 ;;
77 org.freedesktop.ModemManager1)
78 object_path=/org/freedesktop/ModemManager1
79 method=org.freedesktop.ModemManager1.SetLogging
80 ;;
81 *)
82 return 1
83 ;;
84 esac
85
86 dbus_call "$manager" "$object_path" "$method" "string:$level"
87}
88
89# Sets the log level of all modem managers that are currently running.
90set_all_modem_managers_logging() {
91 local level=$1
92
93 if ! is_valid_level "$MM_LEVEL_LIST" "$level"; then
94 echo "ERROR: '$level' is not a valid level."
95 list_valid_levels
96 return 1
97 fi
98
99 for manager in $(get_all_modem_managers); do
100 set_modem_manager_logging "$manager" "$level"
101 done
102}
103
104
105if [ $# -ne 1 ]; then
106 usage
107 exit 1
108fi
109
110case "$1" in
111 --reset)
112 set_all_modem_managers_logging "info"
113 ;;
114 --list_valid_levels)
115 list_valid_levels
116 ;;
117 --help|--*)
118 usage
119 ;;
120 *)
121 set_all_modem_managers_logging "$1"
122 ;;
123esac