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((char*)remote.copy1.path, sizeof(remote.copy1.path), "%s", 56 url); 57 if (ioctl(fd, HAMMER2IOC_REMOTE_ADD, &remote) < 0) { 58 perror("ioctl"); 59 ecode = 1; 60 } 61 close(fd); 62 return ecode; 63 } 64 65 int 66 cmd_remote_disconnect(const char *sel_path, const char *url) 67 { 68 hammer2_ioc_remote_t remote; 69 int ecode = 0; 70 int fd; 71 72 if ((fd = hammer2_ioctl_handle(sel_path)) < 0) 73 return(1); 74 bzero(&remote, sizeof(remote)); 75 remote.copyid = -1; 76 remote.fd = -1; 77 if (strlen(url) >= sizeof(remote.copy1.path)) { 78 fprintf(stderr, "hammer2: disconnect: Path too long\n"); 79 close(fd); 80 return(1); 81 } 82 snprintf((char*)remote.copy1.path, sizeof(remote.copy1.path), "%s", 83 url); 84 if (ioctl(fd, HAMMER2IOC_REMOTE_DEL, &remote) < 0) { 85 perror("ioctl"); 86 ecode = 1; 87 } 88 close(fd); 89 return ecode; 90 } 91 92 int 93 cmd_remote_status(const char *sel_path, int all_opt __unused) 94 { 95 hammer2_ioc_remote_t remote; 96 int ecode = 0; 97 int count = 0; 98 int fd; 99 100 if ((fd = hammer2_ioctl_handle(sel_path)) < 0) 101 return(1); 102 bzero(&remote, sizeof(remote)); 103 104 while ((remote.copyid = remote.nextid) >= 0) { 105 if (ioctl(fd, HAMMER2IOC_REMOTE_SCAN, &remote) < 0) { 106 perror("ioctl"); 107 ecode = 1; 108 break; 109 } 110 if (remote.copy1.copyid == 0) 111 continue; 112 if (count == 0) 113 printf("CPYID LABEL STATUS PATH\n"); 114 printf("%5d %-15s %c%c%c.%02x %s\n", 115 remote.copy1.copyid, 116 remote.copy1.label, 117 '-', '-', '-', 118 remote.copy1.priority, 119 remote.copy1.path); 120 ++count; 121 } 122 if (count == 0) 123 printf("No linkages found\n"); 124 return (ecode); 125 } 126