mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-02 12:20:12 +01:00
all: merge branch 'th/l3cfg-21'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/953
This commit is contained in:
commit
17dcef41bd
21 changed files with 277 additions and 171 deletions
|
|
@ -316,7 +316,12 @@ typedef struct _NMDevicePrivate {
|
|||
guint queued_ip_config_id_x[2];
|
||||
};
|
||||
|
||||
GSList *pending_actions;
|
||||
struct {
|
||||
const char **arr;
|
||||
guint len;
|
||||
guint alloc;
|
||||
} pending_actions;
|
||||
|
||||
GSList *dad6_failed_addrs;
|
||||
|
||||
NMDBusTrackObjPath parent_device;
|
||||
|
|
@ -8261,7 +8266,7 @@ activate_stage1_device_prepare(NMDevice *self)
|
|||
priv->master_ready_id =
|
||||
g_signal_connect(active,
|
||||
"notify::" NM_ACTIVE_CONNECTION_INT_MASTER_READY,
|
||||
(GCallback) master_ready_cb,
|
||||
G_CALLBACK(master_ready_cb),
|
||||
self);
|
||||
}
|
||||
return;
|
||||
|
|
@ -9293,7 +9298,7 @@ dhcp4_lease_change(NMDevice *self, NMIP4Config *config, gboolean bound)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP4_CHANGE, self, NULL, NULL, NULL, NULL);
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP_CHANGE_4, self, NULL, NULL, NULL, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -9807,7 +9812,7 @@ dhcp6_lease_change(NMDevice *self)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP6_CHANGE, self, NULL, NULL, NULL, NULL);
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP_CHANGE_6, self, NULL, NULL, NULL, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -9965,7 +9970,7 @@ dhcp6_state_changed(NMDhcpClient *client,
|
|||
}
|
||||
|
||||
static void
|
||||
dhcp6_prefix_delegated(NMDhcpClient *client, NMPlatformIP6Address *prefix, gpointer user_data)
|
||||
dhcp6_prefix_delegated(NMDhcpClient *client, const NMPlatformIP6Address *prefix, gpointer user_data)
|
||||
{
|
||||
NMDevice *self = NM_DEVICE(user_data);
|
||||
|
||||
|
|
@ -11987,7 +11992,7 @@ activate_stage5_ip_config_result_x(NMDevice *self, int addr_family)
|
|||
/* If IPv6 wasn't the first IP to complete, and DHCP was used,
|
||||
* then ensure dispatcher scripts get the DHCP lease information.
|
||||
*/
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP6_CHANGE,
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP_CHANGE_6,
|
||||
self,
|
||||
NULL,
|
||||
NULL,
|
||||
|
|
@ -12053,7 +12058,7 @@ activate_stage5_ip_config_result_x(NMDevice *self, int addr_family)
|
|||
*/
|
||||
if (priv->dhcp_data_4.client && nm_device_activate_ip4_state_in_conf(self)
|
||||
&& (nm_device_get_state(self) > NM_DEVICE_STATE_IP_CONFIG)) {
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP4_CHANGE,
|
||||
nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP_CHANGE_4,
|
||||
self,
|
||||
NULL,
|
||||
NULL,
|
||||
|
|
@ -14951,7 +14956,7 @@ _set_unmanaged_flags(NMDevice * self,
|
|||
priv->queued_ip_config_id_4 = g_idle_add(queued_ip4_config_change, self);
|
||||
priv->queued_ip_config_id_6 = g_idle_add(queued_ip6_config_change, self);
|
||||
|
||||
if (!priv->pending_actions) {
|
||||
if (priv->pending_actions.len == 0) {
|
||||
do_notify_has_pending_actions = TRUE;
|
||||
had_pending_actions = nm_device_has_pending_action(self);
|
||||
}
|
||||
|
|
@ -15745,37 +15750,39 @@ gboolean
|
|||
nm_device_add_pending_action(NMDevice *self, const char *action, gboolean assert_not_yet_pending)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
|
||||
GSList * iter;
|
||||
guint count = 0;
|
||||
gssize idx;
|
||||
|
||||
g_return_val_if_fail(action, FALSE);
|
||||
|
||||
/* Check if the action is already pending. Cannot add duplicate actions */
|
||||
for (iter = priv->pending_actions; iter; iter = iter->next) {
|
||||
if (nm_streq(action, iter->data)) {
|
||||
if (assert_not_yet_pending) {
|
||||
_LOGW(LOGD_DEVICE,
|
||||
"add_pending_action (%d): '%s' already pending",
|
||||
count + g_slist_length(iter),
|
||||
action);
|
||||
g_return_val_if_reached(FALSE);
|
||||
} else {
|
||||
_LOGT(LOGD_DEVICE,
|
||||
"add_pending_action (%d): '%s' already pending (expected)",
|
||||
count + g_slist_length(iter),
|
||||
action);
|
||||
}
|
||||
return FALSE;
|
||||
idx = nm_strv_find_binary_search(priv->pending_actions.arr, priv->pending_actions.len, action);
|
||||
if (idx >= 0) {
|
||||
if (assert_not_yet_pending) {
|
||||
_LOGW(LOGD_DEVICE,
|
||||
"add_pending_action (%u): '%s' already pending",
|
||||
priv->pending_actions.len,
|
||||
action);
|
||||
g_return_val_if_reached(FALSE);
|
||||
} else {
|
||||
_LOGT(LOGD_DEVICE,
|
||||
"add_pending_action (%u): '%s' already pending (expected)",
|
||||
priv->pending_actions.len,
|
||||
action);
|
||||
}
|
||||
count++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
priv->pending_actions = g_slist_prepend(priv->pending_actions, (char *) action);
|
||||
count++;
|
||||
if (priv->pending_actions.len == priv->pending_actions.alloc) {
|
||||
nm_assert(priv->pending_actions.alloc < G_MAXUINT / 2u);
|
||||
priv->pending_actions.alloc = NM_MAX(priv->pending_actions.alloc * 2u, 4u);
|
||||
priv->pending_actions.arr =
|
||||
g_renew(const char *, priv->pending_actions.arr, priv->pending_actions.alloc);
|
||||
}
|
||||
nm_arr_insert_at(priv->pending_actions.arr, priv->pending_actions.len, ~idx, action);
|
||||
priv->pending_actions.len++;
|
||||
|
||||
_LOGD(LOGD_DEVICE, "add_pending_action (%d): '%s'", count, action);
|
||||
_LOGD(LOGD_DEVICE, "add_pending_action (%u): '%s'", priv->pending_actions.len, action);
|
||||
|
||||
if (count == 1)
|
||||
if (priv->pending_actions.len == 1)
|
||||
_notify(self, PROP_HAS_PENDING_ACTION);
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -15797,37 +15804,38 @@ gboolean
|
|||
nm_device_remove_pending_action(NMDevice *self, const char *action, gboolean assert_is_pending)
|
||||
{
|
||||
NMDevicePrivate *priv;
|
||||
GSList * iter, *next;
|
||||
guint count = 0;
|
||||
gssize idx;
|
||||
|
||||
g_return_val_if_fail(self, FALSE);
|
||||
g_return_val_if_fail(action, FALSE);
|
||||
|
||||
priv = NM_DEVICE_GET_PRIVATE(self);
|
||||
|
||||
for (iter = priv->pending_actions; iter; iter = next) {
|
||||
next = iter->next;
|
||||
if (nm_streq(action, iter->data)) {
|
||||
_LOGD(LOGD_DEVICE,
|
||||
"remove_pending_action (%d): '%s'",
|
||||
count + g_slist_length(iter->next), /* length excluding 'iter' */
|
||||
action);
|
||||
priv->pending_actions = g_slist_delete_link(priv->pending_actions, iter);
|
||||
if (priv->pending_actions == NULL)
|
||||
_notify(self, PROP_HAS_PENDING_ACTION);
|
||||
return TRUE;
|
||||
}
|
||||
count++;
|
||||
idx = nm_strv_find_binary_search(priv->pending_actions.arr, priv->pending_actions.len, action);
|
||||
if (idx >= 0) {
|
||||
_LOGD(LOGD_DEVICE,
|
||||
"remove_pending_action (%u): '%s'",
|
||||
priv->pending_actions.len - 1u,
|
||||
action);
|
||||
nm_arr_remove_at(priv->pending_actions.arr, priv->pending_actions.len, idx);
|
||||
priv->pending_actions.len--;
|
||||
if (priv->pending_actions.len == 0)
|
||||
_notify(self, PROP_HAS_PENDING_ACTION);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (assert_is_pending) {
|
||||
_LOGW(LOGD_DEVICE, "remove_pending_action (%d): '%s' not pending", count, action);
|
||||
g_return_val_if_reached(FALSE);
|
||||
} else
|
||||
_LOGT(LOGD_DEVICE,
|
||||
"remove_pending_action (%d): '%s' not pending (expected)",
|
||||
count,
|
||||
_LOGW(LOGD_DEVICE,
|
||||
"remove_pending_action (%u): '%s' not pending",
|
||||
priv->pending_actions.len,
|
||||
action);
|
||||
g_return_val_if_reached(FALSE);
|
||||
} else {
|
||||
_LOGT(LOGD_DEVICE,
|
||||
"remove_pending_action (%u): '%s' not pending (expected)",
|
||||
priv->pending_actions.len,
|
||||
action);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -15837,15 +15845,15 @@ nm_device_has_pending_action_reason(NMDevice *self)
|
|||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
|
||||
|
||||
if (priv->pending_actions) {
|
||||
if (!priv->pending_actions->next && nm_device_get_state(self) == NM_DEVICE_STATE_ACTIVATED
|
||||
&& nm_streq(priv->pending_actions->data, NM_PENDING_ACTION_CARRIER_WAIT)) {
|
||||
if (priv->pending_actions.len > 0) {
|
||||
if (priv->pending_actions.len == 1 && nm_device_get_state(self) == NM_DEVICE_STATE_ACTIVATED
|
||||
&& nm_streq(priv->pending_actions.arr[0], NM_PENDING_ACTION_CARRIER_WAIT)) {
|
||||
/* if the device is already in activated state, and the only reason
|
||||
* why it appears still busy is "carrier-wait", then we are already complete. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return priv->pending_actions->data;
|
||||
return priv->pending_actions.arr[0];
|
||||
}
|
||||
|
||||
if (nm_device_is_real(self)
|
||||
|
|
@ -18574,7 +18582,7 @@ finalize(GObject *object)
|
|||
g_free(priv->hw_addr);
|
||||
g_free(priv->hw_addr_perm);
|
||||
g_free(priv->hw_addr_initial);
|
||||
g_slist_free(priv->pending_actions);
|
||||
g_free(priv->pending_actions.arr);
|
||||
g_slist_free_full(priv->dad6_failed_addrs, (GDestroyNotify) nmp_object_unref);
|
||||
nm_clear_g_free(&priv->physical_port_id);
|
||||
g_free(priv->udi);
|
||||
|
|
@ -19114,16 +19122,17 @@ nm_device_class_init(NMDeviceClass *klass)
|
|||
G_TYPE_OBJECT,
|
||||
G_TYPE_OBJECT);
|
||||
|
||||
signals[IP6_PREFIX_DELEGATED] = g_signal_new(NM_DEVICE_IP6_PREFIX_DELEGATED,
|
||||
G_OBJECT_CLASS_TYPE(object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
G_TYPE_POINTER);
|
||||
signals[IP6_PREFIX_DELEGATED] =
|
||||
g_signal_new(NM_DEVICE_IP6_PREFIX_DELEGATED,
|
||||
G_OBJECT_CLASS_TYPE(object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
G_TYPE_POINTER /* const NMPlatformIP6Address *prefix */);
|
||||
|
||||
signals[IP6_SUBNET_NEEDED] = g_signal_new(NM_DEVICE_IP6_SUBNET_NEEDED,
|
||||
G_OBJECT_CLASS_TYPE(object_class),
|
||||
|
|
|
|||
|
|
@ -352,8 +352,7 @@ NM_UTILS_LOOKUP_STR_DEFINE(nm_dhcp_state_to_string,
|
|||
NM_UTILS_LOOKUP_STR_ITEM(NM_DHCP_STATE_NOOP, "noop"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NM_DHCP_STATE_TERMINATED, "terminated"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NM_DHCP_STATE_TIMEOUT, "timeout"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NM_DHCP_STATE_UNKNOWN, "unknown"),
|
||||
NM_UTILS_LOOKUP_ITEM_IGNORE(__NM_DHCP_STATE_MAX), );
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NM_DHCP_STATE_UNKNOWN, "unknown"), );
|
||||
|
||||
static NMDhcpState
|
||||
reason_to_state(NMDhcpClient *self, const char *iface, const char *reason)
|
||||
|
|
@ -497,7 +496,12 @@ nm_dhcp_client_set_state(NMDhcpClient *self,
|
|||
}
|
||||
|
||||
priv->state = new_state;
|
||||
g_signal_emit(G_OBJECT(self), signals[SIGNAL_STATE_CHANGED], 0, new_state, ip_config, options);
|
||||
g_signal_emit(G_OBJECT(self),
|
||||
signals[SIGNAL_STATE_CHANGED],
|
||||
0,
|
||||
(guint) new_state,
|
||||
ip_config,
|
||||
options);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
@ -607,6 +611,20 @@ nm_dhcp_client_accept(NMDhcpClient *self, GError **error)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_dhcp_client_can_accept(NMDhcpClient *self)
|
||||
{
|
||||
gboolean can_accept;
|
||||
|
||||
g_return_val_if_fail(NM_IS_DHCP_CLIENT(self), FALSE);
|
||||
|
||||
can_accept = !!(NM_DHCP_CLIENT_GET_CLASS(self)->accept);
|
||||
|
||||
nm_assert(can_accept == (!!(NM_DHCP_CLIENT_GET_CLASS(self)->decline)));
|
||||
|
||||
return can_accept;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_dhcp_client_decline(NMDhcpClient *self, const char *error_message, GError **error)
|
||||
{
|
||||
|
|
@ -1382,14 +1400,15 @@ nm_dhcp_client_class_init(NMDhcpClientClass *client_class)
|
|||
G_TYPE_OBJECT,
|
||||
G_TYPE_HASH_TABLE);
|
||||
|
||||
signals[SIGNAL_PREFIX_DELEGATED] = g_signal_new(NM_DHCP_CLIENT_SIGNAL_PREFIX_DELEGATED,
|
||||
G_OBJECT_CLASS_TYPE(object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
G_TYPE_POINTER);
|
||||
signals[SIGNAL_PREFIX_DELEGATED] =
|
||||
g_signal_new(NM_DHCP_CLIENT_SIGNAL_PREFIX_DELEGATED,
|
||||
G_OBJECT_CLASS_TYPE(object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
G_TYPE_POINTER /* const NMPlatformIP6Address *prefix */);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,8 +57,6 @@ typedef enum {
|
|||
NM_DHCP_STATE_FAIL, /* failed for some reason */
|
||||
NM_DHCP_STATE_TERMINATED, /* client is no longer running */
|
||||
NM_DHCP_STATE_NOOP, /* state is a non operation for NetworkManager */
|
||||
__NM_DHCP_STATE_MAX,
|
||||
NM_DHCP_STATE_MAX = __NM_DHCP_STATE_MAX - 1,
|
||||
} NMDhcpState;
|
||||
|
||||
const char *nm_dhcp_state_to_string(NMDhcpState state);
|
||||
|
|
@ -173,6 +171,7 @@ gboolean nm_dhcp_client_start_ip6(NMDhcpClient * self,
|
|||
GError ** error);
|
||||
|
||||
gboolean nm_dhcp_client_accept(NMDhcpClient *self, GError **error);
|
||||
gboolean nm_dhcp_client_can_accept(NMDhcpClient *self);
|
||||
|
||||
gboolean nm_dhcp_client_decline(NMDhcpClient *self, const char *error_message, GError **error);
|
||||
|
||||
|
|
|
|||
|
|
@ -1219,7 +1219,7 @@ ip4_start(NMDhcpClient *client, const char *last_ip4_address, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
_LOGT("dhcp-client4: start %p", (gpointer) priv->client);
|
||||
_LOGT("dhcp-client4: start " NM_HASH_OBFUSCATE_PTR_FMT, NM_HASH_OBFUSCATE_PTR(priv->client));
|
||||
|
||||
nm_dhcp_client_start_timeout(client);
|
||||
return TRUE;
|
||||
|
|
@ -1233,7 +1233,7 @@ stop(NMDhcpClient *client, gboolean release)
|
|||
|
||||
NM_DHCP_CLIENT_CLASS(nm_dhcp_nettools_parent_class)->stop(client, release);
|
||||
|
||||
_LOGT("dhcp-client4: stop %p", (gpointer) priv->client);
|
||||
_LOGT("dhcp-client4: stop " NM_HASH_OBFUSCATE_PTR_FMT, NM_HASH_OBFUSCATE_PTR(priv->client));
|
||||
|
||||
priv->probe = n_dhcp4_client_probe_free(priv->probe);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -592,7 +592,7 @@ ip4_start(NMDhcpClient *client, const char *last_ip4_address, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
_LOGT("dhcp-client4: set %p", sd_client);
|
||||
_LOGT("dhcp-client4: set " NM_HASH_OBFUSCATE_PTR_FMT, NM_HASH_OBFUSCATE_PTR(sd_client));
|
||||
|
||||
r = sd_dhcp_client_attach_event(sd_client, NULL, 0);
|
||||
if (r < 0) {
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ _dns_config_ip_data_new(NMDnsConfigData * data,
|
|||
g_signal_connect(ip_config,
|
||||
NM_IS_IP4_CONFIG(ip_config) ? "notify::" NM_IP4_CONFIG_DNS_PRIORITY
|
||||
: "notify::" NM_IP6_CONFIG_DNS_PRIORITY,
|
||||
(GCallback) _ip_config_dns_priority_changed,
|
||||
G_CALLBACK(_ip_config_dns_priority_changed),
|
||||
ip_data);
|
||||
|
||||
_ASSERT_dns_config_ip_data(ip_data);
|
||||
|
|
|
|||
|
|
@ -208,12 +208,12 @@ _set_settings_connection(NMActiveConnection *self, NMSettingsConnection *sett_co
|
|||
if (sett_conn) {
|
||||
g_signal_connect(sett_conn,
|
||||
NM_SETTINGS_CONNECTION_UPDATED_INTERNAL,
|
||||
(GCallback) _settings_connection_updated,
|
||||
G_CALLBACK(_settings_connection_updated),
|
||||
self);
|
||||
if (nm_active_connection_get_activation_type(self) == NM_ACTIVATION_TYPE_EXTERNAL)
|
||||
g_signal_connect(sett_conn,
|
||||
NM_SETTINGS_CONNECTION_FLAGS_CHANGED,
|
||||
(GCallback) _settings_connection_flags_changed,
|
||||
G_CALLBACK(_settings_connection_flags_changed),
|
||||
self);
|
||||
}
|
||||
|
||||
|
|
@ -851,7 +851,7 @@ nm_active_connection_set_master(NMActiveConnection *self, NMActiveConnection *ma
|
|||
priv->master = g_object_ref(master);
|
||||
g_signal_connect(priv->master,
|
||||
"notify::" NM_ACTIVE_CONNECTION_STATE,
|
||||
(GCallback) master_state_cb,
|
||||
G_CALLBACK(master_state_cb),
|
||||
self);
|
||||
|
||||
check_master_ready(self);
|
||||
|
|
@ -883,7 +883,7 @@ _set_activation_type(NMActiveConnection *self, NMActivationType activation_type)
|
|||
if (activation_type == NM_ACTIVATION_TYPE_EXTERNAL)
|
||||
g_signal_connect(priv->settings_connection.obj,
|
||||
NM_SETTINGS_CONNECTION_FLAGS_CHANGED,
|
||||
(GCallback) _settings_connection_flags_changed,
|
||||
G_CALLBACK(_settings_connection_flags_changed),
|
||||
self);
|
||||
else
|
||||
g_signal_handlers_disconnect_by_func(priv->settings_connection.obj,
|
||||
|
|
@ -1018,7 +1018,7 @@ unwatch_parent(NMActiveConnection *self, gboolean unref)
|
|||
{
|
||||
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE(self);
|
||||
|
||||
g_signal_handlers_disconnect_by_func(priv->parent, (GCallback) parent_state_cb, self);
|
||||
g_signal_handlers_disconnect_by_func(priv->parent, G_CALLBACK(parent_state_cb), self);
|
||||
if (unref)
|
||||
g_object_weak_unref((GObject *) priv->parent, parent_destroyed, self);
|
||||
priv->parent = NULL;
|
||||
|
|
@ -1042,7 +1042,7 @@ nm_active_connection_set_parent(NMActiveConnection *self, NMActiveConnection *pa
|
|||
priv->parent = parent;
|
||||
g_signal_connect(priv->parent,
|
||||
"notify::" NM_ACTIVE_CONNECTION_STATE,
|
||||
(GCallback) parent_state_cb,
|
||||
G_CALLBACK(parent_state_cb),
|
||||
self);
|
||||
g_object_weak_ref((GObject *) priv->parent, parent_destroyed, self);
|
||||
}
|
||||
|
|
@ -1522,7 +1522,7 @@ dispose(GObject *object)
|
|||
_device_cleanup(self);
|
||||
|
||||
if (priv->master) {
|
||||
g_signal_handlers_disconnect_by_func(priv->master, (GCallback) master_state_cb, self);
|
||||
g_signal_handlers_disconnect_by_func(priv->master, G_CALLBACK(master_state_cb), self);
|
||||
}
|
||||
g_clear_object(&priv->master);
|
||||
|
||||
|
|
|
|||
|
|
@ -448,17 +448,17 @@ dispatcher_done_cb(GObject *source, GAsyncResult *result, gpointer user_data)
|
|||
dispatcher_call_id_free(call_id);
|
||||
}
|
||||
|
||||
static const char *action_table[] = {[NM_DISPATCHER_ACTION_HOSTNAME] = NMD_ACTION_HOSTNAME,
|
||||
[NM_DISPATCHER_ACTION_PRE_UP] = NMD_ACTION_PRE_UP,
|
||||
[NM_DISPATCHER_ACTION_UP] = NMD_ACTION_UP,
|
||||
[NM_DISPATCHER_ACTION_PRE_DOWN] = NMD_ACTION_PRE_DOWN,
|
||||
[NM_DISPATCHER_ACTION_DOWN] = NMD_ACTION_DOWN,
|
||||
[NM_DISPATCHER_ACTION_VPN_PRE_UP] = NMD_ACTION_VPN_PRE_UP,
|
||||
[NM_DISPATCHER_ACTION_VPN_UP] = NMD_ACTION_VPN_UP,
|
||||
[NM_DISPATCHER_ACTION_VPN_PRE_DOWN] = NMD_ACTION_VPN_PRE_DOWN,
|
||||
[NM_DISPATCHER_ACTION_VPN_DOWN] = NMD_ACTION_VPN_DOWN,
|
||||
[NM_DISPATCHER_ACTION_DHCP4_CHANGE] = NMD_ACTION_DHCP4_CHANGE,
|
||||
[NM_DISPATCHER_ACTION_DHCP6_CHANGE] = NMD_ACTION_DHCP6_CHANGE,
|
||||
static const char *action_table[] = {[NM_DISPATCHER_ACTION_HOSTNAME] = NMD_ACTION_HOSTNAME,
|
||||
[NM_DISPATCHER_ACTION_PRE_UP] = NMD_ACTION_PRE_UP,
|
||||
[NM_DISPATCHER_ACTION_UP] = NMD_ACTION_UP,
|
||||
[NM_DISPATCHER_ACTION_PRE_DOWN] = NMD_ACTION_PRE_DOWN,
|
||||
[NM_DISPATCHER_ACTION_DOWN] = NMD_ACTION_DOWN,
|
||||
[NM_DISPATCHER_ACTION_VPN_PRE_UP] = NMD_ACTION_VPN_PRE_UP,
|
||||
[NM_DISPATCHER_ACTION_VPN_UP] = NMD_ACTION_VPN_UP,
|
||||
[NM_DISPATCHER_ACTION_VPN_PRE_DOWN] = NMD_ACTION_VPN_PRE_DOWN,
|
||||
[NM_DISPATCHER_ACTION_VPN_DOWN] = NMD_ACTION_VPN_DOWN,
|
||||
[NM_DISPATCHER_ACTION_DHCP_CHANGE_4] = NMD_ACTION_DHCP4_CHANGE,
|
||||
[NM_DISPATCHER_ACTION_DHCP_CHANGE_6] = NMD_ACTION_DHCP6_CHANGE,
|
||||
[NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE] =
|
||||
NMD_ACTION_CONNECTIVITY_CHANGE};
|
||||
|
||||
|
|
|
|||
|
|
@ -19,11 +19,14 @@ typedef enum {
|
|||
NM_DISPATCHER_ACTION_VPN_UP,
|
||||
NM_DISPATCHER_ACTION_VPN_PRE_DOWN,
|
||||
NM_DISPATCHER_ACTION_VPN_DOWN,
|
||||
NM_DISPATCHER_ACTION_DHCP4_CHANGE,
|
||||
NM_DISPATCHER_ACTION_DHCP6_CHANGE,
|
||||
NM_DISPATCHER_ACTION_DHCP_CHANGE_4,
|
||||
NM_DISPATCHER_ACTION_DHCP_CHANGE_6,
|
||||
NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE
|
||||
} NMDispatcherAction;
|
||||
|
||||
#define NM_DISPATCHER_ACTION_DHCP_CHANGE_X(IS_IPv4) \
|
||||
((IS_IPv4) ? NM_DISPATCHER_ACTION_DHCP_CHANGE_4 : NM_DISPATCHER_ACTION_DHCP_CHANGE_6)
|
||||
|
||||
typedef struct NMDispatcherCallId NMDispatcherCallId;
|
||||
|
||||
typedef void (*NMDispatcherFunc)(NMDispatcherCallId *call_id, gpointer user_data);
|
||||
|
|
|
|||
|
|
@ -2885,9 +2885,15 @@ nm_l3cfg_remove_config(NML3Cfg *self, gconstpointer tag, const NML3ConfigData *i
|
|||
}
|
||||
|
||||
gboolean
|
||||
nm_l3cfg_remove_config_all(NML3Cfg *self, gconstpointer tag, gboolean only_dirty)
|
||||
nm_l3cfg_remove_config_all(NML3Cfg *self, gconstpointer tag)
|
||||
{
|
||||
return _l3cfg_remove_config(self, tag, only_dirty, NULL);
|
||||
return _l3cfg_remove_config(self, tag, FALSE, NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_l3cfg_remove_config_all_dirty(NML3Cfg *self, gconstpointer tag)
|
||||
{
|
||||
return _l3cfg_remove_config(self, tag, TRUE, NULL);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -295,7 +295,8 @@ gboolean nm_l3cfg_add_config(NML3Cfg * self,
|
|||
|
||||
gboolean nm_l3cfg_remove_config(NML3Cfg *self, gconstpointer tag, const NML3ConfigData *ifcfg);
|
||||
|
||||
gboolean nm_l3cfg_remove_config_all(NML3Cfg *self, gconstpointer tag, gboolean only_dirty);
|
||||
gboolean nm_l3cfg_remove_config_all(NML3Cfg *self, gconstpointer tag);
|
||||
gboolean nm_l3cfg_remove_config_all_dirty(NML3Cfg *self, gconstpointer tag);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
|
|
|||
|
|
@ -4751,7 +4751,7 @@ active_connection_parent_active(NMActiveConnection *active,
|
|||
NMSettingsConnection *sett_conn;
|
||||
NMDevice * parent;
|
||||
|
||||
g_signal_handlers_disconnect_by_func(active, (GCallback) active_connection_parent_active, self);
|
||||
g_signal_handlers_disconnect_by_func(active, G_CALLBACK(active_connection_parent_active), self);
|
||||
|
||||
if (!parent_ac) {
|
||||
_LOGW(LOGD_CORE,
|
||||
|
|
@ -4926,7 +4926,7 @@ _internal_activate_device(NMManager *self, NMActiveConnection *active, GError **
|
|||
/* We can't realize now; defer until the parent device is ready. */
|
||||
g_signal_connect(active,
|
||||
NM_ACTIVE_CONNECTION_PARENT_ACTIVE,
|
||||
(GCallback) active_connection_parent_active,
|
||||
G_CALLBACK(active_connection_parent_active),
|
||||
self);
|
||||
nm_active_connection_set_parent(active, parent_ac);
|
||||
} else {
|
||||
|
|
@ -6164,7 +6164,7 @@ sleep_devices_add(NMManager *self, NMDevice *device, gboolean suspending)
|
|||
g_hash_table_insert(priv->sleep_devices,
|
||||
g_object_ref(device),
|
||||
suspending ? nm_sleep_monitor_inhibit_take(priv->sleep_monitor) : NULL);
|
||||
g_signal_connect(device, "notify::" NM_DEVICE_STATE, (GCallback) device_sleep_cb, self);
|
||||
g_signal_connect(device, "notify::" NM_DEVICE_STATE, G_CALLBACK(device_sleep_cb), self);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -322,7 +322,9 @@ ip6_remove_device_prefix_delegations(NMPolicy *self, NMDevice *device)
|
|||
}
|
||||
|
||||
static void
|
||||
device_ip6_prefix_delegated(NMDevice *device, NMPlatformIP6Address *prefix, gpointer user_data)
|
||||
device_ip6_prefix_delegated(NMDevice * device,
|
||||
const NMPlatformIP6Address *prefix,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMPolicyPrivate * priv = user_data;
|
||||
NMPolicy * self = _PRIV_TO_SELF(priv);
|
||||
|
|
@ -913,7 +915,7 @@ update_system_hostname(NMPolicy *self, const char *msg)
|
|||
if (wait) {
|
||||
g_signal_connect(info->device,
|
||||
NM_DEVICE_DNS_LOOKUP_DONE,
|
||||
(GCallback) device_dns_lookup_done,
|
||||
G_CALLBACK(device_dns_lookup_done),
|
||||
self);
|
||||
return;
|
||||
}
|
||||
|
|
@ -2222,30 +2224,30 @@ devices_list_register(NMPolicy *self, NMDevice *device)
|
|||
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE(self);
|
||||
|
||||
/* Connect state-changed with _after, so that the handler is invoked after other handlers. */
|
||||
g_signal_connect_after(device, NM_DEVICE_STATE_CHANGED, (GCallback) device_state_changed, priv);
|
||||
g_signal_connect_after(device, NM_DEVICE_STATE_CHANGED, G_CALLBACK(device_state_changed), priv);
|
||||
g_signal_connect(device,
|
||||
NM_DEVICE_IP4_CONFIG_CHANGED,
|
||||
(GCallback) device_ip_config_changed,
|
||||
G_CALLBACK(device_ip_config_changed),
|
||||
priv);
|
||||
g_signal_connect(device,
|
||||
NM_DEVICE_IP6_CONFIG_CHANGED,
|
||||
(GCallback) device_ip_config_changed,
|
||||
G_CALLBACK(device_ip_config_changed),
|
||||
priv);
|
||||
g_signal_connect(device,
|
||||
NM_DEVICE_IP6_PREFIX_DELEGATED,
|
||||
(GCallback) device_ip6_prefix_delegated,
|
||||
G_CALLBACK(device_ip6_prefix_delegated),
|
||||
priv);
|
||||
g_signal_connect(device,
|
||||
NM_DEVICE_IP6_SUBNET_NEEDED,
|
||||
(GCallback) device_ip6_subnet_needed,
|
||||
G_CALLBACK(device_ip6_subnet_needed),
|
||||
priv);
|
||||
g_signal_connect(device,
|
||||
"notify::" NM_DEVICE_AUTOCONNECT,
|
||||
(GCallback) device_autoconnect_changed,
|
||||
G_CALLBACK(device_autoconnect_changed),
|
||||
priv);
|
||||
g_signal_connect(device,
|
||||
NM_DEVICE_RECHECK_AUTO_ACTIVATE,
|
||||
(GCallback) device_recheck_auto_activate,
|
||||
G_CALLBACK(device_recheck_auto_activate),
|
||||
priv);
|
||||
}
|
||||
|
||||
|
|
@ -2800,49 +2802,49 @@ constructed(GObject *object)
|
|||
|
||||
g_signal_connect(priv->hostname_manager,
|
||||
"notify::" NM_HOSTNAME_MANAGER_HOSTNAME,
|
||||
(GCallback) hostname_changed,
|
||||
G_CALLBACK(hostname_changed),
|
||||
priv);
|
||||
|
||||
g_signal_connect(priv->manager,
|
||||
"notify::" NM_MANAGER_SLEEPING,
|
||||
(GCallback) sleeping_changed,
|
||||
G_CALLBACK(sleeping_changed),
|
||||
priv);
|
||||
g_signal_connect(priv->manager,
|
||||
"notify::" NM_MANAGER_NETWORKING_ENABLED,
|
||||
(GCallback) sleeping_changed,
|
||||
G_CALLBACK(sleeping_changed),
|
||||
priv);
|
||||
g_signal_connect(priv->manager,
|
||||
NM_MANAGER_INTERNAL_DEVICE_ADDED,
|
||||
(GCallback) device_added,
|
||||
G_CALLBACK(device_added),
|
||||
priv);
|
||||
g_signal_connect(priv->manager,
|
||||
NM_MANAGER_INTERNAL_DEVICE_REMOVED,
|
||||
(GCallback) device_removed,
|
||||
G_CALLBACK(device_removed),
|
||||
priv);
|
||||
g_signal_connect(priv->manager,
|
||||
NM_MANAGER_ACTIVE_CONNECTION_ADDED,
|
||||
(GCallback) active_connection_added,
|
||||
G_CALLBACK(active_connection_added),
|
||||
priv);
|
||||
g_signal_connect(priv->manager,
|
||||
NM_MANAGER_ACTIVE_CONNECTION_REMOVED,
|
||||
(GCallback) active_connection_removed,
|
||||
G_CALLBACK(active_connection_removed),
|
||||
priv);
|
||||
|
||||
g_signal_connect(priv->settings,
|
||||
NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
|
||||
(GCallback) connection_added,
|
||||
G_CALLBACK(connection_added),
|
||||
priv);
|
||||
g_signal_connect(priv->settings,
|
||||
NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,
|
||||
(GCallback) connection_updated,
|
||||
G_CALLBACK(connection_updated),
|
||||
priv);
|
||||
g_signal_connect(priv->settings,
|
||||
NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
|
||||
(GCallback) connection_removed,
|
||||
G_CALLBACK(connection_removed),
|
||||
priv);
|
||||
g_signal_connect(priv->settings,
|
||||
NM_SETTINGS_SIGNAL_CONNECTION_FLAGS_CHANGED,
|
||||
(GCallback) connection_flags_changed,
|
||||
G_CALLBACK(connection_flags_changed),
|
||||
priv);
|
||||
|
||||
g_signal_connect(priv->agent_mgr,
|
||||
|
|
|
|||
|
|
@ -104,11 +104,11 @@ SignalData *add_signal_full(const char * name,
|
|||
int ifindex,
|
||||
const char * ifname);
|
||||
#define add_signal(name, change_type, callback) \
|
||||
add_signal_full(name, change_type, (GCallback) callback, 0, NULL)
|
||||
add_signal_full(name, change_type, G_CALLBACK(callback), 0, NULL)
|
||||
#define add_signal_ifindex(name, change_type, callback, ifindex) \
|
||||
add_signal_full(name, change_type, (GCallback) callback, ifindex, NULL)
|
||||
add_signal_full(name, change_type, G_CALLBACK(callback), ifindex, NULL)
|
||||
#define add_signal_ifname(name, change_type, callback, ifname) \
|
||||
add_signal_full(name, change_type, (GCallback) callback, 0, ifname)
|
||||
add_signal_full(name, change_type, G_CALLBACK(callback), 0, ifname)
|
||||
void _accept_signal(const char *file, int line, const char *func, SignalData *data);
|
||||
void
|
||||
_accept_signals(const char *file, int line, const char *func, SignalData *data, int min, int max);
|
||||
|
|
|
|||
|
|
@ -490,7 +490,7 @@ test_l3cfg(gconstpointer test_data)
|
|||
if (nmtst_get_rand_one_case_in(3))
|
||||
_test_fixture_1_teardown(&test_fixture);
|
||||
|
||||
nm_l3cfg_remove_config_all(l3cfg0, GINT_TO_POINTER('a'), FALSE);
|
||||
nm_l3cfg_remove_config_all(l3cfg0, GINT_TO_POINTER('a'));
|
||||
|
||||
if (nmtst_get_rand_one_case_in(3))
|
||||
_test_fixture_1_teardown(&test_fixture);
|
||||
|
|
@ -615,8 +615,7 @@ _test_l3_ipv4ll_signal_notify(NML3Cfg * l3cfg,
|
|||
_LOGT("remove address %s that previously passed ACD",
|
||||
_nm_utils_inet4_ntop(tdata->addr_commit_addr, sbuf_addr));
|
||||
if (!nm_l3cfg_remove_config_all(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll),
|
||||
TEST_L3_IPV4LL_TAG(tdata, 1),
|
||||
FALSE))
|
||||
TEST_L3_IPV4LL_TAG(tdata, 1)))
|
||||
g_assert_not_reached();
|
||||
nm_l3cfg_commit_on_idle_schedule(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll));
|
||||
nm_l3cfg_commit_type_unregister(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll),
|
||||
|
|
@ -766,9 +765,7 @@ test_l3_ipv4ll(gconstpointer test_data)
|
|||
_LOGT("poll 1 end");
|
||||
|
||||
if (tdata->addr_commit || nmtst_get_rand_bool()) {
|
||||
nm_l3cfg_remove_config_all(nm_l3_ipv4ll_get_l3cfg(l3ipv4ll),
|
||||
TEST_L3_IPV4LL_TAG(tdata, 1),
|
||||
FALSE);
|
||||
nm_l3cfg_remove_config_all(nm_l3_ipv4ll_get_l3cfg(l3ipv4ll), TEST_L3_IPV4LL_TAG(tdata, 1));
|
||||
}
|
||||
|
||||
nmtstp_acd_defender_destroy(g_steal_pointer(&acd_defender_1));
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ test_device_added(void)
|
|||
devices = nm_client_get_devices(client);
|
||||
g_assert(devices->len == 0);
|
||||
|
||||
g_signal_connect(client, "notify::devices", (GCallback) devices_notify_cb, ¬ified);
|
||||
g_signal_connect(client, "notify::devices", G_CALLBACK(devices_notify_cb), ¬ified);
|
||||
|
||||
/* Tell the test service to add a new device */
|
||||
nmtstc_service_add_device(sinfo, client, "AddWiredDevice", "eth0");
|
||||
|
|
@ -149,11 +149,11 @@ test_device_added_signal_after_init(void)
|
|||
devices = nm_client_get_devices(client);
|
||||
g_assert(devices->len == 0);
|
||||
|
||||
g_signal_connect(client, NM_CLIENT_DEVICE_ADDED, (GCallback) device_sai_added_cb, &result);
|
||||
g_signal_connect(client, NM_CLIENT_DEVICE_ADDED, G_CALLBACK(device_sai_added_cb), &result);
|
||||
|
||||
g_signal_connect(client,
|
||||
"notify::" NM_CLIENT_DEVICES,
|
||||
(GCallback) devices_sai_notify_cb,
|
||||
G_CALLBACK(devices_sai_notify_cb),
|
||||
&result);
|
||||
|
||||
/* Tell the test service to add a new device */
|
||||
|
|
@ -307,10 +307,10 @@ test_wifi_ap_added_removed(void)
|
|||
g_variant_get(ret, "(o)", &expected_path);
|
||||
g_variant_unref(ret);
|
||||
|
||||
g_signal_connect(wifi, "access-point-added", (GCallback) wifi_ap_added_cb, &info);
|
||||
g_signal_connect(wifi, "access-point-added", G_CALLBACK(wifi_ap_added_cb), &info);
|
||||
info.quit_count = 1;
|
||||
|
||||
g_signal_connect(wifi, "notify::access-points", (GCallback) wifi_ap_add_notify_cb, &info);
|
||||
g_signal_connect(wifi, "notify::access-points", G_CALLBACK(wifi_ap_add_notify_cb), &info);
|
||||
info.quit_count++;
|
||||
|
||||
/* Wait for libnm to find the AP */
|
||||
|
|
@ -340,10 +340,10 @@ test_wifi_ap_added_removed(void)
|
|||
g_assert_no_error(error);
|
||||
nm_clear_pointer(&ret, g_variant_unref);
|
||||
|
||||
g_signal_connect(wifi, "access-point-removed", (GCallback) wifi_ap_removed_cb, &info);
|
||||
g_signal_connect(wifi, "access-point-removed", G_CALLBACK(wifi_ap_removed_cb), &info);
|
||||
info.quit_count = 1;
|
||||
|
||||
g_signal_connect(wifi, "notify::access-points", (GCallback) wifi_ap_remove_notify_cb, &info);
|
||||
g_signal_connect(wifi, "notify::access-points", G_CALLBACK(wifi_ap_remove_notify_cb), &info);
|
||||
info.quit_count++;
|
||||
|
||||
/* Wait for libnm to find the AP */
|
||||
|
|
@ -463,9 +463,9 @@ test_devices_array(void)
|
|||
g_assert(ret);
|
||||
g_variant_unref(ret);
|
||||
|
||||
g_signal_connect(client, "device-removed", (GCallback) da_device_removed_cb, &info);
|
||||
g_signal_connect(client, "device-removed", G_CALLBACK(da_device_removed_cb), &info);
|
||||
|
||||
g_signal_connect(client, "notify::devices", (GCallback) da_devices_notify_cb, &info);
|
||||
g_signal_connect(client, "notify::devices", G_CALLBACK(da_devices_notify_cb), &info);
|
||||
info.quit_count = 2;
|
||||
|
||||
/* Wait for libnm to notice the changes */
|
||||
|
|
|
|||
|
|
@ -5013,7 +5013,7 @@ test_connection_changed_signal(void)
|
|||
connection = new_test_connection();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
/* Add new setting */
|
||||
|
|
@ -5039,7 +5039,7 @@ test_setting_connection_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_con = (NMSettingConnection *) nm_setting_connection_new();
|
||||
|
|
@ -5075,7 +5075,7 @@ test_setting_bond_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_bond = (NMSettingBond *) nm_setting_bond_new();
|
||||
|
|
@ -5101,7 +5101,7 @@ test_setting_ip4_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
|
||||
|
|
@ -5177,7 +5177,7 @@ test_setting_ip6_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
|
||||
|
|
@ -5244,7 +5244,7 @@ test_setting_vlan_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_vlan = (NMSettingVlan *) nm_setting_vlan_new();
|
||||
|
|
@ -5279,7 +5279,7 @@ test_setting_vpn_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_vpn = (NMSettingVpn *) nm_setting_vpn_new();
|
||||
|
|
@ -5306,7 +5306,7 @@ test_setting_wired_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_wired = (NMSettingWired *) nm_setting_wired_new();
|
||||
|
|
@ -5329,7 +5329,7 @@ test_setting_wireless_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
|
||||
|
|
@ -5350,7 +5350,7 @@ test_setting_wireless_security_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
|
||||
|
|
@ -5417,7 +5417,7 @@ test_setting_802_1x_changed_signal(void)
|
|||
connection = nm_simple_connection_new();
|
||||
g_signal_connect(connection,
|
||||
NM_CONNECTION_CHANGED,
|
||||
(GCallback) test_connection_changed_cb,
|
||||
G_CALLBACK(test_connection_changed_cb),
|
||||
&changed);
|
||||
|
||||
s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
|
||||
|
|
|
|||
|
|
@ -5000,14 +5000,14 @@ _nm_g_source_sentinel_get_init(GSource **p_source)
|
|||
};
|
||||
GSource *source;
|
||||
|
||||
again:
|
||||
source = g_source_new((GSourceFuncs *) &source_funcs, sizeof(GSource));
|
||||
g_source_set_priority(source, G_PRIORITY_DEFAULT_IDLE);
|
||||
g_source_set_name(source, "nm_g_source_sentinel");
|
||||
|
||||
if (!g_atomic_pointer_compare_and_exchange(p_source, NULL, source)) {
|
||||
g_source_unref(source);
|
||||
goto again;
|
||||
source = g_atomic_pointer_get(p_source);
|
||||
nm_assert(source);
|
||||
}
|
||||
|
||||
return source;
|
||||
|
|
|
|||
|
|
@ -2304,6 +2304,59 @@ int _nm_strv_cmp_n(const char *const *strv1, gssize len1, const char *const *str
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* nm_arr_insert_at() does @arr[@idx] = @value, but first memmove's
|
||||
* the elements @arr[@idx..@len-1] one element up. That means, @arr currently
|
||||
* has @len valid elements, but it must have space for one more element,
|
||||
* which will be overwritten.
|
||||
*
|
||||
* The use case is to have a sorted array (nm_strv_find_binary_search()) and
|
||||
* to insert the element at he desired index. The caller must make sure that
|
||||
* @len is large enough to contain one more element. */
|
||||
#define nm_arr_insert_at(arr, len, idx, value) \
|
||||
G_STMT_START \
|
||||
{ \
|
||||
typeof(*(arr)) *const _arr = (arr); \
|
||||
typeof(len) _len = (len); \
|
||||
typeof(idx) _idx = (idx); \
|
||||
const gsize _len2 = (_len); \
|
||||
const gsize _idx2 = (_idx); \
|
||||
\
|
||||
nm_assert(_arr); \
|
||||
nm_assert(_NM_INT_NOT_NEGATIVE(_len)); \
|
||||
nm_assert(_NM_INT_NOT_NEGATIVE(_idx)); \
|
||||
nm_assert(_idx <= _len); \
|
||||
\
|
||||
if (_idx2 != _len2) \
|
||||
memmove(&_arr[_idx2 + 1u], &_arr[_idx2], sizeof(_arr[0]) * (_len2 - _idx2)); \
|
||||
\
|
||||
_arr[_idx2] = (value); \
|
||||
} \
|
||||
G_STMT_END
|
||||
|
||||
/* nm_arr_remove_at() removes the element at arr[idx], by memmove'ing
|
||||
* the elements from arr[idx+1..len-1] down. All it does is one memmove(),
|
||||
* if there is anything to move. */
|
||||
#define nm_arr_remove_at(arr, len, idx) \
|
||||
G_STMT_START \
|
||||
{ \
|
||||
typeof(*(arr)) *const _arr = (arr); \
|
||||
typeof(len) _len = (len); \
|
||||
typeof(idx) _idx = (idx); \
|
||||
const gsize _len2 = (_len); \
|
||||
const gsize _idx2 = (_idx); \
|
||||
\
|
||||
nm_assert(_arr); \
|
||||
nm_assert(_len > 0); \
|
||||
nm_assert(_NM_INT_NOT_NEGATIVE(_idx)); \
|
||||
nm_assert(_idx < _len); \
|
||||
\
|
||||
if (_idx2 != _len2 - 1u) \
|
||||
memmove(&_arr[_idx2], &_arr[_idx2 + 1u], sizeof(_arr[0]) * ((_len2 - 1u) - _idx2)); \
|
||||
} \
|
||||
G_STMT_END
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_UTILS_NSEC_PER_SEC ((gint64) 1000000000)
|
||||
#define NM_UTILS_USEC_PER_SEC ((gint64) 1000000)
|
||||
#define NM_UTILS_MSEC_PER_SEC ((gint64) 1000)
|
||||
|
|
|
|||
|
|
@ -1238,7 +1238,7 @@ _nmtst_main_loop_quit_on_notify(GObject *object, GParamSpec *pspec, gpointer use
|
|||
|
||||
g_main_loop_quit(loop);
|
||||
}
|
||||
#define nmtst_main_loop_quit_on_notify ((GCallback) _nmtst_main_loop_quit_on_notify)
|
||||
#define nmtst_main_loop_quit_on_notify (G_CALLBACK(_nmtst_main_loop_quit_on_notify))
|
||||
|
||||
#define nmtst_main_context_iterate_until_full(context, timeout_msec, poll_msec, condition) \
|
||||
({ \
|
||||
|
|
|
|||
|
|
@ -1134,6 +1134,21 @@ nm_ptr_to_uintptr(const void *p)
|
|||
#define NM_AF_INET_SIZE 4 /* sizeof (in_addr_t) */
|
||||
#define NM_AF_INET6_SIZE 16 /* sizeof (stuct in6_addr) */
|
||||
|
||||
static inline const char *
|
||||
nm_utils_addr_family_to_str(int addr_family)
|
||||
{
|
||||
switch (addr_family) {
|
||||
case NM_AF_UNSPEC:
|
||||
return "";
|
||||
case NM_AF_INET:
|
||||
return "4";
|
||||
case NM_AF_INET6:
|
||||
return "6";
|
||||
}
|
||||
nm_assert_not_reached();
|
||||
return "?";
|
||||
}
|
||||
|
||||
static inline char
|
||||
nm_utils_addr_family_to_char(int addr_family)
|
||||
{
|
||||
|
|
@ -1152,15 +1167,17 @@ nm_utils_addr_family_to_char(int addr_family)
|
|||
#define nm_assert_addr_family(addr_family) \
|
||||
nm_assert(NM_IN_SET((addr_family), NM_AF_INET, NM_AF_INET6))
|
||||
|
||||
#define NM_IS_IPv4(addr_family) \
|
||||
({ \
|
||||
const int _addr_family = (addr_family); \
|
||||
\
|
||||
nm_assert_addr_family(_addr_family); \
|
||||
\
|
||||
(_addr_family == NM_AF_INET); \
|
||||
#define _NM_IS_IPv4(uniq, addr_family) \
|
||||
({ \
|
||||
const int NM_UNIQ_T(_addr_family, uniq) = (addr_family); \
|
||||
\
|
||||
nm_assert_addr_family(NM_UNIQ_T(_addr_family, uniq)); \
|
||||
\
|
||||
(NM_UNIQ_T(_addr_family, uniq) == NM_AF_INET); \
|
||||
})
|
||||
|
||||
#define NM_IS_IPv4(addr_family) _NM_IS_IPv4(NM_UNIQ, addr_family)
|
||||
|
||||
static inline size_t
|
||||
nm_utils_addr_family_to_size(int addr_family)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue