This is FreeBSD 5.x's code to dump the kernel's identifier through
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 24 Oct 2003 17:19:16 +0000 (17:19 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 24 Oct 2003 17:19:16 +0000 (17:19 +0000)
either the 'kern.ident' oid or with uname -i.

Submitted-by: Skip Ford <skip.ford@verizon.net>
sys/conf/newvers.sh
sys/kern/kern_mib.c
sys/sys/sysctl.h
usr.bin/uname/uname.1
usr.bin/uname/uname.c

index c6994ae..376fd03 100644 (file)
@@ -33,7 +33,7 @@
 #
 #      @(#)newvers.sh  8.1 (Berkeley) 4/20/94
 # $FreeBSD: src/sys/conf/newvers.sh,v 1.44.2.30 2003/04/04 07:02:46 murray Exp $
-# $DragonFly: src/sys/conf/newvers.sh,v 1.2 2003/06/17 04:28:20 dillon Exp $
+# $DragonFly: src/sys/conf/newvers.sh,v 1.3 2003/10/24 17:19:14 dillon Exp $
 
 TYPE="FreeBSD"
 REVISION="4.8"
@@ -87,6 +87,7 @@ fi
 
 touch version
 v=`cat version` u=${USER-root} d=`pwd` h=`hostname` t=`date`
+i=`make -V KERN_IDENT`
 cat << EOF > vers.c
 $COPYRIGHT
 char sccspad[32 - 4 /* sizeof(sccs) */] = { '\\0' };
@@ -95,6 +96,7 @@ char version[] = "${VERSION} #${v}: ${t}\\n    ${u}@${h}:${d}\\n";
 char ostype[] = "${TYPE}";
 char osrelease[] = "${RELEASE}";
 int osreldate = ${RELDATE};
+char kern_ident[] = "${i}";
 EOF
 
 echo `expr ${v} + 1` > version
index 32fd0de..9d9fc46 100644 (file)
@@ -38,7 +38,7 @@
  *
  *     @(#)kern_sysctl.c       8.4 (Berkeley) 4/14/94
  * $FreeBSD: src/sys/kern/kern_mib.c,v 1.29.2.4 2001/07/30 23:28:00 peter Exp $
- * $DragonFly: src/sys/kern/kern_mib.c,v 1.6 2003/07/04 00:32:30 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_mib.c,v 1.7 2003/10/24 17:19:12 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -77,6 +77,9 @@ SYSCTL_NODE(, CTL_LWKT,  lwkt,   CTLFLAG_RW, 0,
 SYSCTL_NODE(, OID_AUTO,  compat, CTLFLAG_RW, 0,
        "Compatibility code");
 
+SYSCTL_STRING(_kern, OID_AUTO, ident, CTLFLAG_RD,
+    kern_ident, 0, "Kernel identifier");
+
 SYSCTL_STRING(_kern, KERN_OSRELEASE, osrelease, CTLFLAG_RD, 
     osrelease, 0, "Operating system type");
 
index b089475..e92dbf2 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)sysctl.h    8.1 (Berkeley) 6/2/93
  * $FreeBSD: src/sys/sys/sysctl.h,v 1.81.2.10 2003/05/01 22:48:09 trhodes Exp $
- * $DragonFly: src/sys/sys/sysctl.h,v 1.7 2003/08/20 23:54:36 rob Exp $
+ * $DragonFly: src/sys/sys/sysctl.h,v 1.8 2003/10/24 17:19:13 dillon Exp $
  */
 
 #ifndef _SYS_SYSCTL_H_
@@ -570,6 +570,7 @@ SYSCTL_DECL(_lwkt);
 extern char    machine[];
 extern char    osrelease[];
 extern char    ostype[];
+extern char    kern_ident[];
 
 struct linker_set;
 
index d23d3f9..337fbcf 100644 (file)
@@ -31,9 +31,9 @@
 .\"
 .\"    @(#)uname.1     8.3 (Berkeley) 4/8/94
 .\" $FreeBSD: src/usr.bin/uname/uname.1,v 1.8.2.4 2002/10/17 07:47:29 jmallett Exp $
-.\" $DragonFly: src/usr.bin/uname/uname.1,v 1.2 2003/06/17 04:29:33 dillon Exp $
+.\" $DragonFly: src/usr.bin/uname/uname.1,v 1.3 2003/10/24 17:19:16 dillon Exp $
 .\"
-.Dd September 18, 2002
+.Dd October 24, 2003
 .Dt UNAME 1
 .Os
 .Sh NAME
@@ -41,7 +41,7 @@
 .Nd display information about the system
 .Sh SYNOPSIS
 .Nm
-.Op Fl amnprsv
+.Op Fl aimnprsv
 .Sh DESCRIPTION
 The
 .Nm
@@ -58,6 +58,8 @@ Behave as though the options
 and
 .Fl v
 were specified.
+.It Fl i
+Write the kernel ident to standard output.
 .It Fl m
 Write the type of the current hardware platform to standard output.
 .It Fl n
index 6a0cc78..6da8b10 100644 (file)
@@ -34,7 +34,7 @@
  * @(#) Copyright (c) 1993 The Regents of the University of California.  All rights reserved.
  * @(#)uname.c 8.2 (Berkeley) 5/4/95
  * $FreeBSD: src/usr.bin/uname/uname.c,v 1.4.6.2 2002/10/17 07:47:29 jmallett Exp $
- * $DragonFly: src/usr.bin/uname/uname.c,v 1.2 2003/06/17 04:29:33 dillon Exp $
+ * $DragonFly: src/usr.bin/uname/uname.c,v 1.3 2003/10/24 17:19:16 dillon Exp $
  */
 
 #include <sys/param.h>
 #define        RFLAG   0x08
 #define        SFLAG   0x10
 #define        VFLAG   0x20
+#define        IFLAG   0x40
 
 typedef void (*get_t)(void);
-get_t get_platform, get_hostname, get_arch, get_release, get_sysname, get_version;
-
+get_t get_ident, get_platform, get_hostname, get_arch, get_release, get_sysname, get_version;
+  
+void native_ident(void);
 void native_platform(void);
 void native_hostname(void);
 void native_arch(void);
@@ -65,7 +67,7 @@ void print_uname(u_int);
 void setup_get(void);
 void usage(void);
 
-char *platform, *hostname, *arch, *release, *sysname, *version;
+char *ident, *platform, *hostname, *arch, *release, *sysname, *version;
 int space;
 
 int
@@ -77,11 +79,14 @@ main(int argc, char *argv[])
        setup_get();
        flags = 0;
 
-       while ((ch = getopt(argc, argv, "amnprsv")) != -1)
+       while ((ch = getopt(argc, argv, "aimnprsv")) != -1)
                switch(ch) {
                case 'a':
                        flags |= (MFLAG | NFLAG | RFLAG | SFLAG | VFLAG);
                        break;
+               case 'i':
+                       flags |= IFLAG;
+                       break;
                case 'm':
                        flags |= MFLAG;
                        break;
@@ -136,6 +141,7 @@ setup_get(void)
        CHECK_ENV("v", version);
        CHECK_ENV("m", platform);
        CHECK_ENV("p", arch);
+       CHECK_ENV("i", ident);
 }
 
 #define        PRINT_FLAG(flags,flag,var)              \
@@ -158,6 +164,7 @@ print_uname(u_int flags)
        PRINT_FLAG(flags, VFLAG, version);
        PRINT_FLAG(flags, MFLAG, platform);
        PRINT_FLAG(flags, PFLAG, arch);
+       PRINT_FLAG(flags, IFLAG, ident);
        printf("\n");
 }
 
@@ -175,6 +182,19 @@ native_##var(void)                         \
           &buf, &len, NULL, 0) == -1)          \
                err(1, "sysctl");
 
+#define        NATIVE_SYSCTLNAME_GET(var,name)         \
+void                                           \
+native_##var(void)                             \
+{                                              \
+       size_t len;                             \
+       static char buf[1024];                  \
+       char **varp = &(var);                   \
+                                               \
+       len = sizeof buf;                       \
+       if (sysctlbyname(name, &buf, &len, NULL,\
+           0) == -1)                           \
+               err(1, "sysctlbyname");
+
 #define        NATIVE_SET                              \
        *varp = buf;                            \
        return;                                 \
@@ -209,9 +229,12 @@ NATIVE_SYSCTL2_GET(platform, CTL_HW, HW_MACHINE) {
 NATIVE_SYSCTL2_GET(arch, CTL_HW, HW_MACHINE_ARCH) {
 } NATIVE_SET;
 
+NATIVE_SYSCTLNAME_GET(ident, "kern.ident") {
+} NATIVE_SET;
+
 void
 usage(void)
 {
-       fprintf(stderr, "usage: uname [-amnprsv]\n");
+       fprintf(stderr, "usage: uname [-aimnprsv]\n");
        exit(1);
 }