ref: ffc267c831a8f31591d5ee35dfb0796cf0efee79
parent: 4e3e6f11a5771c15d9083ab6bdfd2286eb53a8e4
author: cinap_lenrek <[email protected]>
date: Sat May 27 17:23:08 EDT 2023
ip/ppp: bring back arp proxy, but with explicit -y flag
--- a/sys/man/8/ppp
+++ b/sys/man/8/ppp
@@ -4,7 +4,7 @@
.SH SYNOPSIS
.B ip/ppp
[
-.B -CPSacdfu
+.B -CPSacdfuy
] [
.B -b
.I baud
@@ -190,6 +190,11 @@
.B x
use the IP stack mounted at
.I netmntpt
+.TP
+.B y
+ARP proxy the interface.
+(see
+.IR ipconfig (8)).
.PD
.PP
If both the
--- a/sys/src/cmd/ip/ppp/ppp.c
+++ b/sys/src/cmd/ip/ppp/ppp.c
@@ -20,6 +20,7 @@
static int noauth;
static int dying; /* flag to signal to all threads its time to go */
static int primary;
+static int proxy;
static char *chatfile;
int debug;
@@ -1572,7 +1573,7 @@
}
static void
-ipconfig(int shell, char *net, char *dev, int mtu, Ipaddr gate, Ipaddr dns[2], char *duid)
+ipconfig(int shell, char *net, char *dev, int mtu, int proxy, Ipaddr gate, Ipaddr dns[2], char *duid)
{
fprint(shell, "ip/ipconfig -x %q ", net);
if(!primary){
@@ -1597,6 +1598,8 @@
fprint(shell, "-dU %q ", duid);
if(mtu > 0)
fprint(shell, "-m %d ", mtu);
+ if(proxy)
+ fprint(shell, "-y ");
fprint(shell, "pkt %q ", dev);
}
@@ -1604,10 +1607,10 @@
addip(int shell, char *net, char *dev, Ipaddr local, Ipaddr remote, int mtu, Ipaddr *dns)
{
if(validv4(local) && validv4(remote)){
- ipconfig(shell, net, dev, mtu, remote, dns, nil);
+ ipconfig(shell, net, dev, mtu, proxy, remote, dns, nil);
fprint(shell, "add %I 255.255.255.255 %I\n", local, remote);
} else if(validv6(local)){
- ipconfig(shell, net, dev, mtu, nil, nil, nil);
+ ipconfig(shell, net, dev, mtu, 0, nil, nil, nil);
fprint(shell, "add %I /64\n", local);
}
}
@@ -1616,10 +1619,10 @@
removeip(int shell, char *net, char *dev, Ipaddr local, Ipaddr remote)
{
if(validv4(local) && validv4(remote)){
- ipconfig(shell, net, dev, 0, remote, nil, nil);
+ ipconfig(shell, net, dev, 0, 0, remote, nil, nil);
fprint(shell, "remove %I 255.255.255.255\n", local);
} else if(validv6(local)){
- ipconfig(shell, net, dev, 0, nil, nil, nil);
+ ipconfig(shell, net, dev, 0, 0, nil, nil, nil);
fprint(shell, "remove %I /64\n", local);
}
}
@@ -1629,7 +1632,7 @@
{
if(server || !validv6(remote))
return;
- ipconfig(shell, net, dev, 0, remote, nil, duid);
+ ipconfig(shell, net, dev, 0, proxy, remote, nil, duid);
fprint(shell, "ra6 recvra 1\n");
}
@@ -2806,7 +2809,7 @@
void
usage(void)
{
- fprint(2, "usage: ppp [-CPSacdfu] [-b baud] [-k keyspec] [-m mtu] "
+ fprint(2, "usage: ppp [-CPSacdfuy] [-b baud] [-k keyspec] [-m mtu] "
"[-M chatfile] [-p dev] [-x netmntpt] [-t modemcmd] [-U duid] "
"[local-addr [remote-addr]]\n");
exits("usage");
@@ -2899,6 +2902,9 @@
break;
case 'x':
setnetmtpt(net, sizeof net, EARGF(usage()));
+ break;
+ case 'y':
+ proxy = 1;
break;
default:
fprint(2, "unknown option %c\n", ARGC());