#!/usr/bin/env python3
# Copyright 2019 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from __future__ import print_function

import sys

import dbus
import flimflam

if len(sys.argv) < 2:
    print('Usage: %s <address>' % (sys.argv[0]))
    sys.exit(1)

(_, address) = sys.argv

flim = flimflam.FlimFlam(dbus.SystemBus())

for device in flim.GetObjectList('Device'):
    device_properties = device.GetProperties()

    for path in device_properties['IPConfigs']:
        ipconfig = flim.GetObjectInterface('IPConfig', path)
        ipconfig_properties = ipconfig.GetProperties()

        if ipconfig_properties['Method'] not in ['ipv4', 'ipv6']:
            print('Skip %s; method %s' % (ipconfig.object_path,
                                          ipconfig_properties['Method']))
            continue

        ipconfig.SetProperty('Address', address)
