/* -*-c-*-
- *
- * $Id$
*
* Tunnel packets via SLIP
*
/*----- Main code ---------------------------------------------------------*/
-#define SL_END 0xc0
-#define SL_ESC 0xdb
-#define SL_ESCEND 0xdc
-#define SL_ESCESC 0xdd
-
/* --- @t_read@ --- *
*
* Arguments: @int fd@ = file descriptor to read
/* --- @t_create@ --- *
*
* Arguments: @peer *p@ = pointer to peer block
+ * @int fd@ = file descriptor of tunnel device (unused)
* @char **ifn@ = where to put the interface name
*
* Returns: A tunnel block if it worked, or null on failure.
* Use: Initializes a new tunnel.
*/
-static tunnel *t_create(peer *p, char **ifn)
+static tunnel *t_create(peer *p, int fd, char **ifn)
{
slipif *sl = 0;
int pin[2] = { -1, -1 }, pout[2] = { -1, -1 };
+ mdup_fd md[2];
pid_t kid = -1;
dstr d = DSTR_INIT;
unsigned char ch;
goto fail;
}
if (!kid) {
- close(pin[1]);
- close(pout[0]);
- dup2(pin[0], STDIN_FILENO);
- dup2(pout[1], STDOUT_FILENO);
+ close(pin[1]); close(pout[0]);
+ md[0].cur = pin[0]; md[0].want = STDIN_FILENO;
+ md[1].cur = pout[1]; md[1].want = STDOUT_FILENO;
+ mdup(md, 2);
execlp(slipcmd, slipcmd, p_name(p), (char *)0);
_exit(127);
}
const tunnel_ops tun_slip = {
"slip",
+ 0,
t_init,
t_create,
t_setifname,