/** * connman_rtnl_add_newlink_watch: * @index: network device index * @callback: callback function * @user_data: callback data; * * Add a new RTNL watch for newlink events * * Returns: %0 on failure and a unique id on success */ unsigned int connman_rtnl_add_newlink_watch(int index, connman_rtnl_link_cb_t callback, void *user_data) { struct watch_data *watch; watch = g_try_new0(struct watch_data, 1); if (!watch) return 0; watch->id = ++watch_id; watch->index = index; watch->newlink = callback; watch->user_data = user_data; watch_list = g_slist_prepend(watch_list, watch); DBG("id %d", watch->id); if (callback) { unsigned int flags = __connman_ipconfig_get_flags_from_index(index); if (flags > 0) callback(flags, 0, user_data); } return watch->id; }
static void trigger_rtnl(int index, void *user_data) { struct connman_rtnl *rtnl = user_data; if (rtnl->newlink) { unsigned short type = __connman_ipconfig_get_type_from_index(index); unsigned int flags = __connman_ipconfig_get_flags_from_index(index); rtnl->newlink(type, index, flags, 0); } if (rtnl->newgateway) { const char *gateway = __connman_ipconfig_get_gateway_from_index(index); if (gateway != NULL) rtnl->newgateway(index, gateway); } }