summaryrefslogtreecommitdiff
path: root/src/nm-iface-helper.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-03-13 20:09:46 +0100
committerThomas Haller <thaller@redhat.com>2015-03-20 11:43:29 +0100
commit5775df9a6dcfaa4a9d208c8e78d6a7419c0e6a07 (patch)
treef80ea27481e012791a860e9aad22ccf0d3fd36ba /src/nm-iface-helper.c
parent1fc5aba42a175c0eca0b6d8804d6ee9088c1dfe5 (diff)
downloadNetworkManager-5775df9a6dcfaa4a9d208c8e78d6a7419c0e6a07.tar.gz
main: refactor early setup in main()
Move call to nm_main_utils_early_setup() to a separate function. Also move the @options array away from the main function, saving a few bytes on the stack. Now only do_early_setup() modifies the @global_opt structure.
Diffstat (limited to 'src/nm-iface-helper.c')
-rw-r--r--src/nm-iface-helper.c75
1 files changed, 43 insertions, 32 deletions
diff --git a/src/nm-iface-helper.c b/src/nm-iface-helper.c
index eb376b5e6d..4125ba5012 100644
--- a/src/nm-iface-helper.c
+++ b/src/nm-iface-helper.c
@@ -52,8 +52,6 @@
static GMainLoop *main_loop = NULL;
static int ifindex = -1;
-static guint32 priority_v4 = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4;
-static guint32 priority_v6 = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6;
static struct {
gboolean slaac;
@@ -72,12 +70,12 @@ static struct {
char *iid_str;
char *opt_log_level;
char *opt_log_domains;
- gint64 priority64_v4;
- gint64 priority64_v6;
+ guint32 priority_v4;
+ guint32 priority_v6;
} global_opt = {
.tempaddr = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
- .priority64_v4 = -1,
- .priority64_v6 = -1,
+ .priority_v4 = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4,
+ .priority_v6 = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6,
};
static void
@@ -102,7 +100,7 @@ dhcp4_state_changed (NMDhcpClient *client,
nm_ip4_config_subtract (existing, last_config);
nm_ip4_config_merge (existing, ip4_config);
- if (!nm_ip4_config_commit (existing, ifindex, priority_v4))
+ if (!nm_ip4_config_commit (existing, ifindex, global_opt.priority_v4))
nm_log_warn (LOGD_DHCP4, "(%s): failed to apply DHCPv4 config", global_opt.ifname);
if (last_config) {
@@ -214,7 +212,7 @@ rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, gpointer user_da
route.plen = discovered_route->plen;
route.gateway = discovered_route->gateway;
route.source = NM_IP_CONFIG_SOURCE_RDISC;
- route.metric = priority_v6;
+ route.metric = global_opt.priority_v6;
nm_ip6_config_add_route (ip6_config, &route);
}
@@ -281,20 +279,11 @@ setup_signals (void)
g_unix_signal_add (SIGTERM, quit_handler, NULL);
}
-int
-main (int argc, char *argv[])
+static void
+do_early_setup (int *argc, char **argv[])
{
- char *bad_domains = NULL;
- GError *error = NULL;
- gboolean wrote_pidfile = FALSE;
- gs_free char *pidfile = NULL;
- gs_unref_object NMDhcpClient *dhcp4_client = NULL;
- gs_unref_object NMRDisc *rdisc = NULL;
- GByteArray *hwaddr = NULL;
- size_t hwaddr_len = 0;
- gconstpointer tmp;
- gs_free NMUtilsIPv6IfaceId *iid = NULL;
-
+ gint64 priority64_v4 = -1;
+ gint64 priority64_v6 = -1;
GOptionEntry options[] = {
/* Interface/IP config */
{ "ifname", 'i', 0, G_OPTION_ARG_STRING, &global_opt.ifname, N_("The interface to manage"), N_("eth0") },
@@ -306,8 +295,8 @@ main (int argc, char *argv[])
{ "dhcp4-required", '4', 0, G_OPTION_ARG_NONE, &global_opt.dhcp4_required, N_("Whether DHCPv4 must be successful"), NULL },
{ "dhcp4-clientid", 'c', 0, G_OPTION_ARG_STRING, &global_opt.dhcp4_clientid, N_("Hex-encoded DHCPv4 client ID"), NULL },
{ "dhcp4-hostname", 'h', 0, G_OPTION_ARG_STRING, &global_opt.dhcp4_hostname, N_("Hostname to send to DHCP server"), N_("barbar") },
- { "priority4", '\0', 0, G_OPTION_ARG_INT64, &global_opt.priority64_v4, N_("Route priority for IPv4"), N_("0") },
- { "priority6", '\0', 0, G_OPTION_ARG_INT64, &global_opt.priority64_v6, N_("Route priority for IPv6"), N_("1024") },
+ { "priority4", '\0', 0, G_OPTION_ARG_INT64, &priority64_v4, N_("Route priority for IPv4"), N_("0") },
+ { "priority6", '\0', 0, G_OPTION_ARG_INT64, &priority64_v6, N_("Route priority for IPv6"), N_("1024") },
{ "iid", 'e', 0, G_OPTION_ARG_STRING, &global_opt.iid_str, N_("Hex-encoded Interface Identifier"), N_("") },
/* Logging/debugging */
@@ -325,14 +314,42 @@ main (int argc, char *argv[])
setpgid (getpid (), getpid ());
if (!nm_main_utils_early_setup ("nm-iface-helper",
- &argc,
- &argv,
+ argc,
+ argv,
options,
NULL,
NULL,
_("nm-iface-helper is a small, standalone process that manages a single network interface.")))
exit (1);
+ if (priority64_v4 >= 0 && priority64_v4 <= G_MAXUINT32)
+ global_opt.priority_v4 = (guint32) priority64_v4;
+ if (priority64_v6 >= 0 && priority64_v6 <= G_MAXUINT32)
+ global_opt.priority_v6 = (guint32) priority64_v6;
+}
+
+int
+main (int argc, char *argv[])
+{
+ char *bad_domains = NULL;
+ GError *error = NULL;
+ gboolean wrote_pidfile = FALSE;
+ gs_free char *pidfile = NULL;
+ gs_unref_object NMDhcpClient *dhcp4_client = NULL;
+ gs_unref_object NMRDisc *rdisc = NULL;
+ GByteArray *hwaddr = NULL;
+ size_t hwaddr_len = 0;
+ gconstpointer tmp;
+ gs_free NMUtilsIPv6IfaceId *iid = NULL;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ setpgid (getpid (), getpid ());
+
+ do_early_setup (&argc, &argv);
+
if (global_opt.show_version) {
fprintf (stdout, NM_DIST_VERSION "\n");
exit (0);
@@ -426,12 +443,6 @@ main (int argc, char *argv[])
iid = g_bytes_unref_to_data (bytes, &ignored);
}
- if (global_opt.priority64_v4 >= 0 && global_opt.priority64_v4 <= G_MAXUINT32)
- priority_v4 = (guint32) global_opt.priority64_v4;
-
- if (global_opt.priority64_v6 >= 0 && global_opt.priority64_v6 <= G_MAXUINT32)
- priority_v6 = (guint32) global_opt.priority64_v6;
-
if (global_opt.dhcp4_address) {
nm_platform_sysctl_set (nm_utils_ip4_property_path (global_opt.ifname, "promote_secondaries"), "1");
@@ -440,7 +451,7 @@ main (int argc, char *argv[])
ifindex,
hwaddr,
global_opt.uuid,
- priority_v4,
+ global_opt.priority_v4,
!!global_opt.dhcp4_hostname,
global_opt.dhcp4_hostname,
global_opt.dhcp4_clientid,