commit
93cd91fbda
|
@ -1,5 +1,7 @@
|
||||||
all: tunslip
|
all: tunslip
|
||||||
|
|
||||||
|
tunslip6: tools-utils.c tunslip6.c
|
||||||
|
|
||||||
gitclean:
|
gitclean:
|
||||||
@git clean -d -x -n ..
|
@git clean -d -x -n ..
|
||||||
@echo "Enter yes to delete these files";
|
@echo "Enter yes to delete these files";
|
||||||
|
|
161
tools/tools-utils.c
Normal file
161
tools/tools-utils.c
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015, SICS Swedish ICT
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* 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. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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.
|
||||||
|
*
|
||||||
|
* This file is part of the Contiki operating system.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tools-utils.h"
|
||||||
|
|
||||||
|
speed_t
|
||||||
|
select_baudrate(int baudrate) {
|
||||||
|
switch(baudrate) {
|
||||||
|
#ifdef B50
|
||||||
|
case 50:
|
||||||
|
return B50;
|
||||||
|
#endif
|
||||||
|
#ifdef B75
|
||||||
|
case 75:
|
||||||
|
return B75;
|
||||||
|
#endif
|
||||||
|
#ifdef B110
|
||||||
|
case 110:
|
||||||
|
return B110;
|
||||||
|
#endif
|
||||||
|
#ifdef B134
|
||||||
|
case 134:
|
||||||
|
return B134;
|
||||||
|
#endif
|
||||||
|
#ifdef B150
|
||||||
|
case 150:
|
||||||
|
return B150;
|
||||||
|
#endif
|
||||||
|
#ifdef B200
|
||||||
|
case 200:
|
||||||
|
return B200;
|
||||||
|
#endif
|
||||||
|
#ifdef B300
|
||||||
|
case 300:
|
||||||
|
return B300;
|
||||||
|
#endif
|
||||||
|
#ifdef B600
|
||||||
|
case 600:
|
||||||
|
return B600;
|
||||||
|
#endif
|
||||||
|
#ifdef B1200
|
||||||
|
case 1200:
|
||||||
|
return B1200;
|
||||||
|
#endif
|
||||||
|
#ifdef B1800
|
||||||
|
case 1800:
|
||||||
|
return B1800;
|
||||||
|
#endif
|
||||||
|
#ifdef B2400
|
||||||
|
case 2400:
|
||||||
|
return B2400;
|
||||||
|
#endif
|
||||||
|
#ifdef B4800
|
||||||
|
case 4800:
|
||||||
|
return B4800;
|
||||||
|
#endif
|
||||||
|
#ifdef B9600
|
||||||
|
case 9600:
|
||||||
|
return B9600;
|
||||||
|
#endif
|
||||||
|
#ifdef B19200
|
||||||
|
case 19200:
|
||||||
|
return B19200;
|
||||||
|
#endif
|
||||||
|
#ifdef B38400
|
||||||
|
case 38400:
|
||||||
|
return B38400;
|
||||||
|
#endif
|
||||||
|
#ifdef B57600
|
||||||
|
case 57600:
|
||||||
|
return B57600;
|
||||||
|
#endif
|
||||||
|
#ifdef B115200
|
||||||
|
case 115200:
|
||||||
|
return B115200;
|
||||||
|
#endif
|
||||||
|
#ifdef B230400
|
||||||
|
return B230400;
|
||||||
|
#endif
|
||||||
|
#ifdef B460800
|
||||||
|
case 460800:
|
||||||
|
return B460800;
|
||||||
|
#endif
|
||||||
|
#ifdef B500000
|
||||||
|
case 500000:
|
||||||
|
return B500000;
|
||||||
|
#endif
|
||||||
|
#ifdef B576000
|
||||||
|
case 576000:
|
||||||
|
return B576000;
|
||||||
|
#endif
|
||||||
|
#ifdef B921600
|
||||||
|
case 921600:
|
||||||
|
return B921600;
|
||||||
|
#endif
|
||||||
|
#ifdef B1000000
|
||||||
|
case 1000000:
|
||||||
|
return B1000000;
|
||||||
|
#endif
|
||||||
|
#ifdef B1152000
|
||||||
|
case 1152000:
|
||||||
|
return B1152000;
|
||||||
|
#endif
|
||||||
|
#ifdef B1500000
|
||||||
|
case 1500000:
|
||||||
|
return B1500000;
|
||||||
|
#endif
|
||||||
|
#ifdef B2000000
|
||||||
|
case 2000000:
|
||||||
|
return B2000000;
|
||||||
|
#endif
|
||||||
|
#ifdef B2500000
|
||||||
|
case 2500000:
|
||||||
|
return B2500000;
|
||||||
|
#endif
|
||||||
|
#ifdef B3000000
|
||||||
|
case 3000000:
|
||||||
|
return B3000000;
|
||||||
|
#endif
|
||||||
|
#ifdef B3500000
|
||||||
|
case 3500000:
|
||||||
|
return B3500000;
|
||||||
|
#endif
|
||||||
|
#ifdef B4000000
|
||||||
|
case 4000000:
|
||||||
|
return B4000000;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
79
tools/tools-utils.h
Normal file
79
tools/tools-utils.h
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015, SICS Swedish ICT
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* 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. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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.
|
||||||
|
*
|
||||||
|
* This file is part of the Contiki operating system.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TOOLS_UTILS
|
||||||
|
#define TOOLS_UTILS
|
||||||
|
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#if __APPLE__
|
||||||
|
#ifndef B460800
|
||||||
|
#define B460800 460800
|
||||||
|
#endif
|
||||||
|
#ifndef B500000
|
||||||
|
#define B500000 500000
|
||||||
|
#endif
|
||||||
|
#ifndef B576000
|
||||||
|
#define B576000 576000
|
||||||
|
#endif
|
||||||
|
#ifndef B921600
|
||||||
|
#define B921600 921600
|
||||||
|
#endif
|
||||||
|
#ifndef B1000000
|
||||||
|
#define B1000000 1000000
|
||||||
|
#endif
|
||||||
|
#ifndef B1152000
|
||||||
|
#define B1152000 1152000
|
||||||
|
#endif
|
||||||
|
#ifndef B1500000
|
||||||
|
#define B1500000 1500000
|
||||||
|
#endif
|
||||||
|
#ifndef B2000000
|
||||||
|
#define B2000000 2000000
|
||||||
|
#endif
|
||||||
|
#ifndef B2500000
|
||||||
|
#define B2500000 2500000
|
||||||
|
#endif
|
||||||
|
#ifndef B3000000
|
||||||
|
#define B3000000 3000000
|
||||||
|
#endif
|
||||||
|
#ifndef B3500000
|
||||||
|
#define B3500000 3500000
|
||||||
|
#endif
|
||||||
|
#ifndef B4000000
|
||||||
|
#define B4000000 4000000
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
speed_t select_baudrate(int baudrate);
|
||||||
|
|
||||||
|
#endif /* TOOLS_UTILS */
|
131
tools/tunslip6.c
131
tools/tunslip6.c
|
@ -56,13 +56,20 @@
|
||||||
|
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
|
|
||||||
|
#include "tools-utils.h"
|
||||||
|
|
||||||
|
#ifndef BAUDRATE
|
||||||
|
#define BAUDRATE B115200
|
||||||
|
#endif
|
||||||
|
speed_t b_rate = BAUDRATE;
|
||||||
|
|
||||||
int verbose = 1;
|
int verbose = 1;
|
||||||
const char *ipaddr;
|
const char *ipaddr;
|
||||||
const char *netmask;
|
const char *netmask;
|
||||||
int slipfd = 0;
|
int slipfd = 0;
|
||||||
uint16_t basedelay=0,delaymsec=0;
|
uint16_t basedelay=0,delaymsec=0;
|
||||||
uint32_t startsec,startmsec,delaystartsec,delaystartmsec;
|
uint32_t startsec,startmsec,delaystartsec,delaystartmsec;
|
||||||
int timestamp = 0, flowcontrol=0, showprogress=0;
|
int timestamp = 0, flowcontrol=0, showprogress=0, flowcontrol_xonxoff=0;
|
||||||
|
|
||||||
int ssystem(const char *fmt, ...)
|
int ssystem(const char *fmt, ...)
|
||||||
__attribute__((__format__ (__printf__, 1, 2)));
|
__attribute__((__format__ (__printf__, 1, 2)));
|
||||||
|
@ -75,6 +82,10 @@ void slip_send_char(int fd, unsigned char c);
|
||||||
|
|
||||||
char tundev[1024] = { "" };
|
char tundev[1024] = { "" };
|
||||||
|
|
||||||
|
/* IPv6 required minimum MTU */
|
||||||
|
#define MIN_DEVMTU 1500
|
||||||
|
int devmtu = MIN_DEVMTU;
|
||||||
|
|
||||||
int
|
int
|
||||||
ssystem(const char *fmt, ...) __attribute__((__format__ (__printf__, 1, 2)));
|
ssystem(const char *fmt, ...) __attribute__((__format__ (__printf__, 1, 2)));
|
||||||
|
|
||||||
|
@ -91,11 +102,15 @@ ssystem(const char *fmt, ...)
|
||||||
return system(cmd);
|
return system(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SLIP_END 0300
|
#define SLIP_END 0300
|
||||||
#define SLIP_ESC 0333
|
#define SLIP_ESC 0333
|
||||||
#define SLIP_ESC_END 0334
|
#define SLIP_ESC_END 0334
|
||||||
#define SLIP_ESC_ESC 0335
|
#define SLIP_ESC_ESC 0335
|
||||||
|
|
||||||
|
#define SLIP_ESC_XON 0336
|
||||||
|
#define SLIP_ESC_XOFF 0337
|
||||||
|
#define XON 17
|
||||||
|
#define XOFF 19
|
||||||
|
|
||||||
/* get sockaddr, IPv4 or IPv6: */
|
/* get sockaddr, IPv4 or IPv6: */
|
||||||
void *
|
void *
|
||||||
|
@ -287,6 +302,12 @@ serial_to_tun(FILE *inslip, int outfd)
|
||||||
case SLIP_ESC_ESC:
|
case SLIP_ESC_ESC:
|
||||||
c = SLIP_ESC;
|
c = SLIP_ESC;
|
||||||
break;
|
break;
|
||||||
|
case SLIP_ESC_XON:
|
||||||
|
c = XON;
|
||||||
|
break;
|
||||||
|
case SLIP_ESC_XOFF:
|
||||||
|
c = XOFF;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
default:
|
default:
|
||||||
|
@ -330,6 +351,22 @@ slip_send_char(int fd, unsigned char c)
|
||||||
slip_send(fd, SLIP_ESC);
|
slip_send(fd, SLIP_ESC);
|
||||||
slip_send(fd, SLIP_ESC_ESC);
|
slip_send(fd, SLIP_ESC_ESC);
|
||||||
break;
|
break;
|
||||||
|
case XON:
|
||||||
|
if(flowcontrol_xonxoff) {
|
||||||
|
slip_send(fd, SLIP_ESC);
|
||||||
|
slip_send(fd, SLIP_ESC_XON);
|
||||||
|
} else {
|
||||||
|
slip_send(fd, c);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XOFF:
|
||||||
|
if(flowcontrol_xonxoff) {
|
||||||
|
slip_send(fd, SLIP_ESC);
|
||||||
|
slip_send(fd, SLIP_ESC_XOFF);
|
||||||
|
} else {
|
||||||
|
slip_send(fd, c);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
slip_send(fd, c);
|
slip_send(fd, c);
|
||||||
break;
|
break;
|
||||||
|
@ -415,6 +452,22 @@ write_to_serial(int outfd, void *inbuf, int len)
|
||||||
slip_send(outfd, SLIP_ESC);
|
slip_send(outfd, SLIP_ESC);
|
||||||
slip_send(outfd, SLIP_ESC_ESC);
|
slip_send(outfd, SLIP_ESC_ESC);
|
||||||
break;
|
break;
|
||||||
|
case XON:
|
||||||
|
if(flowcontrol_xonxoff) {
|
||||||
|
slip_send(outfd, SLIP_ESC);
|
||||||
|
slip_send(outfd, SLIP_ESC_XON);
|
||||||
|
} else {
|
||||||
|
slip_send(outfd, p[i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XOFF:
|
||||||
|
if(flowcontrol_xonxoff) {
|
||||||
|
slip_send(outfd, SLIP_ESC);
|
||||||
|
slip_send(outfd, SLIP_ESC_XOFF);
|
||||||
|
} else {
|
||||||
|
slip_send(outfd, p[i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
slip_send(outfd, p[i]);
|
slip_send(outfd, p[i]);
|
||||||
break;
|
break;
|
||||||
|
@ -442,11 +495,6 @@ tun_to_serial(int infd, int outfd)
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef BAUDRATE
|
|
||||||
#define BAUDRATE B115200
|
|
||||||
#endif
|
|
||||||
speed_t b_rate = BAUDRATE;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
stty_telos(int fd)
|
stty_telos(int fd)
|
||||||
{
|
{
|
||||||
|
@ -467,6 +515,12 @@ stty_telos(int fd)
|
||||||
tty.c_cflag |= CRTSCTS;
|
tty.c_cflag |= CRTSCTS;
|
||||||
else
|
else
|
||||||
tty.c_cflag &= ~CRTSCTS;
|
tty.c_cflag &= ~CRTSCTS;
|
||||||
|
tty.c_iflag &= ~IXON;
|
||||||
|
if(flowcontrol_xonxoff) {
|
||||||
|
tty.c_iflag |= IXOFF | IXANY;
|
||||||
|
} else {
|
||||||
|
tty.c_iflag &= ~IXOFF & ~IXANY;
|
||||||
|
}
|
||||||
tty.c_cflag &= ~HUPCL;
|
tty.c_cflag &= ~HUPCL;
|
||||||
tty.c_cflag &= ~CLOCAL;
|
tty.c_cflag &= ~CLOCAL;
|
||||||
|
|
||||||
|
@ -609,7 +663,7 @@ ifconf(const char *tundev, const char *ipaddr)
|
||||||
{
|
{
|
||||||
#ifdef linux
|
#ifdef linux
|
||||||
if (timestamp) stamptime();
|
if (timestamp) stamptime();
|
||||||
ssystem("ifconfig %s inet `hostname` up", tundev);
|
ssystem("ifconfig %s inet `hostname` mtu %d up", tundev, devmtu);
|
||||||
if (timestamp) stamptime();
|
if (timestamp) stamptime();
|
||||||
ssystem("ifconfig %s add %s", tundev, ipaddr);
|
ssystem("ifconfig %s add %s", tundev, ipaddr);
|
||||||
|
|
||||||
|
@ -670,7 +724,7 @@ ifconf(const char *tundev, const char *ipaddr)
|
||||||
prefix = "64";
|
prefix = "64";
|
||||||
}
|
}
|
||||||
if (timestamp) stamptime();
|
if (timestamp) stamptime();
|
||||||
ssystem("ifconfig %s inet6 up", tundev );
|
ssystem("ifconfig %s inet6 mtu %d up", tundev, devmtu);
|
||||||
if (timestamp) stamptime();
|
if (timestamp) stamptime();
|
||||||
ssystem("ifconfig %s inet6 %s add", tundev, ipaddr );
|
ssystem("ifconfig %s inet6 %s add", tundev, ipaddr );
|
||||||
if (timestamp) stamptime();
|
if (timestamp) stamptime();
|
||||||
|
@ -679,7 +733,7 @@ ifconf(const char *tundev, const char *ipaddr)
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (timestamp) stamptime();
|
if (timestamp) stamptime();
|
||||||
ssystem("ifconfig %s inet `hostname` %s up", tundev, ipaddr);
|
ssystem("ifconfig %s inet `hostname` %s mtu %d up", tundev, ipaddr, devmtu);
|
||||||
if (timestamp) stamptime();
|
if (timestamp) stamptime();
|
||||||
ssystem("sysctl -w net.inet.ip.forwarding=1");
|
ssystem("sysctl -w net.inet.ip.forwarding=1");
|
||||||
#endif /* !linux */
|
#endif /* !linux */
|
||||||
|
@ -708,7 +762,7 @@ main(int argc, char **argv)
|
||||||
prog = argv[0];
|
prog = argv[0];
|
||||||
setvbuf(stdout, NULL, _IOLBF, 0); /* Line buffered output. */
|
setvbuf(stdout, NULL, _IOLBF, 0); /* Line buffered output. */
|
||||||
|
|
||||||
while((c = getopt(argc, argv, "B:HILPhs:t:v::d::a:p:T")) != -1) {
|
while((c = getopt(argc, argv, "B:HILPhXM:s:t:v::d::a:p:T")) != -1) {
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case 'B':
|
case 'B':
|
||||||
baudrate = atoi(optarg);
|
baudrate = atoi(optarg);
|
||||||
|
@ -718,10 +772,20 @@ main(int argc, char **argv)
|
||||||
flowcontrol=1;
|
flowcontrol=1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'X':
|
||||||
|
flowcontrol_xonxoff=1;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'L':
|
case 'L':
|
||||||
timestamp=1;
|
timestamp=1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'M':
|
||||||
|
devmtu=atoi(optarg);
|
||||||
|
if(devmtu < MIN_DEVMTU) {
|
||||||
|
devmtu = MIN_DEVMTU;
|
||||||
|
}
|
||||||
|
|
||||||
case 'P':
|
case 'P':
|
||||||
showprogress=1;
|
showprogress=1;
|
||||||
break;
|
break;
|
||||||
|
@ -782,8 +846,10 @@ fprintf(stderr," -B baudrate 9600,19200,38400,57600,115200 (default),230400\n
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr," -H Hardware CTS/RTS flow control (default disabled)\n");
|
fprintf(stderr," -H Hardware CTS/RTS flow control (default disabled)\n");
|
||||||
fprintf(stderr," -I Inquire IP address\n");
|
fprintf(stderr," -I Inquire IP address\n");
|
||||||
|
fprintf(stderr," -X Software XON/XOFF flow control (default disabled)\n");
|
||||||
fprintf(stderr," -L Log output format (adds time stamps)\n");
|
fprintf(stderr," -L Log output format (adds time stamps)\n");
|
||||||
fprintf(stderr," -s siodev Serial device (default /dev/ttyUSB0)\n");
|
fprintf(stderr," -s siodev Serial device (default /dev/ttyUSB0)\n");
|
||||||
|
fprintf(stderr," -M Interface MTU (default and min: 1280)\n");
|
||||||
fprintf(stderr," -T Make tap interface (default is tun interface)\n");
|
fprintf(stderr," -T Make tap interface (default is tun interface)\n");
|
||||||
fprintf(stderr," -t tundev Name of interface (default tap0 or tun0)\n");
|
fprintf(stderr," -t tundev Name of interface (default tap0 or tun0)\n");
|
||||||
fprintf(stderr," -v[level] Verbosity level\n");
|
fprintf(stderr," -v[level] Verbosity level\n");
|
||||||
|
@ -811,38 +877,11 @@ exit(1);
|
||||||
}
|
}
|
||||||
ipaddr = argv[1];
|
ipaddr = argv[1];
|
||||||
|
|
||||||
switch(baudrate) {
|
if(baudrate != -2) { /* -2: use default baudrate */
|
||||||
case -2:
|
b_rate = select_baudrate(baudrate);
|
||||||
break; /* Use default. */
|
if(b_rate == 0) {
|
||||||
case 9600:
|
err(1, "unknown baudrate %d", baudrate);
|
||||||
b_rate = B9600;
|
}
|
||||||
break;
|
|
||||||
case 19200:
|
|
||||||
b_rate = B19200;
|
|
||||||
break;
|
|
||||||
case 38400:
|
|
||||||
b_rate = B38400;
|
|
||||||
break;
|
|
||||||
case 57600:
|
|
||||||
b_rate = B57600;
|
|
||||||
break;
|
|
||||||
case 115200:
|
|
||||||
b_rate = B115200;
|
|
||||||
break;
|
|
||||||
case 230400:
|
|
||||||
b_rate = B230400;
|
|
||||||
break;
|
|
||||||
#ifndef __APPLE__
|
|
||||||
case 460800:
|
|
||||||
b_rate = B460800;
|
|
||||||
break;
|
|
||||||
case 921600:
|
|
||||||
b_rate = B921600;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
err(1, "unknown baudrate %d", baudrate);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*tundev == '\0') {
|
if(*tundev == '\0') {
|
||||||
|
|
Loading…
Reference in a new issue