ref: 6894c4e13a24e9983e2daf4ee2566f8396d29f4e
parent: 5f59652ae1db89e8c583ff10b4f7f40bed341d9d
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Mon Oct 28 15:08:23 EDT 2024
ppp: pass -i flag to ip/ipconfig (-i for ipv4, -I for ipv6) to populate ipnet= entries
--- a/sys/man/8/ppp
+++ b/sys/man/8/ppp
@@ -9,6 +9,13 @@
.B -b
.I baud
] [
+] [
+.B -i
+.I ipnet
+] [
+.B -I
+.I ipnet
+] [
.B -k
.I keyspec
] [
@@ -48,6 +55,12 @@
.B -U
.I duid
] [
+.B -i
+.I ipnet
+] [
+.B -I
+.B ipnet
+] [
.B -k
.I keyspec
] [
@@ -128,6 +141,20 @@
.B f
make PPP add HDLC framing. This is necessary when using
PPP over a serial line or a TCP connection
+.TP
+.B i
+when writing IPv4 configuration to
+.BR /net/ndb ,
+create a
+.B ipnet=
+tuple with the value of
+.I ipnet
+and the network attributes.
+.TP
+.B I
+same as
+.B -i
+but for IPv6.
.TP
.B k
add
--- a/sys/src/cmd/ip/ppp/ppp.c
+++ b/sys/src/cmd/ip/ppp/ppp.c
@@ -26,6 +26,8 @@
int debug;
char* LOG = "ppp";
char* keyspec = "";
+char* ipnet4;
+char* ipnet6;
/*
* Calculate FCS - rfc 1331
@@ -1573,9 +1575,11 @@
}
static void
-ipconfig(int shell, char *net, char *dev, int mtu, int proxy, Ipaddr gate, Ipaddr dns[2], char *duid)
+ipconfig(int shell, char *net, char *dev, char *ipnet, int mtu, int proxy, Ipaddr gate, Ipaddr dns[2], char *duid)
{
fprint(shell, "ip/ipconfig -x %q ", net);
+ if(debug)
+ fprint(shell, "-D ");
if(!primary){
/* don't write /net/ndb */
fprint(shell, "-P ");
@@ -1592,6 +1596,8 @@
/* set default gateway */
if(gate != nil)
fprint(shell, "-g %I ", gate);
+ if(ipnet != nil)
+ fprint(shell, "-i %s ", ipnet);
}
/* allow dhcpv6 */
if(duid != nil)
@@ -1607,10 +1613,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, proxy, remote, dns, nil);
+ ipconfig(shell, net, dev, ipnet4, 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, 0, nil, nil, nil);
+ ipconfig(shell, net, dev, ipnet6, mtu, 0, nil, nil, nil);
fprint(shell, "add %I /64\n", local);
}
}
@@ -1619,10 +1625,10 @@
delip(int shell, char *net, char *dev, Ipaddr local, Ipaddr remote)
{
if(validv4(local) && validv4(remote)){
- ipconfig(shell, net, dev, 0, 0, remote, nil, nil);
+ ipconfig(shell, net, dev, ipnet4, 0, 0, remote, nil, nil);
fprint(shell, "del %I 255.255.255.255\n", local);
} else if(validv6(local)){
- ipconfig(shell, net, dev, 0, 0, nil, nil, nil);
+ ipconfig(shell, net, dev, ipnet6, 0, 0, nil, nil, nil);
fprint(shell, "del %I /64\n", local);
}
}
@@ -1632,7 +1638,7 @@
{
if(server || !validv6(remote))
return;
- ipconfig(shell, net, dev, 0, proxy, remote, nil, duid);
+ ipconfig(shell, net, dev, ipnet6, 0, proxy, remote, nil, duid);
fprint(shell, "ra6 recvra 1\n");
}
@@ -2810,7 +2816,7 @@
void
usage(void)
{
- fprint(2, "usage: ppp [-CPSacdfuy] [-b baud] [-k keyspec] [-m mtu] "
+ fprint(2, "usage: ppp [-CPSacdfuy] [-b baud] [-iI ipnet] [-k keyspec] [-m mtu] "
"[-M chatfile] [-p dev] [-x netmntpt] [-t modemcmd] [-U duid] "
"[local-addr [remote-addr]]\n");
exits("usage");
@@ -2869,6 +2875,12 @@
break;
case 'F':
pppframing = 0;
+ break;
+ case 'i':
+ ipnet4 = EARGF(usage());
+ break;
+ case 'I':
+ ipnet6 = EARGF(usage());
break;
case 'k':
keyspec = EARGF(usage());
--- a/sys/src/cmd/ip/pppoe.c
+++ b/sys/src/cmd/ip/pppoe.c
@@ -21,6 +21,7 @@
int rflag;
int sessid;
char *duid;
+char *ipnet4, *ipnet6;
char *keyspec;
char *pppnetmtpt;
char *acname;
@@ -97,6 +98,12 @@
case 'm':
mtu = atoi(EARGF(usage()));
break;
+ case 'i':
+ ipnet4 = EARGF(usage());
+ break;
+ case 'I':
+ ipnet6 = EARGF(usage());
+ break;
case 'k':
keyspec = EARGF(usage());
break;
@@ -642,6 +649,14 @@
if(pppnetmtpt){
argv[argc++] = "-x";
argv[argc++] = pppnetmtpt;
+ }
+ if(ipnet4){
+ argv[argc++] = "-i";
+ argv[argc++] = ipnet4;
+ }
+ if(ipnet6){
+ argv[argc++] = "-I";
+ argv[argc++] = ipnet6;
}
if(keyspec){
argv[argc++] = "-k";
--
⑨