diff -uNr netmgmt-1.1.0/cli/netmgrcli.c netmgmt-1.1.0-2/cli/netmgrcli.c --- netmgmt-1.1.0/cli/netmgrcli.c 2017-03-11 11:58:08.000000000 +0000 +++ netmgmt-1.1.0-2/cli/netmgrcli.c 2017-04-18 22:12:32.028012184 +0000 @@ -1116,89 +1116,6 @@ } -static struct option fwRuleOptions[] = -{ - {"add", no_argument, 0, 'a'}, - {"del", no_argument, 0, 'd'}, - {"get", no_argument, 0, 'g'}, - {"rule", required_argument, 0, 'r'}, - {0, 0, 0, 0} -}; - -static uint32_t -cli_fw_rule( - int argc, - char **argv, - PNETMGR_CMD pCmd - ) -{ - uint32_t err = 0, valid_rule = 0; - int nOptionIndex = 0, nOption = 0; - CMD_OP op = OP_INVALID; - - opterr = 0; - optind = 1; - while (1) - { - nOption = getopt_long(argc, - argv, - "adgr:", - fwRuleOptions, - &nOptionIndex); - if (nOption == -1) - break; - - switch(nOption) - { - case 'a': - op = OP_ADD; - break; - case 'd': - op = OP_DEL; - break; - case 'g': - op = OP_GET; - break; - case 'r': - if (strlen(optarg) > 0) - { - err = netmgrcli_alloc_keyvalue("rule", optarg, pCmd); - valid_rule = 1; - } - break; - case '?': - /* Option not handled here. Ignore. */ - break; - } - bail_on_error(err); - } - - if ((op == OP_INVALID) || - (((op == OP_DEL) || (op == OP_ADD)) && (valid_rule == 0))) - { - err = EDOM; - bail_on_error(err); - } - - pCmd->id = CMD_FW_RULE; - pCmd->op = op; - -cleanup: - return err; - -error: - pCmd->op = OP_INVALID; - if(err == EDOM) - { - fprintf(stderr, - "Usage:\nfw_rule --get\n" - "fw_rule --add --rule <Firewall Rule>\n" - "fw_rule --del --rule <Firewall Rule>\n"); - } - goto cleanup; -} - - static struct option hostnameOptions[] = { {"set", no_argument, 0, 's'}, @@ -1646,35 +1563,35 @@ cli_link_info, "--set --interface <interface name> --mode <manual|auto> --state <up|down> " "--macaddr <mac_address> --mtu <mtu>", - "get or set link mac addr, mtu, state, mode per interface" + "get or set interface mac address, mtu, link state, or link mode" }, {"ip4_address", cli_ip4_address, "--set --interface <interface name> --mode <dhcp|static|none> " "--addr <IPv4Address/prefix> --gateway <default gateway>", - "get or set IPv4 address and default gateway for interface" + "get or set interface IPv4 address and optionally default gateway" }, {"ip6_address", cli_ip6_address, "--add|--del|--set --interface <interface name> --dhcp <1|0> --autoconf <1|0> " "--addrlist <IPv6 Address/Prefix list> --gateway <Default IPv6 gateway>", - "add or delete IPv6 addresses and default gateway for interface" + "add or delete IPv6 address(es) and optionally default gateway for interface" }, {"ip_route", cli_ip_route, "--add|--del --interface <interface name> --destination <Dest Network/Prefix> " "--gateway <Gateway IP Addr> -- metric <Route Metric> --scope <scope>", - "add or delete IP routes for the interface" + "add or delete static IP route for the interface" }, {"dns_servers", cli_dns_servers, "--set --mode <dhcp|static> --servers <DNS servers list>", - "get or set DNS mode, DNS servers list" + "get or set DNS mode, list of DNS servers" }, {"dns_domains", cli_dns_domains, "--set --del --add --domains <Domains list>", - "get or set DNS domains list" + "get or set list of DNS domains" }, {"dhcp_duid", cli_dhcp_duid, @@ -1691,26 +1608,21 @@ "--set --del --add --servers <NTP servers list>", "get or set NTP servers list" }, - {"fw_rule", - cli_fw_rule, - "--add --del --rule <Firewall Rule>", - "add or delete firewall rules" - }, {"hostname", cli_hostname, - "--set --name <Hostname>", - "get or set hostname" + "--set --name <hostname>", + "get or set system hostname" }, {"wait_for_link", cli_wait_for_link, "--interface <interface name> --timeout <timeout>", - "waits until timeout for the interface to up" + "wait for the interface to come up" }, {"wait_for_ip", cli_wait_for_ip, "--interface <interface name> --timeout <timeout> --addrtype <ipv4,ipv6," "static_ipv4,static_ipv6,dhcp_ipv4,dhcp_ipv6,auto_ipv6,link_local_ipv6>", - "waits until timeout for the interface to get a valid IP address" + "wait for the interface to acquire a valid IP address" }, {"error_info", cli_err_info, @@ -1721,7 +1633,7 @@ cli_net_info, "--set --object <ifname or filename> --paramname <param name> " "--paramvalue <value>", - "get or set network parameters" + "get or set network configuration parameters" }, }; @@ -1736,14 +1648,13 @@ fprintf(stdout, "For version: netmgr -v or netmgr --version\n"); fprintf(stdout, "\n"); - fprintf(stdout, "List of commands\n"); + fprintf(stdout, "List of commands:\n"); fprintf(stdout, "\n"); for(i = 0; i < nCmdCount; ++i) { - fprintf(stdout, "%s %s\t%s\n", + fprintf(stdout, "%s \t%s\n", cmdMap[i].pszCmdName, - cmdMap[i].pszParams, cmdMap[i].pszHelpMessage); } return 0; diff -uNr netmgmt-1.1.0/include/public/netmgr.h netmgmt-1.1.0-2/include/public/netmgr.h --- netmgmt-1.1.0/include/public/netmgr.h 2017-03-11 11:58:08.000000000 +0000 +++ netmgmt-1.1.0-2/include/public/netmgr.h 2017-04-18 22:12:32.028012184 +0000 @@ -15,6 +15,10 @@ #ifndef __NETMGR_H__ #define __NETMGR_H__ +#ifdef __cplusplus +extern "C" { +#endif + #define SET_FLAG(v, f) (v) = ((v) | (f)) #define CLEAR_FLAG(v, f) (v) = ((v) & ~(f)) #define TEST_FLAG(v, f) (((v) & (f)) != 0) @@ -198,6 +202,10 @@ uint32_t nmErrCode ); +uint32_t +nm_touch_network_conf_file( + const char *pszInterfaceName, + char **ppszFilename); /* * Interface configuration APIs @@ -574,6 +582,9 @@ uint32_t nm_reload_firewall_config(); +#ifdef __cplusplus +} +#endif #endif /* __NETMGR_H__ */ diff -uNr netmgmt-1.1.0/src/netmgr.c netmgmt-1.1.0-2/src/netmgr.c --- netmgmt-1.1.0/src/netmgr.c 2017-03-11 11:58:08.000000000 +0000 +++ netmgmt-1.1.0-2/src/netmgr.c 2017-04-18 22:12:32.036012184 +0000 @@ -608,6 +608,48 @@ goto cleanup; } +uint32_t +nm_touch_network_conf_file( + const char *pszInterfaceName, + char **ppszFilename) +{ + uint32_t err = 0; + char *pszCfgFileName = NULL; + int lockId; + + err = nm_acquire_write_lock(0, &lockId); + bail_on_error(err); + + if (!IS_VALID_INTERFACE_NAME(pszInterfaceName)) + { + err = NM_ERR_INVALID_INTERFACE; + bail_on_error(err); + } + + err = nm_get_network_conf_filename_for_update(pszInterfaceName, + &pszCfgFileName); + bail_on_error(err); + + if (ppszFilename != NULL) + { + *ppszFilename = pszCfgFileName; + } + else + { + netmgr_free(pszCfgFileName); + } + +cleanup: + nm_release_write_lock(lockId); + return err; +error: + if (ppszFilename != NULL) + { + *ppszFilename = NULL; + } + netmgr_free(pszCfgFileName); + goto cleanup; +} /* * Interface configuration APIs @@ -1311,9 +1353,12 @@ bail_on_error(err); } - err = netmgr_alloc_string_printf(&pszArpingCmd, "%s %s -I %s %s", - ARPING_COMMAND, pszCommandOptions, - pszInterfaceName, pszDestIPv4Addr); + err = netmgr_alloc_string_printf(&pszArpingCmd, + "%s %s -I %s %s", + ARPING_COMMAND, + pszCommandOptions, + pszInterfaceName, + pszDestIPv4Addr); bail_on_error(err); err = nm_run_command(pszArpingCmd); @@ -2912,8 +2957,8 @@ char **ppszIpAddrList = NULL, **ppszGwAddrList = NULL; size_t ipCount, gwCount; - if (!IS_VALID_INTERFACE_NAME(pszInterfaceName) || !pMode || - !ppszIPv4AddrPrefix || !ppszIPv4Gateway) + if (!IS_VALID_INTERFACE_NAME(pszInterfaceName) || + !(pMode || ppszIPv4AddrPrefix || ppszIPv4Gateway)) { err = NM_ERR_INVALID_PARAMETER; bail_on_error(err); @@ -3001,9 +3046,18 @@ bail_on_error(err); } - *pMode = ip4Mode; - *ppszIPv4AddrPrefix = pszIPv4AddrPrefix; - *ppszIPv4Gateway = pszIPv4Gateway; + if (pMode) + { + *pMode = ip4Mode; + } + if (ppszIPv4AddrPrefix) + { + *ppszIPv4AddrPrefix = pszIPv4AddrPrefix; + } + if (ppszIPv4Gateway) + { + *ppszIPv4Gateway = pszIPv4Gateway; + } cleanup: netmgr_list_free(ipCount, (void **)ppszIpAddrList); diff -uNr netmgmt-1.1.0/tools/netmgr/main.c netmgmt-1.1.0-2/tools/netmgr/main.c --- netmgmt-1.1.0/tools/netmgr/main.c 2017-03-11 11:58:08.000000000 +0000 +++ netmgmt-1.1.0-2/tools/netmgr/main.c 2017-04-18 22:12:32.048012185 +0000 @@ -1342,8 +1342,11 @@ netmgrcli_free_cmd(pCmd); return get_cli_error_code(err); error: - pszErrMsg = nm_get_error_info(err); - fprintf(stderr, "Error: %s\n", pszErrMsg); + if (err != EDOM) + { + pszErrMsg = nm_get_error_info(err); + fprintf(stderr, "Error: %s\n", pszErrMsg); + } goto cleanup; }