ref: eb3951bcd48399d4d7239a9d396a113e95e38be9
parent: 298f2396957bea59cf0985227a6dd903813b5938
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu May 10 15:36:14 EDT 2018
ppp: set source specific default route regardless of primary flag, set link speed thru new ctl message when -b is specified
--- a/sys/man/8/ppp
+++ b/sys/man/8/ppp
@@ -53,6 +53,10 @@
.I mtu
]
[
+.B -b
+.I baud
+]
+[
.B -x
.I pppnetmntpt
]
--- a/sys/src/cmd/ip/ppp/ppp.c
+++ b/sys/src/cmd/ip/ppp/ppp.c
@@ -1497,7 +1497,7 @@
}
static void
-setdefroute(char *net, Ipaddr gate)
+defroute(char *net, char *verb, Ipaddr gate, Ipaddr local)
{
int fd;
char path[128];
@@ -1506,7 +1506,10 @@
fd = open(path, ORDWR);
if(fd < 0)
return;
- fprint(fd, "add 0 0 %I", gate);
+ fprint(fd, "tag ppp");
+ if(primary)
+ fprint(fd, "%s 0.0.0.0 0.0.0.0 %I", verb, gate);
+ fprint(fd, "%s 0.0.0.0 0.0.0.0 %I %I 255.255.255.255", verb, gate, local);
close(fd);
}
@@ -1550,8 +1553,9 @@
close(cfd);
return "can't set addresses";
}
- if(primary)
- setdefroute(ppp->net, ppp->remote);
+ if(baud)
+ fprint(cfd, "speed %d", baud);
+ defroute(ppp->net, "add", ppp->remote, ppp->local);
ppp->ipfd = fd;
ppp->ipcfd = cfd;
@@ -1570,6 +1574,7 @@
/* we may have changed addresses */
if(ipcmp(ppp->local, ppp->curlocal) != 0 ||
ipcmp(ppp->remote, ppp->curremote) != 0){
+ defroute(ppp->net, "remove", ppp->curremote, ppp->curlocal);
snprint(buf, sizeof buf, "remove %I 255.255.255.255 %I",
ppp->curlocal, ppp->curremote);
if(fprint(ppp->ipcfd, "%s", buf) < 0)
@@ -1578,6 +1583,7 @@
ppp->local, ppp->remote, ppp->mtu-10);
if(fprint(ppp->ipcfd, "%s", buf) < 0)
syslog(0, "ppp", "can't %s: %r", buf);
+ defroute(ppp->net, "add", ppp->remote, ppp->local);
}
syslog(0, "ppp", "%I/%I -> %I/%I", ppp->curlocal, ppp->curremote,
ppp->local, ppp->remote);
@@ -2634,7 +2640,7 @@
void
main(int argc, char **argv)
{
- int mtu, baud, framing, user, mediain, mediaout, cfd;
+ int mtu, framing, user, mediain, mediaout, cfd;
Ipaddr ipaddr, remip;
char *dev, *modemcmd;
char net[128];
@@ -2654,7 +2660,6 @@
invalidate(remip);
mtu = Defmtu;
- baud = 0;
framing = 0;
setnetmtpt(net, sizeof(net), nil);
user = 0;
--- a/sys/src/cmd/ip/pppoe.c
+++ b/sys/src/cmd/ip/pppoe.c
@@ -29,11 +29,12 @@
uchar etherdst[6];
int mtu = 1492;
int pktcompress, hdrcompress;
+char *baud;
void
usage(void)
{
- fprint(2, "usage: pppoe [-PdcC] [-A acname] [-S srvname] [-k keyspec] [-m mtu] [-x pppnet] [ether0]\n");
+ fprint(2, "usage: pppoe [-PdcC] [-A acname] [-S srvname] [-k keyspec] [-m mtu] [-b baud] [-x pppnet] [ether0]\n");
exits("usage");
}
@@ -76,6 +77,9 @@
case 'k':
keyspec = EARGF(usage());
break;
+ case 'b':
+ baud = EARGF(usage());
+ break;
case 'c':
pktcompress = 1;
break;
@@ -533,6 +537,10 @@
argv[argc++] = "-d";
if(primary)
argv[argc++] = "-P";
+ if(baud){
+ argv[argc++] = "-b";
+ argv[argc++] = baud;
+ }
if(hdrcompress)
argv[argc++] = "-C";
if(pktcompress)