diff options
Diffstat (limited to 'cli/src')
| -rw-r--r-- | cli/src/Makefile.am | 3 | ||||
| -rw-r--r-- | cli/src/Makefile.in | 79 | ||||
| -rw-r--r-- | cli/src/common.c | 11 | ||||
| -rw-r--r-- | cli/src/connections.c | 61 | ||||
| -rw-r--r-- | cli/src/devices.c | 49 | ||||
| -rw-r--r-- | cli/src/network-manager.c | 5 | ||||
| -rw-r--r-- | cli/src/nmcli.c | 19 | ||||
| -rw-r--r-- | cli/src/settings.c | 125 | ||||
| -rw-r--r-- | cli/src/settings.h | 4 | ||||
| -rw-r--r-- | cli/src/utils.c | 10 |
10 files changed, 278 insertions, 88 deletions
diff --git a/cli/src/Makefile.am b/cli/src/Makefile.am index ec62bfea..0f379c10 100644 --- a/cli/src/Makefile.am +++ b/cli/src/Makefile.am @@ -28,8 +28,7 @@ nmcli_SOURCES = \ nmcli_CPPFLAGS = \ $(DBUS_CFLAGS) \ $(GLIB_CFLAGS) \ - -DNMCLI_LOCALEDIR=\"$(datadir)/locale\" \ - -DG_DISABLE_DEPRECATED + -DNMCLI_LOCALEDIR=\"$(datadir)/locale\" nmcli_LDADD = \ $(DBUS_LIBS) \ diff --git a/cli/src/Makefile.in b/cli/src/Makefile.in index 427e22a4..27f3b23a 100644 --- a/cli/src/Makefile.in +++ b/cli/src/Makefile.in @@ -56,16 +56,18 @@ subdir = cli/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \ - $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gtk-doc.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ - $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/introspection.m4 \ - $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ - $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libnl-check.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ - $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gnome-code-coverage.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \ + $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libnl-check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/vapigen.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -134,6 +136,10 @@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CKDB_PATH = @CKDB_PATH@ +CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ +CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ +CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ @@ -148,9 +154,7 @@ DBUS_SYS_DIR = @DBUS_SYS_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DHCLIENT_PATH = @DHCLIENT_PATH@ -DHCLIENT_VERSION = @DHCLIENT_VERSION@ DHCPCD_PATH = @DHCPCD_PATH@ -DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ @@ -160,17 +164,14 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +GENHTML = @GENHTML@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ -GIO_CFLAGS = @GIO_CFLAGS@ -GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MAKEFILE = @GLIB_MAKEFILE@ GLIB_MKENUMS = @GLIB_MKENUMS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNUTLS_CFLAGS = @GNUTLS_CFLAGS@ @@ -211,6 +212,7 @@ IPTABLES_PATH = @IPTABLES_PATH@ IWMX_SDK_CFLAGS = @IWMX_SDK_CFLAGS@ IWMX_SDK_LIBS = @IWMX_SDK_LIBS@ KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@ +LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ @@ -227,11 +229,7 @@ LIBNL2_LIBS = @LIBNL2_LIBS@ LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ LIBNL3_LIBS = @LIBNL3_LIBS@ LIBNL_CFLAGS = @LIBNL_CFLAGS@ -LIBNL_GENL3_CFLAGS = @LIBNL_GENL3_CFLAGS@ -LIBNL_GENL3_LIBS = @LIBNL_GENL3_LIBS@ LIBNL_LIBS = @LIBNL_LIBS@ -LIBNL_ROUTE3_CFLAGS = @LIBNL_ROUTE3_CFLAGS@ -LIBNL_ROUTE3_LIBS = @LIBNL_ROUTE3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ @@ -246,6 +244,8 @@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ +MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@ +MM_GLIB_LIBS = @MM_GLIB_LIBS@ MOC = @MOC@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ @@ -255,6 +255,7 @@ NMEDIT = @NMEDIT@ NM_MAJOR_VERSION = @NM_MAJOR_VERSION@ NM_MICRO_VERSION = @NM_MICRO_VERSION@ NM_MINOR_VERSION = @NM_MINOR_VERSION@ +NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@ NM_VERSION = @NM_VERSION@ NSS_CFLAGS = @NSS_CFLAGS@ NSS_LIBS = @NSS_LIBS@ @@ -281,13 +282,14 @@ PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ -RESOLVCONF_PATH = @RESOLVCONF_PATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ -SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@ -SYSTEMD_LIBS = @SYSTEMD_LIBS@ +SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@ +SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@ +SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@ +SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@ SYSTEM_CA_PATH = @SYSTEM_CA_PATH@ UDEV_BASE_DIR = @UDEV_BASE_DIR@ USE_NLS = @USE_NLS@ @@ -342,6 +344,11 @@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ +nmbinary = @nmbinary@ +nmconfdir = @nmconfdir@ +nmdatadir = @nmdatadir@ +nmrundir = @nmrundir@ +nmstatedir = @nmstatedir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ @@ -356,6 +363,10 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ +with_dhclient = @with_dhclient@ +with_dhcpcd = @with_dhcpcd@ +with_netconfig = @with_netconfig@ +with_resolvconf = @with_resolvconf@ INCLUDES = \ -I${top_srcdir} \ -I${top_srcdir}/include \ @@ -383,8 +394,7 @@ nmcli_SOURCES = \ nmcli_CPPFLAGS = \ $(DBUS_CFLAGS) \ $(GLIB_CFLAGS) \ - -DNMCLI_LOCALEDIR=\"$(datadir)/locale\" \ - -DG_DISABLE_DEPRECATED + -DNMCLI_LOCALEDIR=\"$(datadir)/locale\" nmcli_LDADD = \ $(DBUS_LIBS) \ @@ -491,25 +501,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli-utils.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< diff --git a/cli/src/common.c b/cli/src/common.c index 193ea33f..15ddcada 100644 --- a/cli/src/common.c +++ b/cli/src/common.c @@ -411,7 +411,7 @@ nmc_device_reason_to_string (NMDeviceStateReason reason) return _("The device could not be readied for configuration"); case NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE: - return _("IP configuration could not be reserved (no available address, timeout, etc)"); + return _("IP configuration could not be reserved (no available address, timeout, etc.)"); case NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED: return _("The IP configuration is no longer valid"); @@ -551,6 +551,15 @@ nmc_device_reason_to_string (NMDeviceStateReason reason) case NM_DEVICE_STATE_REASON_BR2684_FAILED: return _("A problem with the RFC 2684 Ethernet over ADSL bridge"); + case NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE: + return _("ModemManager is unavailable"); + + case NM_DEVICE_STATE_REASON_SSID_NOT_FOUND: + return _("The Wi-Fi network could not be found"); + + case NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED: + return _("A secondary connection of the base connection failed"); + default: return _("Unknown"); } diff --git a/cli/src/connections.c b/cli/src/connections.c index 4776e1a6..e7926f1a 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -43,6 +43,7 @@ #include <nm-device-olpc-mesh.h> #include <nm-device-infiniband.h> #include <nm-device-bond.h> +#include <nm-device-bridge.h> #include <nm-device-vlan.h> #include <nm-remote-settings.h> #include <nm-vpn-connection.h> @@ -94,6 +95,8 @@ static NmcOutputField nmc_fields_settings_names[] = { SETTING_FIELD (NM_SETTING_BOND_SETTING_NAME, 0), /* 17 */ SETTING_FIELD (NM_SETTING_VLAN_SETTING_NAME, 0), /* 18 */ SETTING_FIELD (NM_SETTING_ADSL_SETTING_NAME, 0), /* 19 */ + SETTING_FIELD (NM_SETTING_BRIDGE_SETTING_NAME, 0), /* 20 */ + SETTING_FIELD (NM_SETTING_BRIDGE_PORT_SETTING_NAME, 0), /* 21 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTINGS_NAMES_ALL_X NM_SETTING_CONNECTION_SETTING_NAME","\ @@ -114,7 +117,9 @@ static NmcOutputField nmc_fields_settings_names[] = { NM_SETTING_VPN_SETTING_NAME","\ NM_SETTING_INFINIBAND_SETTING_NAME","\ NM_SETTING_BOND_SETTING_NAME","\ - NM_SETTING_VLAN_SETTING_NAME + NM_SETTING_VLAN_SETTING_NAME","\ + NM_SETTING_BRIDGE_SETTING_NAME","\ + NM_SETTING_BRIDGE_PORT_SETTING_NAME #if WITH_WIMAX #define NMC_FIELDS_SETTINGS_NAMES_ALL NMC_FIELDS_SETTINGS_NAMES_ALL_X","\ NM_SETTING_WIMAX_SETTING_NAME @@ -187,7 +192,7 @@ static void usage (void) { fprintf (stderr, - _("Usage: nmcli con { COMMAND | help }\n" + _("Usage: nmcli connection { COMMAND | help }\n" " COMMAND := { list | status | up | down | delete }\n\n" " list [id <id> | uuid <id>]\n" " status [id <id> | uuid <id> | path <path>]\n" @@ -197,7 +202,9 @@ usage (void) " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout <timeout>]\n" #endif " down id <id> | uuid <id>\n" - " delete id <id> | uuid <id>\n")); + " delete id <id> | uuid <id>\n" + "\n" + )); } /* The real commands that do something - i.e. not 'help', etc. */ @@ -450,6 +457,24 @@ nmc_connection_detail (NMConnection *connection, NmCli *nmc) continue; } } + + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[20].name)) { + NMSettingBridge *s_bridge = nm_connection_get_setting_bridge (connection); + if (s_bridge) { + setting_bridge_details (s_bridge, nmc); + was_output = TRUE; + continue; + } + } + + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[21].name)) { + NMSettingBridgePort *s_bridge_port = nm_connection_get_setting_bridge_port (connection); + if (s_bridge_port) { + setting_bridge_port_details (s_bridge_port, nmc); + was_output = TRUE; + continue; + } + } } if (print_settings_array) @@ -570,7 +595,7 @@ do_connections_list (NmCli *nmc, int argc, char **argv) NMConnection *con; if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } @@ -1107,7 +1132,7 @@ do_connections_status (NmCli *nmc, int argc, char **argv) NMActiveConnection *acon; if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } @@ -1645,7 +1670,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv) id_specified = TRUE; if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1660,7 +1685,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv) } else if (strcmp (*argv, "iface") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1669,7 +1694,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv) } else if (strcmp (*argv, "ap") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1679,7 +1704,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv) #if WITH_WIMAX else if (strcmp (*argv, "nsp") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1691,7 +1716,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv) wait = FALSE; } else if (strcmp (*argv, "--timeout") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1737,7 +1762,8 @@ do_connection_up (NmCli *nmc, int argc, char **argv) con_type = nm_setting_connection_get_connection_type (s_con); if ( nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME) - || nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)) + || nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME) + || nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME)) is_virtual = TRUE; device_found = find_device_for_connection (nmc, connection, iface, ap, nsp, &device, &spec_object, &error); @@ -1799,7 +1825,7 @@ do_connection_down (NmCli *nmc, int argc, char **argv) id_specified = TRUE; if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1901,7 +1927,7 @@ do_connection_delete (NmCli *nmc, int argc, char **argv) if (strcmp (*argv, "id") == 0 || strcmp (*argv, "uuid") == 0) { selector = *argv; if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1987,10 +2013,13 @@ parse_cmd (NmCli *nmc, int argc, char **argv) else if (matches(*argv, "delete") == 0) { nmc->return_value = do_connection_delete (nmc, argc-1, argv+1); } - else if (matches (*argv, "help") == 0) { + else if ( matches (*argv, "help") == 0 + || (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0) + || (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) { usage (); nmc->should_wait = FALSE; - } else { + } + else { usage (); g_string_printf (nmc->return_text, _("Error: 'con' command '%s' is not valid."), *argv); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; @@ -2023,7 +2052,7 @@ get_connections_cb (NMRemoteSettings *settings, gpointer user_data) quit (); } -/* Entry point function for connections-related commands: 'nmcli con' */ +/* Entry point function for connections-related commands: 'nmcli connection' */ NMCResultCode do_connections (NmCli *nmc, int argc, char **argv) { diff --git a/cli/src/devices.c b/cli/src/devices.c index 420fd403..caaf7102 100644 --- a/cli/src/devices.c +++ b/cli/src/devices.c @@ -41,6 +41,7 @@ #endif #include <nm-device-infiniband.h> #include <nm-device-bond.h> +#include <nm-device-bridge.h> #include <nm-device-vlan.h> #include <nm-utils.h> #include <nm-setting-ip4-config.h> @@ -240,7 +241,7 @@ static void usage (void) { fprintf (stderr, - _("Usage: nmcli dev { COMMAND | help }\n\n" + _("Usage: nmcli device { COMMAND | help }\n\n" #if WITH_WIMAX " COMMAND := { status | list | disconnect | wifi | wimax }\n\n" #else @@ -253,8 +254,9 @@ usage (void) " wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [iface <iface>] [bssid <BSSID>] [name <name>]\n" " [--private] [--nowait] [--timeout <timeout>]\n" #if WITH_WIMAX - " wimax [list [iface <iface>] [nsp <name>]]\n\n" + " wimax [list [iface <iface>] [nsp <name>]]\n" #endif + "\n" )); } @@ -306,6 +308,8 @@ device_type_to_string (NMDevice *device) return NM_SETTING_BOND_SETTING_NAME; case NM_DEVICE_TYPE_VLAN: return NM_SETTING_VLAN_SETTING_NAME; + case NM_DEVICE_TYPE_BRIDGE: + return NM_SETTING_BRIDGE_SETTING_NAME; default: return _("Unknown"); } @@ -423,11 +427,13 @@ detail_access_point (gpointer data, gpointer user_data) if (security_str->len > 0) g_string_truncate (security_str, security_str->len-1); /* Chop off last space */ - ap_name = g_strdup_printf ("AP%d", info->index++); /* AP */ + ap_name = g_strdup_printf ("AP[%d]", info->index++); /* AP */ info->nmc->allowed_fields[0].value = ap_name; info->nmc->allowed_fields[1].value = ssid_str; info->nmc->allowed_fields[2].value = bssid; - info->nmc->allowed_fields[3].value = mode == NM_802_11_MODE_ADHOC ? _("Ad-Hoc") : mode == NM_802_11_MODE_INFRA ? _("Infrastructure") : _("Unknown"); + info->nmc->allowed_fields[3].value = mode == NM_802_11_MODE_ADHOC ? _("Ad-Hoc") + : mode == NM_802_11_MODE_INFRA ? _("Infrastructure") + : _("Unknown"); info->nmc->allowed_fields[4].value = freq_str; info->nmc->allowed_fields[5].value = bitrate_str; info->nmc->allowed_fields[6].value = strength_str; @@ -481,7 +487,7 @@ detail_wimax_nsp (NMWimaxNsp *nsp, NmCli *nmc, NMDevice *dev, int idx) } quality_str = g_strdup_printf ("%u", nm_wimax_nsp_get_signal_quality (nsp)); - nsp_name = g_strdup_printf ("NSP%d", idx); /* NSP */ + nsp_name = g_strdup_printf ("NSP[%d]", idx); /* NSP */ nmc->allowed_fields[0].value = nsp_name; nmc->allowed_fields[1].value = nm_wimax_nsp_get_name (nsp); @@ -587,6 +593,8 @@ show_device_info (gpointer data, gpointer user_data) hwaddr = nm_device_bond_get_hw_address (NM_DEVICE_BOND (device)); else if (NM_IS_DEVICE_VLAN (device)) hwaddr = nm_device_vlan_get_hw_address (NM_DEVICE_VLAN (device)); + else if (NM_IS_DEVICE_BRIDGE (device)) + hwaddr = nm_device_bridge_get_hw_address (NM_DEVICE_BRIDGE (device)); state_str = g_strdup_printf ("%d (%s)", state, nmc_device_state_to_string (state)); reason_str = g_strdup_printf ("%d (%s)", reason, nmc_device_reason_to_string (reason)); @@ -973,7 +981,7 @@ do_devices_list (NmCli *nmc, int argc, char **argv) iface_specified = TRUE; if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1116,7 +1124,7 @@ do_device_disconnect (NmCli *nmc, int argc, char **argv) iface_specified = TRUE; if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1126,7 +1134,7 @@ do_device_disconnect (NmCli *nmc, int argc, char **argv) wait = FALSE; } else if (strcmp (*argv, "--timeout") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1244,7 +1252,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) while (argc > 0) { if (strcmp (*argv, "iface") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1252,7 +1260,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) } else if (strcmp (*argv, "bssid") == 0 || strcmp (*argv, "hwaddr") == 0) { /* hwaddr is deprecated and will be removed later */ if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1616,14 +1624,14 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv) while (argc > 0) { if (strcmp (*argv, "iface") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } iface = *argv; } else if (strcmp (*argv, "bssid") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1637,14 +1645,14 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv) } } else if (strcmp (*argv, "password") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } password = *argv; } else if (strcmp (*argv, "wep-key-type") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1661,7 +1669,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv) } } else if (strcmp (*argv, "name") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1672,7 +1680,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv) wait = FALSE; } else if (strcmp (*argv, "--timeout") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -1893,14 +1901,14 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv) while (argc > 0) { if (strcmp (*argv, "iface") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } iface = *argv; } else if (strcmp (*argv, "nsp") == 0) { if (next_arg (&argc, &argv) != 0) { - g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *argv); + g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; goto error; } @@ -2102,10 +2110,13 @@ do_devices (NmCli *nmc, int argc, char **argv) nmc->return_value = do_device_wimax (nmc, argc-1, argv+1); } #endif - else if (strcmp (*argv, "help") == 0) { + else if ( matches (*argv, "help") == 0 + || (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0) + || (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) { usage (); } else { + usage (); g_string_printf (nmc->return_text, _("Error: 'dev' command '%s' is not valid."), *argv); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; } diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c index 927eadd1..8fb5f6cf 100644 --- a/cli/src/network-manager.c +++ b/cli/src/network-manager.c @@ -578,10 +578,13 @@ do_network_manager (NmCli *nmc, int argc, char **argv) } } #endif - else if (strcmp (*argv, "help") == 0) { + else if ( matches (*argv, "help") == 0 + || (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0) + || (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) { usage (); } else { + usage (); g_string_printf (nmc->return_text, _("Error: 'nm' command '%s' is not valid."), *argv); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; } diff --git a/cli/src/nmcli.c b/cli/src/nmcli.c index a7888aaa..757ff92b 100644 --- a/cli/src/nmcli.c +++ b/cli/src/nmcli.c @@ -16,7 +16,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2010 - 2011 Red Hat, Inc. + * (C) Copyright 2010 - 2012 Red Hat, Inc. */ /* Generated configuration file */ @@ -73,7 +73,8 @@ static void usage (const char *prog_name) { fprintf (stderr, - _("Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n\n" + _("Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n" + "\n" "OPTIONS\n" " -t[erse] terse output\n" " -p[retty] pretty output\n" @@ -82,11 +83,13 @@ usage (const char *prog_name) " -e[scape] yes|no escape columns separators in values\n" " -n[ocheck] don't check nmcli and NetworkManager versions\n" " -v[ersion] show program version\n" - " -h[elp] print this help\n\n" + " -h[elp] print this help\n" + "\n" "OBJECT\n" - " nm NetworkManager status\n" - " con NetworkManager connections\n" - " dev devices managed by NetworkManager\n\n"), + " nm NetworkManager's status\n" + " c[onnection] NetworkManager's connections\n" + " d[evice] devices managed by NetworkManager\n" + "\n"), prog_name); } @@ -102,8 +105,8 @@ static const struct cmd { NMCResultCode (*func) (NmCli *nmc, int argc, char **argv); } nmcli_cmds[] = { { "nm", do_network_manager }, - { "con", do_connections }, - { "dev", do_devices }, + { "connection", do_connections }, + { "device", do_devices }, { "help", do_help }, { 0 } }; diff --git a/cli/src/settings.c b/cli/src/settings.c index 7b7077ee..407ca8ad 100644 --- a/cli/src/settings.c +++ b/cli/src/settings.c @@ -42,6 +42,10 @@ static NmcOutputField nmc_fields_setting_connection[] = { SETTING_FIELD (NM_SETTING_CONNECTION_TIMESTAMP, 10), /* 5 */ SETTING_FIELD (NM_SETTING_CONNECTION_READ_ONLY, 10), /* 6 */ SETTING_FIELD (NM_SETTING_CONNECTION_PERMISSIONS, 30), /* 7 */ + SETTING_FIELD (NM_SETTING_CONNECTION_ZONE, 10), /* 8 */ + SETTING_FIELD (NM_SETTING_CONNECTION_MASTER, 20), /* 9 */ + SETTING_FIELD (NM_SETTING_CONNECTION_SLAVE_TYPE, 20), /* 10 */ + SETTING_FIELD (NM_SETTING_CONNECTION_SECONDARIES, 40), /* 11 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTING_CONNECTION_ALL "name"","\ @@ -51,7 +55,11 @@ static NmcOutputField nmc_fields_setting_connection[] = { NM_SETTING_CONNECTION_AUTOCONNECT","\ NM_SETTING_CONNECTION_TIMESTAMP","\ NM_SETTING_CONNECTION_READ_ONLY","\ - NM_SETTING_CONNECTION_PERMISSIONS + NM_SETTING_CONNECTION_PERMISSIONS","\ + NM_SETTING_CONNECTION_ZONE","\ + NM_SETTING_CONNECTION_MASTER","\ + NM_SETTING_CONNECTION_SLAVE_TYPE","\ + NM_SETTING_CONNECTION_SECONDARIES #define NMC_FIELDS_SETTING_CONNECTION_COMMON NMC_FIELDS_SETTING_CONNECTION_ALL /* Available fields for NM_SETTING_WIRED_SETTING_NAME */ @@ -510,6 +518,42 @@ static NmcOutputField nmc_fields_setting_vlan[] = { NM_SETTING_VLAN_EGRESS_PRIORITY_MAP #define NMC_FIELDS_SETTING_VLAN_COMMON NMC_FIELDS_SETTING_VLAN_ALL +/* Available fields for NM_SETTING_BRIDGE_SETTING_NAME */ +static NmcOutputField nmc_fields_setting_bridge[] = { + SETTING_FIELD ("name", 8), /* 0 */ + SETTING_FIELD (NM_SETTING_BRIDGE_INTERFACE_NAME, 15), /* 1 */ + SETTING_FIELD (NM_SETTING_BRIDGE_STP, 5), /* 2 */ + SETTING_FIELD (NM_SETTING_BRIDGE_PRIORITY, 6), /* 3 */ + SETTING_FIELD (NM_SETTING_BRIDGE_FORWARD_DELAY, 6), /* 4 */ + SETTING_FIELD (NM_SETTING_BRIDGE_HELLO_TIME, 6), /* 5 */ + SETTING_FIELD (NM_SETTING_BRIDGE_MAX_AGE, 6), /* 6 */ + SETTING_FIELD (NM_SETTING_BRIDGE_AGEING_TIME, 6), /* 7 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_SETTING_BRIDGE_ALL "name"","\ + NM_SETTING_BRIDGE_INTERFACE_NAME","\ + NM_SETTING_BRIDGE_STP","\ + NM_SETTING_BRIDGE_PRIORITY","\ + NM_SETTING_BRIDGE_FORWARD_DELAY","\ + NM_SETTING_BRIDGE_HELLO_TIME","\ + NM_SETTING_BRIDGE_MAX_AGE","\ + NM_SETTING_BRIDGE_AGEING_TIME +#define NMC_FIELDS_SETTING_BRIDGE_COMMON NMC_FIELDS_SETTING_BRIDGE_ALL + +/* Available fields for NM_SETTING_BRIDGE_PORT_SETTING_NAME */ +static NmcOutputField nmc_fields_setting_bridge_port[] = { + SETTING_FIELD ("name", 8), /* 0 */ + SETTING_FIELD (NM_SETTING_BRIDGE_PORT_PRIORITY, 10), /* 1 */ + SETTING_FIELD (NM_SETTING_BRIDGE_PORT_PATH_COST, 12), /* 2 */ + SETTING_FIELD (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, 15), /* 3 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_SETTING_BRIDGE_PORT_ALL "name"","\ + NM_SETTING_BRIDGE_PORT_PRIORITY","\ + NM_SETTING_BRIDGE_PORT_PATH_COST","\ + NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE +#define NMC_FIELDS_SETTING_BRIDGE_PORT_COMMON NMC_FIELDS_SETTING_BRIDGE_PORT_ALL + static char * wep_key_type_to_string (NMWepKeyType type) @@ -663,6 +707,7 @@ setting_connection_details (NMSettingConnection *s_con, NmCli *nmc) const char *perm_item; const char *perm_type; GString *perm = NULL; + GString *secondaries = NULL; int i; guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; @@ -687,6 +732,15 @@ setting_connection_details (NMSettingConnection *s_con, NmCli *nmc) if (perm->len > 0) g_string_truncate (perm, perm->len-1); /* remove trailing , */ + /* get secondaries */ + secondaries = g_string_new (NULL); + for (i = 0; i < nm_setting_connection_get_num_secondaries (s_con); i++) { + const char *sec_uuid = nm_setting_connection_get_secondary (s_con, i); + g_string_append_printf (secondaries, "%s,", sec_uuid); + } + if (secondaries->len > 0) + g_string_truncate (secondaries, secondaries->len-1); /* remove trailing , */ + nmc->allowed_fields[0].value = NM_SETTING_CONNECTION_SETTING_NAME; nmc->allowed_fields[1].value = nm_setting_connection_get_id (s_con); nmc->allowed_fields[2].value = nm_setting_connection_get_uuid (s_con); @@ -695,12 +749,17 @@ setting_connection_details (NMSettingConnection *s_con, NmCli *nmc) nmc->allowed_fields[5].value = timestamp_str; nmc->allowed_fields[6].value = nm_setting_connection_get_read_only (s_con) ? ("yes") : _("no"); nmc->allowed_fields[7].value = perm->str; + nmc->allowed_fields[8].value = nm_setting_connection_get_zone (s_con); + nmc->allowed_fields[9].value = nm_setting_connection_get_master (s_con); + nmc->allowed_fields[10].value = nm_setting_connection_get_slave_type (s_con); + nmc->allowed_fields[11].value = secondaries->str; nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ g_free (timestamp_str); g_string_free (perm, TRUE); + g_string_free (secondaries, TRUE); return TRUE; } @@ -1789,3 +1848,67 @@ setting_adsl_details (NMSettingAdsl *s_adsl, NmCli *nmc) return TRUE; } +gboolean +setting_bridge_details (NMSettingBridge *s_bridge, NmCli *nmc) +{ + guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; + guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; + guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; + + g_return_val_if_fail (NM_IS_SETTING_BRIDGE (s_bridge), FALSE); + + nmc->allowed_fields = nmc_fields_setting_bridge; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_BRIDGE_ALL, nmc->allowed_fields, NULL); + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */ + + nmc->allowed_fields[0].value = NM_SETTING_BRIDGE_SETTING_NAME; + nmc->allowed_fields[1].value = nm_setting_bridge_get_interface_name (s_bridge); + nmc->allowed_fields[2].value = nm_setting_bridge_get_stp (s_bridge) ? _("yes") : _("no"); + nmc->allowed_fields[3].value = g_strdup_printf ("%u", nm_setting_bridge_get_priority (s_bridge)); + nmc->allowed_fields[4].value = g_strdup_printf ("%u", nm_setting_bridge_get_forward_delay (s_bridge)); + nmc->allowed_fields[5].value = g_strdup_printf ("%u", nm_setting_bridge_get_hello_time (s_bridge)); + nmc->allowed_fields[6].value = g_strdup_printf ("%u", nm_setting_bridge_get_max_age (s_bridge)); + nmc->allowed_fields[7].value = g_strdup_printf ("%u", nm_setting_bridge_get_ageing_time (s_bridge)); + + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ + + /* free values */ + g_free ((char*) nmc->allowed_fields[3].value); + g_free ((char*) nmc->allowed_fields[4].value); + g_free ((char*) nmc->allowed_fields[5].value); + g_free ((char*) nmc->allowed_fields[6].value); + g_free ((char*) nmc->allowed_fields[7].value); + + return TRUE; +} + +gboolean +setting_bridge_port_details (NMSettingBridgePort *s_bridge_port, NmCli *nmc) +{ + guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; + guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; + guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; + + g_return_val_if_fail (NM_IS_SETTING_BRIDGE_PORT (s_bridge_port), FALSE); + + nmc->allowed_fields = nmc_fields_setting_bridge_port; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_BRIDGE_PORT_ALL, nmc->allowed_fields, NULL); + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */ + + nmc->allowed_fields[0].value = NM_SETTING_BRIDGE_PORT_SETTING_NAME; + nmc->allowed_fields[1].value = g_strdup_printf ("%u", nm_setting_bridge_port_get_priority (s_bridge_port)); + nmc->allowed_fields[2].value = g_strdup_printf ("%u", nm_setting_bridge_port_get_path_cost (s_bridge_port)); + nmc->allowed_fields[3].value = nm_setting_bridge_port_get_hairpin_mode (s_bridge_port) ? _("yes") : _("no"); + + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ + + g_free ((char*) nmc->allowed_fields[1].value); + g_free ((char*) nmc->allowed_fields[2].value); + + return TRUE; +} + diff --git a/cli/src/settings.h b/cli/src/settings.h index 3309bd0a..2a64052a 100644 --- a/cli/src/settings.h +++ b/cli/src/settings.h @@ -39,6 +39,8 @@ #include <nm-setting-wimax.h> #include <nm-setting-infiniband.h> #include <nm-setting-bond.h> +#include <nm-setting-bridge.h> +#include <nm-setting-bridge-port.h> #include <nm-setting-vlan.h> #include "nmcli.h" @@ -65,5 +67,7 @@ gboolean setting_infiniband_details (NMSettingInfiniband *s_infiniband, NmCli *n gboolean setting_bond_details (NMSettingBond *s_bond, NmCli *nmc); gboolean setting_vlan_details (NMSettingVlan *s_vlan, NmCli *nmc); gboolean setting_adsl_details (NMSettingAdsl *s_adsl, NmCli *nmc); +gboolean setting_bridge_details (NMSettingBridge *s_bridge, NmCli *nmc); +gboolean setting_bridge_port_details (NMSettingBridgePort *s_bridge_port, NmCli *nmc); #endif /* NMC_SETTINGS_H */ diff --git a/cli/src/utils.c b/cli/src/utils.c index 4054fe13..ab0a5dba 100644 --- a/cli/src/utils.c +++ b/cli/src/utils.c @@ -45,13 +45,15 @@ matches (const char *cmd, const char *pattern) int next_arg (int *argc, char ***argv) { - if (*argc <= 1) { - return -1; - } - else { + int arg_num = *argc; + + if (arg_num > 0) { (*argc)--; (*argv)++; } + if (arg_num <= 1) + return -1; + return 0; } |