blob: 124dd183f34403684451ea8937bd0765ba9bad3b [file] [log] [blame]
#!/usr/bin/python2
# Copyright (c) 2013 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.
import pprint
import sys
import common
from autotest_lib.client.cros.networking import shill_proxy
def usage():
""" Prints a script usage message. """
cmd = sys.argv[0]
print 'Usage: %s <command> [more parameters]' % cmd
print 'Example uses:'
print cmd, 'create <name> - Create a profile called |name|.'
print cmd, 'push <name> - Push a previously created profile called |name|.'
print cmd, 'pop <name> - Pop a profile called |name|.'
print cmd, 'pop - Pop the top-most profile.'
print cmd, 'remove <name> - Remove a profile called |name| from disk.'
print cmd, 'clean - Pop and remove profiles above the default profile.'
print cmd, 'list - List profiles and their properties.'
print cmd, 'list-entries - List profile entries.'
print cmd, 'delete-entry <entry> [name] - Delete an entry from a ' \
'profile called |name| or all profiles if no name is given.'
return False
def print_profile_path(profile_path, active_path):
""" Print profile_path and indicate if it is the active profile. """
if profile_path == active_path:
print 'Profile: %s <== active' % profile_path
else:
print 'Profile: %s' % profile_path
def clean_profiles():
""" Pop and remove all profiles until 'default' is found. """
shill = shill_proxy.ShillProxy()
while True:
active_profile = shill.get_active_profile()
properties = active_profile.GetProperties(utf8_strings=True)
active_name = shill.dbus2primitive(
properties[shill.PROFILE_PROPERTY_NAME])
if active_name == 'default':
return True
else:
print 'Removing profile: %s' % active_name
shill.manager.PopProfile(active_name)
shill.manager.RemoveProfile(active_name)
def delete_entry():
"""
Remove an entry from the specified profile, or all profiles if no profile
is given.
"""
if len(sys.argv) <= 2:
return usage()
identifier = sys.argv[2]
profile_path = None
if len(sys.argv) > 3:
profile_path = sys.argv[3]
shill = shill_proxy.ShillProxy()
properties = shill.dbus2primitive(
shill.manager.GetProperties(utf8_strings=True))
active_profile = shill.get_active_profile()
for path in properties[shill.MANAGER_PROPERTY_PROFILES]:
print_profile_path(path, active_profile.object_path)
if profile_path and path != profile_path:
continue
profile = shill.get_dbus_object(shill.DBUS_TYPE_PROFILE, path)
try:
profile.DeleteEntry(identifier)
print " -> delete succeeded"
except:
print " -> delete failed"
def list_entries():
""" Display detailed profile entry information. """
shill = shill_proxy.ShillProxy()
active_profile = shill.get_active_profile()
for profile in shill.get_profiles():
print_profile_path(profile.object_path, active_profile.object_path)
properties = shill.dbus2primitive(
profile.GetProperties(utf8_strings=True))
if not shill.PROFILE_PROPERTY_ENTRIES in properties:
continue
for ident in properties[shill.PROFILE_PROPERTY_ENTRIES]:
print 'Entry: %s' % ident
pprint.pprint(shill.dbus2primitive(profile.GetEntry(ident)),
indent=2)
print
return True
def list_profiles():
""" List shill profiles and their properties. """
shill = shill_proxy.ShillProxy()
active_profile = shill.get_active_profile()
for profile in shill.get_profiles():
print_profile_path(profile.object_path, active_profile.object_path)
properties = shill.dbus2primitive(
profile.GetProperties(utf8_strings=True))
pprint.pprint(properties, indent=2)
print
return True
def main():
""" Main entry point for the profile script. """
if len(sys.argv) < 2:
return usage()
command = sys.argv[1]
shill = shill_proxy.ShillProxy()
if command == 'clean':
return clean_profiles()
if command == 'delete-entry':
return delete_entry()
if command == 'list':
return list_profiles()
if command == 'list-entries':
return list_entries()
if command == 'pop' and len(sys.argv) == 2:
shill.manager.PopAnyProfile()
print 'Popped profile.'
return True
# All the remaining operations require a profile name.
if len(sys.argv) < 3:
return usage()
name = sys.argv[2]
if command == 'pop':
shill.manager.PopProfile(name)
print 'Popped profile %s.' % name
return True
if command == 'create':
path = shill.manager.CreateProfile(name)
print 'New profile created at %s.' % path
return True
if command == 'push':
path = shill.manager.PushProfile(name)
print 'Pushed profile %s.' % path
return True
if command == 'remove':
shill.manager.RemoveProfile(name)
print 'Removed profile %s.' % name
return True
return usage()
if __name__ == '__main__':
if not main():
sys.exit(1)