1 /* 2 * Copyright (c) 2011-2012 The DragonFly Project. All rights reserved. 3 * 4 * This code is derived from software contributed to The DragonFly Project 5 * by Matthew Dillon <dillon@dragonflybsd.org> 6 * by Venkatesh Srinivas <vsrinivas@dragonflybsd.org> 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in 16 * the documentation and/or other materials provided with the 17 * distribution. 18 * 3. Neither the name of The DragonFly Project nor the names of its 19 * contributors may be used to endorse or promote products derived 20 * from this software without specific, prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 27 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 30 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 32 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36 #include "hammer2.h" 37 38 int 39 cmd_remote_connect(const char *sel_path, const char *url) 40 { 41 hammer2_ioc_remote_t remote; 42 int ecode = 0; 43 int fd; 44 45 if ((fd = hammer2_ioctl_handle(sel_path)) < 0) 46 return(1); 47 bzero(&remote, sizeof(remote)); 48 remote.copyid = -1; 49 remote.fd = -1; 50 if (strlen(url) >= sizeof(remote.copy1.path)) { 51 fprintf(stderr, "hammer2: connect: Path too long\n"); 52 close(fd); 53 return(1); 54 } 55 snprintf(remote.copy1.path, sizeof(remote.copy1.path), "%s", url); 56 if (ioctl(fd, HAMMER2IOC_REMOTE_ADD, &remote) < 0) { 57 perror("ioctl"); 58 ecode = 1; 59 } 60 close(fd); 61 return ecode; 62 } 63 64 int 65 cmd_remote_disconnect(const char *sel_path, const char *url) 66 { 67 hammer2_ioc_remote_t remote; 68 int ecode = 0; 69 int fd; 70 71 if ((fd = hammer2_ioctl_handle(sel_path)) < 0) 72 return(1); 73 bzero(&remote, sizeof(remote)); 74 remote.copyid = -1; 75 remote.fd = -1; 76 if (strlen(url) >= sizeof(remote.copy1.path)) { 77 fprintf(stderr, "hammer2: disconnect: Path too long\n"); 78 close(fd); 79 return(1); 80 } 81 snprintf(remote.copy1.path, sizeof(remote.copy1.path), "%s", url); 82 if (ioctl(fd, HAMMER2IOC_REMOTE_DEL, &remote) < 0) { 83 perror("ioctl"); 84 ecode = 1; 85 } 86 close(fd); 87 return ecode; 88 } 89 90 int 91 cmd_remote_status(const char *sel_path, int all_opt __unused) 92 { 93 hammer2_ioc_remote_t remote; 94 int ecode = 0; 95 int count = 0; 96 int fd; 97 98 if ((fd = hammer2_ioctl_handle(sel_path)) < 0) 99 return(1); 100 bzero(&remote, sizeof(remote)); 101 102 while ((remote.copyid = remote.nextid) >= 0) { 103 if (ioctl(fd, HAMMER2IOC_REMOTE_SCAN, &remote) < 0) { 104 perror("ioctl"); 105 ecode = 1; 106 break; 107 } 108 if (remote.copy1.copyid == 0) 109 continue; 110 if (count == 0) 111 printf("CPYID LABEL STATUS PATH\n"); 112 printf("%5d %-15s %c%c%c.%02x %s\n", 113 remote.copy1.copyid, 114 remote.copy1.label, 115 '-', '-', '-', 116 remote.copy1.priority, 117 remote.copy1.path); 118 ++count; 119 } 120 if (count == 0) 121 printf("No linkages found\n"); 122 return (ecode); 123 } 124