changeset 1482:cb1fd4c0b7b4 draft

Use a more descriptive vendorid, to include OS arch and platform.
author Roy Marples <roy@marples.name>
date Wed, 17 Feb 2010 13:26:45 +0000
parents c208be3a5592
children 97c961c104a2
files configure if-options.c if-options.h platform-bsd.c platform-linux.c platform.h
diffstat 6 files changed, 199 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/configure	Sun Jan 31 20:17:35 2010 +0000
+++ b/configure	Wed Feb 17 13:26:45 2010 +0000
@@ -189,10 +189,11 @@
 linux)
 	echo "CPPFLAGS+=	-D_BSD_SOURCE -D_XOPEN_SOURCE=600" >>$CONFIG_MK
 	echo "SRCS+=		if-linux.c if-linux-wireless.c lpf.c" >>$CONFIG_MK
+	echo "SRCS+=		platform-linux.c" >>$CONFIG_MK
 	echo "LDADD+=		-lrt" >>$CONFIG_MK
 	;;
 *)
-	echo "SRCS+=		bpf.c if-bsd.c" >>$CONFIG_MK
+	echo "SRCS+=		bpf.c if-bsd.c platform-bsd.c" >>$CONFIG_MK
 	;;
 esac
 
--- a/if-options.c	Sun Jan 31 20:17:35 2010 +0000
+++ b/if-options.c	Wed Feb 17 13:26:45 2010 +0000
@@ -26,6 +26,7 @@
  */
 
 #include <sys/types.h>
+#include <sys/utsname.h>
 
 #include <arpa/inet.h>
 
@@ -44,6 +45,7 @@
 #include "common.h"
 #include "if-options.h"
 #include "net.h"
+#include "platform.h"
 
 /* These options only make sense in the config file, so don't use any
    valid short options for them */
@@ -771,8 +773,9 @@
 {
 	struct if_options *ifo;
 	FILE *f;
-	char *line, *option, *p;
+	char *line, *option, *p, *platform;
 	int skip = 0, have_profile = 0;
+	struct utsname utn;
 
 	/* Seed our default options */
 	ifo = xzalloc(sizeof(*ifo));
@@ -788,9 +791,17 @@
 	if (strcmp(ifo->hostname, "(none)") == 0 ||
 	    strcmp(ifo->hostname, "localhost") == 0)
 		ifo->hostname[0] = '\0';
-	ifo->vendorclassid[0] = snprintf((char *)ifo->vendorclassid + 1,
-	    VENDORCLASSID_MAX_LEN,
-	    "%s %s", PACKAGE, VERSION);
+
+	platform = hardware_platform();
+	if (uname(&utn) == 0)
+		ifo->vendorclassid[0] = snprintf((char *)ifo->vendorclassid + 1,
+		    VENDORCLASSID_MAX_LEN,
+	            "%s-%s:%s-%s:%s%s%s", PACKAGE, VERSION,
+		    utn.sysname, utn.release, utn.machine,
+		    platform ? ":" : "", platform);
+	else
+		ifo->vendorclassid[0] = snprintf((char *)ifo->vendorclassid + 1,
+		    VENDORCLASSID_MAX_LEN, "%s-%s", PACKAGE, VERSION);
 
 	/* Parse our options file */
 	f = fopen(file ? file : CONFIG, "r");
--- a/if-options.h	Sun Jan 31 20:17:35 2010 +0000
+++ b/if-options.h	Wed Feb 17 13:26:45 2010 +0000
@@ -43,7 +43,7 @@
 #define DEFAULT_REBOOT		10
 
 #define HOSTNAME_MAX_LEN	250	/* 255 - 3 (FQDN) - 2 (DNS enc) */
-#define VENDORCLASSID_MAX_LEN	48
+#define VENDORCLASSID_MAX_LEN	255
 #define CLIENTID_MAX_LEN	48
 #define USERCLASS_MAX_LEN	255
 #define VENDOR_MAX_LEN		255
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/platform-bsd.c	Wed Feb 17 13:26:45 2010 +0000
@@ -0,0 +1,44 @@
+/* 
+ * dhcpcd - DHCP client daemon
+ * Copyright (c) 2006-2010 Roy Marples <roy@marples.name>
+ * All rights reserved
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/utsname.h>
+
+static char march[SYS_NMLN];
+
+char *
+hardware_platform(void)
+{
+	int mib[2] = { CTL_HW, HW_MACHINE_ARCH };
+	size_t len = sizeof(march);
+
+	if (sysctl(mib, sizeof(mib) / sizeof(mib[0]),
+		march, &len, NULL, 0) != 0)
+		return NULL;
+	return march;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/platform-linux.c	Wed Feb 17 13:26:45 2010 +0000
@@ -0,0 +1,104 @@
+/* 
+ * dhcpcd - DHCP client daemon
+ * Copyright (c) 2006-2010 Roy Marples <roy@marples.name>
+ * All rights reserved
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+#include <sys/sysctl.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "common.h"
+#include "platform.h"
+
+static const char *mproc = 
+#if defined(__alpha__)
+	"system type"
+#elif defined(__arm__)
+	"Hardware"
+#elif defined(__avr32__)
+	"cpu family"
+#elif defined(__bfin__)
+	"BOARD Name"
+#elif defined(__cris__)
+	"cpu model"
+#elif defined(__frv__)
+	"System"
+#elif defined(__i386__) || defined(__x86_64__)
+	"vendor_id"
+#elif defined(__ia64__)
+	"vendor"
+#elif defined(__hppa__)
+	"model"
+#elif defined(__m68k__)
+	"MMU"
+#elif defined(__mips__)
+	"system type"
+#elif defined(__powerpc__) || defined(__powerpc64__)
+	"machine"
+#elif defined(__s390__) || defined(__s390x__)
+	"Manufacturer"
+#elif defined(__sh__)
+	"machine"
+#elif defined(sparc) || defined(__sparc__)
+	"cpu"
+#elif defined(__vax__)
+	"cpu"
+#else
+	NULL
+#endif
+	;
+
+char *
+hardware_platform(void)
+{
+	FILE *fp;
+	char *buf, *p;
+
+	if (mproc == NULL) {
+		errno = EINVAL;
+		return NULL;
+	}
+
+	fp = fopen("/proc/cpuinfo", "r");
+	if (fp == NULL)
+		return NULL;
+
+	while ((buf = get_line(fp))) {
+		if (strncmp(buf, mproc, strlen(mproc)) == 0) {
+			p = strchr(buf, ':');
+			if (p != NULL && ++p != NULL) {
+				while (*p == ' ')
+					p++;
+				return p;
+			}
+		}
+	}
+
+	errno = ESRCH;
+	return NULL;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/platform.h	Wed Feb 17 13:26:45 2010 +0000
@@ -0,0 +1,33 @@
+/* 
+ * dhcpcd - DHCP client daemon
+ * Copyright (c) 2006-2010 Roy Marples <roy@marples.name>
+ * All rights reserved
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef PLATFORM_H
+#define PLATFORM_H
+
+char * hardware_platform(void);
+
+#endif