ref: 7573be34a581b4cbb9196b08ede74738d65bcb0e
parent: 5124064ddf254918730a2468f4987728d1f40781
	author: cinap_lenrek <cinap_lenrek@felloff.net>
	date: Mon Jan  1 16:14:28 EST 2024
	
ip/dhcpd: don't override local address for gateway case
--- a/sys/src/cmd/ip/dhcpd/dhcpd.c
+++ b/sys/src/cmd/ip/dhcpd/dhcpd.c
@@ -726,20 +726,21 @@
bp = rp->bp;
up = rp->up;
- localip(up->laddr, ip, rp->ifc);
-
flags = nhgets(bp->flags);
 	if(validip(rp->giaddr)){ipmove(up->raddr, rp->giaddr);
hnputs(up->rport, 67);
-	} else if(flags & Fbroadcast){- ipmove(up->raddr, IPv4bcast);
- hnputs(up->rport, 68);
 	} else {- ipmove(up->raddr, ip);
- if(bp->htype == 1)
- arpenter(up->raddr, bp->chaddr, up->laddr);
- hnputs(up->rport, 68);
+ localip(up->laddr, ip, rp->ifc);
+		if(flags & Fbroadcast){+ ipmove(up->raddr, IPv4bcast);
+ hnputs(up->rport, 68);
+		} else {+ ipmove(up->raddr, ip);
+ if(bp->htype == 1)
+ arpenter(up->raddr, bp->chaddr, up->laddr);
+ hnputs(up->rport, 68);
+ }
}
/*
@@ -785,20 +786,21 @@
bp = rp->bp;
up = rp->up;
- localip(up->laddr, ip, rp->ifc);
-
flags = nhgets(bp->flags);
 	if(validip(rp->giaddr)){ipmove(up->raddr, rp->giaddr);
hnputs(up->rport, 67);
-	} else if(flags & Fbroadcast){- ipmove(up->raddr, IPv4bcast);
- hnputs(up->rport, 68);
 	} else {- ipmove(up->raddr, ip);
- if(bp->htype == 1)
- arpenter(up->raddr, bp->chaddr, up->laddr);
- hnputs(up->rport, 68);
+ localip(up->laddr, ip, rp->ifc);
+		if(flags & Fbroadcast){+ ipmove(up->raddr, IPv4bcast);
+ hnputs(up->rport, 68);
+		} else {+ ipmove(up->raddr, ip);
+ if(bp->htype == 1)
+ arpenter(up->raddr, bp->chaddr, up->laddr);
+ hnputs(up->rport, 68);
+ }
}
/*
@@ -844,8 +846,6 @@
bp = rp->bp;
up = rp->up;
- localip(up->laddr, ip, rp->ifc);
-
/*
* set destination (always broadcast)
*/
@@ -853,6 +853,7 @@
ipmove(up->raddr, rp->giaddr);
hnputs(up->rport, 67);
 	} else {+ localip(up->laddr, ip, rp->ifc);
ipmove(up->raddr, IPv4bcast);
hnputs(up->rport, 68);
}
@@ -973,20 +974,21 @@
rp->p += 128-4;
}
- localip(up->laddr, iip->ipaddr, iip->ifc);
-
flags = nhgets(bp->flags);
 	if(validip(rp->giaddr)){ipmove(up->raddr, rp->giaddr);
hnputs(up->rport, 67);
-	} else if(flags & Fbroadcast){- ipmove(up->raddr, IPv4bcast);
- hnputs(up->rport, 68);
 	} else {- v4tov6(up->raddr, bp->yiaddr);
- if(bp->htype == 1)
- arpenter(up->raddr, bp->chaddr, up->laddr);
- hnputs(up->rport, 68);
+ localip(up->laddr, iip->ipaddr, rp->ifc);
+		if(flags & Fbroadcast){+ ipmove(up->raddr, IPv4bcast);
+ hnputs(up->rport, 68);
+		} else {+ v4tov6(up->raddr, bp->yiaddr);
+ if(bp->htype == 1)
+ arpenter(up->raddr, bp->chaddr, up->laddr);
+ hnputs(up->rport, 68);
+ }
}
/*
--
⑨