def beacon(config):
    ret = []
    interfaces = []
    expanded_config = {}

    global LAST_STATS

    coalesce = False

    _stats = _copy_interfaces_info(IP.by_name)

    if not LAST_STATS:
        LAST_STATS = _stats

    if 'coalesce' in config and config['coalesce']:
        coalesce = True
        changes = {}

    # Get list of interfaces included in config that are registered in the
    # system, including interfaces defined by wildcards (eth*, wlan*)
    for item in config:
        if item == 'coalesce':
            continue
        if item in _stats:
            interfaces.append(item)
        else:
            # No direct match, try with * wildcard regexp
            interface_regexp = item.replace('*', '[0-9]+')
            for interface in _stats:
                match = re.search(interface_regexp, interface)
                if match:
                    interfaces.append(match.group())
                    expanded_config[match.group()] = config[item]

    if expanded_config:
        config.update(expanded_config)

    for interface in interfaces:
        _send_event = False
        _diff_stats = _stats[interface] - LAST_STATS[interface]
        _ret_diff = {}

        if _diff_stats:
            _diff_stats_dict = {}
            LAST_STATS[interface] = _stats[interface]

            for item in _diff_stats:
                _diff_stats_dict.update(item)
            for attr in config[interface]:
                if attr in _diff_stats_dict:
                    config_value = None
                    if config[interface][attr] and 'onvalue' in config[interface][attr]:
                        config_value = config[interface][attr]['onvalue']
                    new_value = ast.literal_eval(_diff_stats_dict[attr])
                    if not config_value or config_value == new_value:
                        _send_event = True
                        _ret_diff[attr] = new_value

            if _send_event:
                if coalesce:
                    changes[interface] = _ret_diff
                else:
                    ret.append({'tag': interface, 'interface': interface, 'change': _ret_diff})

    if coalesce and changes:
        grains_info = salt.loader.grains(__opts__, True)
        __grains__.update(grains_info)
        ret.append({'tag': 'result', 'changes': changes})

    return ret
Adds a message with the ``WARNING`` level.
dataset/ETHPy150Open saltstack/salt/salt/beacons/network_settings.py/beacon--crossover with--dataset/ETHPy150Open CiscoSystems/avos/horizon/messages.py/warning