Beispiel #1
0
tb_bool_t tb_ifaddrs_hwaddr(tb_ifaddrs_ref_t ifaddrs, tb_char_t const* name, tb_bool_t reload, tb_hwaddr_ref_t hwaddr)
{
    // check
    tb_assert_and_check_return_val(ifaddrs && hwaddr, tb_false);

    // clear it first
    tb_hwaddr_clear(hwaddr);

    // the iterator
    tb_iterator_ref_t iterator = tb_ifaddrs_itor(ifaddrs, reload);
    tb_assert_and_check_return_val(iterator, tb_false);

    // reload it if the cached interfaces is empty
    if (!reload && !tb_iterator_size(iterator)) iterator = tb_ifaddrs_itor(ifaddrs, tb_true);

    // done
    tb_bool_t ok = tb_false;
    tb_for_all_if (tb_ifaddrs_interface_ref_t, interface, iterator, interface)
    {
        // get hwaddr from the given interface name?
        if (name)
        {
            // is this?
            if (    (interface->flags & TB_IFADDRS_INTERFACE_FLAG_HAVE_HWADDR)
                &&  (interface->name && !tb_strcmp(interface->name, name)))
            {
                // save hwaddr
                tb_hwaddr_copy(hwaddr, &interface->hwaddr);

                // ok
                ok = tb_true;
                break;
            }
        }
        else
        {
            // is this?
            if (    (interface->flags & TB_IFADDRS_INTERFACE_FLAG_HAVE_HWADDR)
                &&  (interface->flags & TB_IFADDRS_INTERFACE_FLAG_HAVE_IPADDR)
                &&  !(interface->flags & TB_IFADDRS_INTERFACE_FLAG_IS_LOOPBACK))
            {
                // save hwaddr
                tb_hwaddr_copy(hwaddr, &interface->hwaddr);

                // ok
                ok = tb_true;
                break;
            }
        }
    }

    // ok?
    return ok;
}
Beispiel #2
0
/* //////////////////////////////////////////////////////////////////////////////////////
 * main
 */ 
tb_int_t tb_demo_network_hwaddr_main(tb_int_t argc, tb_char_t** argv)
{
    // done
    tb_hwaddr_t addr;
    tb_hwaddr_clear(&addr);
    if (tb_hwaddr_cstr_set(&addr, argv[1]))
    {
        // trace
        tb_trace_i("%s => %{hwaddr}", argv[1], &addr);
    }
    return 0;
}