]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Use a more descriptive vendorid, to include OS arch and platform.
authorRoy Marples <roy@marples.name>
Wed, 17 Feb 2010 13:26:45 +0000 (13:26 +0000)
committerRoy Marples <roy@marples.name>
Wed, 17 Feb 2010 13:26:45 +0000 (13:26 +0000)
configure
if-options.c
if-options.h
platform-bsd.c [new file with mode: 0644]
platform-linux.c [new file with mode: 0644]
platform.h [new file with mode: 0644]

index b59b3c10533037971eff12ddccc5384745ab5802..3c226afb9194c6fc7dfdae475b457d4435e3d5d0 100755 (executable)
--- a/configure
+++ b/configure
@@ -189,10 +189,11 @@ case "$OS" in
 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
 
index bf318b9469c3ff24c4c30cda328616228dde9b06..ce4ce17403c8bde9a5a2672f57bdcc80ef7d2554 100644 (file)
@@ -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 @@ read_config(const char *file,
 {
        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 @@ read_config(const char *file,
        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");
index 1a368718d8aa73b3a8cc01d16f7f61d9a6370192..fe88ac809a905873480d81ded7481b1f5369dc47 100644 (file)
@@ -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
diff --git a/platform-bsd.c b/platform-bsd.c
new file mode 100644 (file)
index 0000000..c527b25
--- /dev/null
@@ -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;
+}
diff --git a/platform-linux.c b/platform-linux.c
new file mode 100644 (file)
index 0000000..c0bc599
--- /dev/null
@@ -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;
+}
diff --git a/platform.h b/platform.h
new file mode 100644 (file)
index 0000000..24731ac
--- /dev/null
@@ -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