changeset 5392:b6d4660cc8da draft

options: rework prior to use macros Can't use DHCPCD_MASTER because a config option sets it - duh. This allows us to use a different config option which makes little sense in options but makes sense in the code.
author Roy Marples <roy@marples.name>
date Mon, 29 Jun 2020 11:54:29 +0100
parents e9cc33189abd
children ff43b6fbd113
files src/if-options.c
diffstat 1 files changed, 14 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-options.c	Sat Jun 27 13:58:44 2020 +0100
+++ b/src/if-options.c	Mon Jun 29 11:54:29 2020 +0100
@@ -55,6 +55,10 @@
 #include "logerr.h"
 #include "sa.h"
 
+#define	IN_CONFIG_BLOCK(ifo)	((ifo)->options & DHCPCD_FORKED)
+#define	SET_CONFIG_BLOCK(ifo)	((ifo)->options |= DHCPCD_FORKED)
+#define	CLEAR_CONFIG_BLOCK(ifo)	((ifo)->options &= ~DHCPCD_FORKED)
+
 const struct option cf_options[] = {
 	{"background",      no_argument,       NULL, 'b'},
 	{"script",          required_argument, NULL, 'c'},
@@ -674,7 +678,7 @@
 		break;
 	case 'c':
 		ARG_REQUIRED;
-		if (!(ifo->options & DHCPCD_MASTER)) {
+		if (IN_CONFIG_BLOCK(ifo)) {
 			logerrx("%s: per interface scripts"
 			    " are no longer supported",
 			    ifname);
@@ -744,7 +748,7 @@
 		ARG_REQUIRED;
 		/* per interface logging is not supported
 		 * don't want to overide the commandline */
-		if (ifo->options & DHCPCD_MASTER && ctx->logfile == NULL) {
+		if (!IN_CONFIG_BLOCK(ifo) && ctx->logfile == NULL) {
 			logclose();
 			ctx->logfile = strdup(arg);
 			logopen(ctx->logfile);
@@ -947,7 +951,7 @@
 		break;
 	case 'z':
 		ARG_REQUIRED;
-		if (ifo->options & DHCPCD_MASTER)
+		if (!IN_CONFIG_BLOCK(ifo))
 			ctx->ifav = splitv(&ctx->ifac, ctx->ifav, arg);
 		break;
 	case 'A':
@@ -1193,7 +1197,7 @@
 		break;
 	case 'Z':
 		ARG_REQUIRED;
-		if (ifo->options & DHCPCD_MASTER)
+		if (!IN_CONFIG_BLOCK(ifo))
 			ctx->ifdv = splitv(&ctx->ifdc, ctx->ifdv, arg);
 		break;
 	case '1':
@@ -1297,7 +1301,7 @@
 #endif
 	case O_IAID:
 		ARG_REQUIRED;
-		if (ifo->options & DHCPCD_MASTER) {
+		if (!IN_CONFIG_BLOCK(ifo)) {
 			logerrx("IAID must belong in an interface block");
 			return -1;
 		}
@@ -1339,7 +1343,7 @@
 			logwarnx("%s: IA_PD not compiled in", ifname);
 			return -1;
 #else
-			if (ifo->options & DHCPCD_MASTER) {
+			if (!IN_CONFIG_BLOCK(ifo)) {
 				logerrx("IA PD must belong in an "
 				    "interface block");
 				return -1;
@@ -1347,7 +1351,7 @@
 			i = D6_OPTION_IA_PD;
 #endif
 		}
-		if (ifo->options & DHCPCD_MASTER && arg) {
+		if (!IN_CONFIG_BLOCK(ifo) && arg) {
 			logerrx("IA with IAID must belong in an "
 			    "interface block");
 			return -1;
@@ -2335,8 +2339,7 @@
 	ifo->options |= DHCPCD_DHCP6;
 #endif
 
-	/* Set master to indicate global options */
-	ifo->options |= DHCPCD_MASTER;
+	CLEAR_CONFIG_BLOCK(ifo);
 
 	vlen = strlcpy((char *)ifo->vendorclassid + 1, ctx->vendor,
 	    sizeof(ifo->vendorclassid) - 1);
@@ -2490,9 +2493,7 @@
 			had_block = 1;
 			new_block = 0;
 			ifo->options &= ~DHCPCD_WAITOPTS;
-
-			/* Unset master to indicate non-global options */
-			ifo->options &= ~DHCPCD_MASTER;
+			SET_CONFIG_BLOCK(ifo);
 		}
 
 		/* Start of an interface block, skip if not ours */
@@ -2564,6 +2565,7 @@
 
 	if (!had_block)
 		ifo->options &= ~DHCPCD_WAITOPTS;
+	CLEAR_CONFIG_BLOCK(ifo);
 	finish_config(ifo);
 	return ifo;
 }