dispatcher: add an env var indicating a connection is "external"
Add CONNECTION_EXTERNAL=1 to the environment when dispatching actions on a "generated-assumed" connection (ie, one that was created outside of NM).
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#define NMD_CONNECTION_PROPS_PATH "path"
|
#define NMD_CONNECTION_PROPS_PATH "path"
|
||||||
#define NMD_CONNECTION_PROPS_FILENAME "filename"
|
#define NMD_CONNECTION_PROPS_FILENAME "filename"
|
||||||
|
#define NMD_CONNECTION_PROPS_EXTERNAL "external"
|
||||||
|
|
||||||
#define NMD_DEVICE_PROPS_INTERFACE "interface"
|
#define NMD_DEVICE_PROPS_INTERFACE "interface"
|
||||||
#define NMD_DEVICE_PROPS_IP_INTERFACE "ip-interface"
|
#define NMD_DEVICE_PROPS_IP_INTERFACE "ip-interface"
|
||||||
|
@@ -335,6 +335,7 @@ nm_dispatcher_utils_construct_envp (const char *action,
|
|||||||
const char *iface = NULL, *ip_iface = NULL;
|
const char *iface = NULL, *ip_iface = NULL;
|
||||||
const char *uuid = NULL, *id = NULL, *path = NULL;
|
const char *uuid = NULL, *id = NULL, *path = NULL;
|
||||||
const char *filename = NULL;
|
const char *filename = NULL;
|
||||||
|
gboolean external;
|
||||||
NMDeviceState dev_state = NM_DEVICE_STATE_UNKNOWN;
|
NMDeviceState dev_state = NM_DEVICE_STATE_UNKNOWN;
|
||||||
GVariant *value;
|
GVariant *value;
|
||||||
char **envp = NULL, *path_item;
|
char **envp = NULL, *path_item;
|
||||||
@@ -357,6 +358,9 @@ nm_dispatcher_utils_construct_envp (const char *action,
|
|||||||
}
|
}
|
||||||
items = g_slist_prepend (items, g_strdup_printf ("CONNECTION_DBUS_PATH=%s", path));
|
items = g_slist_prepend (items, g_strdup_printf ("CONNECTION_DBUS_PATH=%s", path));
|
||||||
|
|
||||||
|
if (g_variant_lookup (connection_props, NMD_CONNECTION_PROPS_EXTERNAL, "b", &external) && external)
|
||||||
|
items = g_slist_prepend (items, g_strdup ("CONNECTION_EXTERNAL=1"));
|
||||||
|
|
||||||
if (g_variant_lookup (connection_props, NMD_CONNECTION_PROPS_FILENAME, "&s", &filename))
|
if (g_variant_lookup (connection_props, NMD_CONNECTION_PROPS_FILENAME, "&s", &filename))
|
||||||
items = g_slist_prepend (items, g_strdup_printf ("CONNECTION_FILENAME=%s", filename));
|
items = g_slist_prepend (items, g_strdup_printf ("CONNECTION_FILENAME=%s", filename));
|
||||||
|
|
||||||
|
@@ -34,6 +34,7 @@ endif
|
|||||||
|
|
||||||
EXTRA_DIST= \
|
EXTRA_DIST= \
|
||||||
dispatcher-down \
|
dispatcher-down \
|
||||||
|
dispatcher-external \
|
||||||
dispatcher-up \
|
dispatcher-up \
|
||||||
dispatcher-vpn-down \
|
dispatcher-vpn-down \
|
||||||
dispatcher-vpn-up
|
dispatcher-vpn-up
|
||||||
|
33
callouts/tests/dispatcher-external
Normal file
33
callouts/tests/dispatcher-external
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
[main]
|
||||||
|
action=up
|
||||||
|
expected-iface=virbr0
|
||||||
|
uuid=92bbc2fb-7304-46be-8ebb-6093dbe19a6a
|
||||||
|
id=virbr0
|
||||||
|
external=1
|
||||||
|
|
||||||
|
[device]
|
||||||
|
state=100
|
||||||
|
ip-interface=virbr0
|
||||||
|
type=13
|
||||||
|
interface=virbr0
|
||||||
|
path=/org/freedesktop/NetworkManager/Devices/0
|
||||||
|
|
||||||
|
[ip4]
|
||||||
|
addresses=192.168.122.1/24 0.0.0.0
|
||||||
|
domains=
|
||||||
|
gateway=0.0.0.0
|
||||||
|
|
||||||
|
[env]
|
||||||
|
PATH=
|
||||||
|
CONNECTION_UUID=92bbc2fb-7304-46be-8ebb-6093dbe19a6a
|
||||||
|
CONNECTION_DBUS_PATH=/org/freedesktop/NetworkManager/Connections/5
|
||||||
|
CONNECTION_FILENAME=/callouts/tests/dispatcher-external
|
||||||
|
CONNECTION_ID=virbr0
|
||||||
|
CONNECTION_EXTERNAL=1
|
||||||
|
DEVICE_IFACE=virbr0
|
||||||
|
DEVICE_IP_IFACE=virbr0
|
||||||
|
IP4_NUM_ADDRESSES=1
|
||||||
|
IP4_ADDRESS_0=192.168.122.1/24 0.0.0.0
|
||||||
|
IP4_GATEWAY=0.0.0.0
|
||||||
|
IP4_NUM_ROUTES=0
|
||||||
|
|
@@ -83,11 +83,19 @@ parse_main (GKeyFile *kf,
|
|||||||
g_variant_builder_add (&props, "{sv}",
|
g_variant_builder_add (&props, "{sv}",
|
||||||
NMD_CONNECTION_PROPS_PATH,
|
NMD_CONNECTION_PROPS_PATH,
|
||||||
g_variant_new_object_path ("/org/freedesktop/NetworkManager/Connections/5"));
|
g_variant_new_object_path ("/org/freedesktop/NetworkManager/Connections/5"));
|
||||||
|
|
||||||
/* Strip out the non-fixed portion of the filename */
|
/* Strip out the non-fixed portion of the filename */
|
||||||
filename = strstr (filename, "/callouts");
|
filename = strstr (filename, "/callouts");
|
||||||
g_variant_builder_add (&props, "{sv}",
|
g_variant_builder_add (&props, "{sv}",
|
||||||
"filename",
|
"filename",
|
||||||
g_variant_new_string (filename));
|
g_variant_new_string (filename));
|
||||||
|
|
||||||
|
if (g_key_file_get_boolean (kf, "main", "external", NULL)) {
|
||||||
|
g_variant_builder_add (&props, "{sv}",
|
||||||
|
"external",
|
||||||
|
g_variant_new_boolean (TRUE));
|
||||||
|
}
|
||||||
|
|
||||||
*out_con_props = g_variant_builder_end (&props);
|
*out_con_props = g_variant_builder_end (&props);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -560,6 +568,12 @@ test_vpn_down (void)
|
|||||||
test_generic ("dispatcher-vpn-down", NULL);
|
test_generic ("dispatcher-vpn-down", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_external (void)
|
||||||
|
{
|
||||||
|
test_generic ("dispatcher-external", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_up_empty_vpn_iface (void)
|
test_up_empty_vpn_iface (void)
|
||||||
{
|
{
|
||||||
@@ -584,6 +598,7 @@ main (int argc, char **argv)
|
|||||||
g_test_add_func ("/dispatcher/down", test_down);
|
g_test_add_func ("/dispatcher/down", test_down);
|
||||||
g_test_add_func ("/dispatcher/vpn_up", test_vpn_up);
|
g_test_add_func ("/dispatcher/vpn_up", test_vpn_up);
|
||||||
g_test_add_func ("/dispatcher/vpn_down", test_vpn_down);
|
g_test_add_func ("/dispatcher/vpn_down", test_vpn_down);
|
||||||
|
g_test_add_func ("/dispatcher/external", test_external);
|
||||||
|
|
||||||
g_test_add_func ("/dispatcher/up_empty_vpn_iface", test_up_empty_vpn_iface);
|
g_test_add_func ("/dispatcher/up_empty_vpn_iface", test_up_empty_vpn_iface);
|
||||||
|
|
||||||
|
@@ -178,6 +178,13 @@
|
|||||||
The backing file name of the connection profile (if any).
|
The backing file name of the connection profile (if any).
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>CONNECTION_EXTERNAL</varname></term>
|
||||||
|
<listitem><para>
|
||||||
|
If "1", this indicates that the connection describes a
|
||||||
|
network configuration created outside of NetworkManager.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>DEVICE_IFACE</varname></term>
|
<term><varname>DEVICE_IFACE</varname></term>
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
|
@@ -491,6 +491,11 @@ _dispatcher_call (DispatcherAction action,
|
|||||||
NMD_CONNECTION_PROPS_FILENAME,
|
NMD_CONNECTION_PROPS_FILENAME,
|
||||||
filename);
|
filename);
|
||||||
}
|
}
|
||||||
|
if (nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection))) {
|
||||||
|
value_hash_add_bool (connection_props,
|
||||||
|
NMD_CONNECTION_PROPS_EXTERNAL,
|
||||||
|
TRUE);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
connection_hash = value_hash_create ();
|
connection_hash = value_hash_create ();
|
||||||
connection_props = value_hash_create ();
|
connection_props = value_hash_create ();
|
||||||
|
Reference in New Issue
Block a user