git: plan9front

Download patch

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";
--