/* * Copyright (c) 1988 Regents of the University of California. * All rights reserved. * * This code is derived from software contributed to Berkeley by * Rick Adams. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Linux changes by Alan Cox 5/2/94: Copyright as above * Additional changes by David A. Holland 15-Jul-1996; copyright as above */ char copyright[] = "@(#) Copyright (c) 1988 Regents of the University of California.\n" "All rights reserved.\n"; /* * From: @(#)slattach.c 4.6 (Berkeley) 6/1/90 * Linux Port Alan Cox 1993 */ char rcsid[] = "$Id: slattach.c,v 1.1.1.1 2000/06/27 02:01:42 fwhite Exp $"; #include #include #include #include #include #include #include #include #include #include #include #include #define DEFAULT_BAUD 9600 static int slipdisc = N_SLIP; static char devname[32]; static int findspeed(int speed); int main(int argc, char *argv[]) { register int fd; register char *dev; struct termios tstate; int speed; int mode=0; int hflow=0; char *cmdname=argv[0]; if(argv[1]&&strcmp(argv[1],"-h")==0) { hflow=CRTSCTS; argv++;argc--; } if(argv[1]&&strcmp(argv[1],"-c")==0) { argv++;argc--; mode=1; } if(argv[1]&&strcmp(argv[1],"-6")==0) { mode=2; argv++;argc--; } if (argc < 2 || argc > 3) { fprintf(stderr, "usage: %s [-h] [-c] [-6] ttyname [baudrate]\n", cmdname); exit(1); } speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD); if (speed == 0) { fprintf(stderr, "unknown speed %s\n", argv[2]); exit(1); } dev=argv[1]; if (strncmp(_PATH_DEV, dev, sizeof(_PATH_DEV) - 1)) { (void)sprintf(devname, "%s/%s", _PATH_DEV, dev); dev = devname; } if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) { perror(dev); exit(1); } tstate.c_iflag=IGNBRK; tstate.c_oflag=0; tstate.c_cflag=speed|CS8|HUPCL|hflow; tstate.c_lflag=0; tstate.c_line=N_SLIP; if (ioctl(fd, TCSETS, &tstate) < 0) { perror("ioctl(TIOCSETP)"); exit(1); } if (ioctl(fd, TIOCSETD, &slipdisc) < 0) { perror("ioctl(TIOCSETD)"); exit(1); } if (ioctl(fd, SIOCSIFENCAP, &mode) <0) { perror("ioctl(SIOCSIFENCAP)"); } if (fork() > 0) exit(0); for (;;) sigpause(0L); } struct sg_spds { int sp_val, sp_name; } spds[] = { #ifdef B50 { 50, B50 }, #endif #ifdef B75 { 75, B75 }, #endif #ifdef B110 { 110, B110 }, #endif #ifdef B150 { 150, B150 }, #endif #ifdef B200 { 200, B200 }, #endif #ifdef B300 { 300, B300 }, #endif #ifdef B600 { 600, B600 }, #endif #ifdef B1200 { 1200, B1200 }, #endif #ifdef B1800 { 1800, B1800 }, #endif #ifdef B2000 { 2000, B2000 }, #endif #ifdef B2400 { 2400, B2400 }, #endif #ifdef B3600 { 3600, B3600 }, #endif #ifdef B4800 { 4800, B4800 }, #endif #ifdef B7200 { 7200, B7200 }, #endif #ifdef B9600 { 9600, B9600 }, #endif #ifdef EXTA { 19200, EXTA }, #endif #ifdef EXTB { 38400, EXTB }, #endif /* Added -fwhite, 18Oct99 */ #ifdef B57600 { 57600, B57600 }, #endif #ifdef B115200 { 115200, B115200 }, #endif #ifdef B230400 { 230400, B230400 }, #endif #ifdef B460800 { 460800, B460800 }, #endif { 0, 0 } }; static int findspeed(int speed) { register struct sg_spds *sp; sp = spds; while (sp->sp_val && sp->sp_val != speed) sp++; return (sp->sp_name); }