// $Id: vreboot.c 19 2003-09-30 20:16:53Z ensc $ // Copyright (C) 2003 Enrico Scholz // based on vreboot.cc by Jacques Gelinas // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2, or (at your option) // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /* Used to send a reboot message to the reboot manager. It opens /dev/reboot and write "reboot\n". */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include /* Connect to a unix domain socket */ static int vreboot_connect (const char *sockpath, bool showerror) { int ret = -1; int fd = socket (AF_UNIX,SOCK_STREAM,0); if (fd == -1){ if (showerror) perror("socket client"); }else{ struct sockaddr_un un; int s; un.sun_family = AF_UNIX; strcpy (un.sun_path,sockpath); s = connect(fd,(struct sockaddr*)&un,sizeof(un)); if (s == -1){ if (showerror) fprintf (stderr,"connect %s (%s)\n" ,sockpath,strerror(errno)); }else{ ret = fd; } } return ret; } static void usage() { fprintf (stderr,"vreboot version %s\n",VERSION); fprintf (stderr,"\n"); fprintf (stderr,"vreboot [ --socket path ]\n"); fprintf (stderr,"vhalt [ --socket path ]\n"); fprintf (stderr,"vreboot request a reboot or a halt of a virtual server\n"); } int main (int argc, char *argv[]) { int ret = -1; int i; const char *sockpath = "/dev/reboot"; for (i=1; i