Mercurial > illumos > illumos-gate
changeset 13035:7a57e737278a
6902374 NDMP : Backup/restore fails with error 'Undetermined network port', if DNS is not proper
6888462 NDMP: ndmp bytes to/from disk and ndmpstat in error when seeking on tape
6973946 snapname needs to be filled in for "recursive" case
author | Reza Sabdar <Reza.Sabdar@Sun.COM> |
---|---|
date | Thu, 05 Aug 2010 14:45:06 -0400 |
parents | 03fd5152c466 |
children | 9c1800b4023e |
files | usr/src/cmd/ndmpd/Makefile usr/src/cmd/ndmpd/ndmp/ndmpd.h usr/src/cmd/ndmpd/ndmp/ndmpd_chkpnt.c usr/src/cmd/ndmpd/ndmp/ndmpd_comm.c usr/src/cmd/ndmpd/ndmp/ndmpd_util.c usr/src/cmd/ndmpd/tlm/tlm_restore_writer.c |
diffstat | 6 files changed, 46 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/ndmpd/Makefile Thu Aug 05 11:13:43 2010 -0700 +++ b/usr/src/cmd/ndmpd/Makefile Thu Aug 05 14:45:06 2010 -0400 @@ -65,7 +65,7 @@ # argument used inconsistently LINTFLAGS += -xerroff=E_INCONS_ARG_USED2 -LDLIBS += -lsocket -lnsl -lzfs -lsec -lndmp -lmd5 -lnvpair -lumem -lbsm -lgen -lcmdutils +LDLIBS += -lsocket -lnsl -lzfs -lsec -lndmp -lmd5 -lnvpair -lumem -lbsm -lgen -lcmdutils -linetutil OBJS= \ $(NDMP_DIR)/ndmp_xdr.o \
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd.h Thu Aug 05 11:13:43 2010 -0700 +++ b/usr/src/cmd/ndmpd/ndmp/ndmpd.h Thu Aug 05 14:45:06 2010 -0400 @@ -1032,6 +1032,7 @@ extern int tcp_get_peer(int, unsigned int *, int *); extern char *gethostaddr(void); +extern char *get_default_nic_addr(void); extern int tlm_init(void); extern int snapshot_create(char *, char *, boolean_t, boolean_t);
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd_chkpnt.c Thu Aug 05 11:13:43 2010 -0700 +++ b/usr/src/cmd/ndmpd/ndmp/ndmpd_chkpnt.c Thu Aug 05 14:45:06 2010 -0400 @@ -288,6 +288,7 @@ char snapname[ZFS_MAXNAMELEN]; zfs_handle_t *zhp; zfs_type_t ztype; + char *namep; int err; if (zfs_err) @@ -298,25 +299,27 @@ if (recursive) { ztype = ZFS_TYPE_VOLUME | ZFS_TYPE_FILESYSTEM; + namep = volname; } else { (void) snprintf(snapname, ZFS_MAXNAMELEN, "%s@%s", volname, jname); + namep = snapname; ztype = ZFS_TYPE_SNAPSHOT; } (void) mutex_lock(&zlib_mtx); if (hold && - snapshot_release(volname, snapname, jname, recursive) != 0) { + snapshot_release(volname, namep, jname, recursive) != 0) { NDMP_LOG(LOG_DEBUG, "snapshot_destroy: %s release failed (err=%d): %s", - snapname, errno, libzfs_error_description(zlibh)); + namep, errno, libzfs_error_description(zlibh)); (void) mutex_unlock(&zlib_mtx); return (-1); } - if ((zhp = zfs_open(zlibh, snapname, ztype)) == NULL) { + if ((zhp = zfs_open(zlibh, namep, ztype)) == NULL) { NDMP_LOG(LOG_DEBUG, "snapshot_destroy: open %s failed", - snapname); + namep); (void) mutex_unlock(&zlib_mtx); return (-1); } @@ -329,7 +332,7 @@ if (err) { NDMP_LOG(LOG_ERR, "%s (recursive destroy: %d): %d; %s; %s", - snapname, + namep, recursive, libzfs_errno(zlibh), libzfs_error_action(zlibh),
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd_comm.c Thu Aug 05 11:13:43 2010 -0700 +++ b/usr/src/cmd/ndmpd/ndmp/ndmpd_comm.c Thu Aug 05 14:45:06 2010 -0400 @@ -49,6 +49,7 @@ #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <libinetutil.h> #include "ndmpd.h" #include "ndmpd_common.h" @@ -1503,6 +1504,32 @@ return (inet_ntoa(in)); } + +/* + * get_default_nic_addr + * + * Get the IP address of the default NIC + */ +char * +get_default_nic_addr(void) +{ + struct ifaddrlist *al = NULL; + char errmsg[ERRBUFSIZE]; + struct in_addr addr; + int nifs; + + nifs = ifaddrlist(&al, AF_INET, LIFC_EXTERNAL_SOURCE, errmsg); + if (nifs <= 0) + return (NULL); + + /* pick the first interface's address */ + addr = al[0].addr.addr; + free(al); + + return (inet_ntoa(IN_ADDR(addr.s_addr))); +} + + /* * ndmpd_audit_backup *
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c Thu Aug 05 11:13:43 2010 -0700 +++ b/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c Thu Aug 05 14:45:06 2010 -0400 @@ -2125,11 +2125,18 @@ int sd; struct sockaddr_in sin; + /* Try the user's prefered NIC IP address */ p = ndmpd_get_prop(NDMP_MOVER_NIC); + /* Try host's IP address */ if (!p || *p == 0) p = gethostaddr(); + /* Try default NIC's IP address (if DNS failed) */ + if (!p) + p = get_default_nic_addr(); + + /* Fail if no IP can be obtained */ if (!p) { NDMP_LOG(LOG_ERR, "Undetermined network port."); return (-1);
--- a/usr/src/cmd/ndmpd/tlm/tlm_restore_writer.c Thu Aug 05 11:13:43 2010 -0700 +++ b/usr/src/cmd/ndmpd/tlm/tlm_restore_writer.c Thu Aug 05 14:45:06 2010 -0400 @@ -1254,9 +1254,9 @@ write_size = min(size, actual_size); if (want_this_file) { write_size = write(*fp, rec, write_size); + NS_ADD(wdisk, write_size); + NS_INC(wfile); } - NS_ADD(wdisk, write_size); - NS_INC(wfile); size -= write_size; } }