From c4119c76f848837f1b81fe45c3a34936b61c9fdb Mon Sep 17 00:00:00 2001 From: Juli Mallett Date: Mon, 9 Jun 2003 09:38:20 +0000 Subject: [PATCH] Make kernel identification (`ident' in the config(8) driver) available to userland, and the kernel. In the kernel by way of the 'ident[]' variable akin to all the other stuff generated by newvers.sh. In userland it is available to sysctl consumers via KERN_IDENT or 'kern.ident'. It is exported by uname(1) by the -i flag. Reviewed by: hackers@ --- sys/conf/newvers.sh | 2 ++ sys/sys/sysctl.h | 5 ++++- usr.bin/uname/uname.1 | 6 ++++-- usr.bin/uname/uname.c | 18 ++++++++++++++---- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/sys/conf/newvers.sh b/sys/conf/newvers.sh index ce2d31df79b9..d27e9269baf1 100644 --- a/sys/conf/newvers.sh +++ b/sys/conf/newvers.sh @@ -86,6 +86,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' }; @@ -94,6 +95,7 @@ char version[] = "${VERSION} #${v}: ${t}\\n ${u}@${h}:${d}\\n"; char ostype[] = "${TYPE}"; char osrelease[] = "${RELEASE}"; int osreldate = ${RELDATE}; +char ident[] = "${i}"; EOF echo `expr ${v} + 1` > version diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 8762e72a2c5d..7cbc2c25a5df 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -354,7 +354,8 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); #define KERN_USRSTACK 33 /* int: address of USRSTACK */ #define KERN_LOGSIGEXIT 34 /* int: do we log sigexit procs? */ #define KERN_IOV_MAX 35 /* int: value of UIO_MAXIOV */ -#define KERN_MAXID 36 /* number of valid kern ids */ +#define KERN_IDENT 36 /* string: kernel ident */ +#define KERN_MAXID 37 /* number of valid kern ids */ #define CTL_KERN_NAMES { \ { 0, 0 }, \ @@ -392,6 +393,7 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); { "usrstack", CTLTYPE_INT }, \ { "logsigexit", CTLTYPE_INT }, \ { "iov_max", CTLTYPE_INT }, \ + { "ident", CTLTYPE_STRING }, \ } /* @@ -581,6 +583,7 @@ SYSCTL_DECL(_compat); extern char machine[]; extern char osrelease[]; extern char ostype[]; +extern char ident[]; /* Dynamic oid handling */ struct sysctl_oid *sysctl_add_oid(struct sysctl_ctx_list *clist, diff --git a/usr.bin/uname/uname.1 b/usr.bin/uname/uname.1 index aa9f49f3ba99..932a18ab5334 100644 --- a/usr.bin/uname/uname.1 +++ b/usr.bin/uname/uname.1 @@ -32,7 +32,7 @@ .\" @(#)uname.1 8.3 (Berkeley) 4/8/94 .\" $FreeBSD$ .\" -.Dd September 18, 2002 +.Dd April 02, 2003 .Dt UNAME 1 .Os .Sh NAME @@ -40,7 +40,7 @@ .Nd display information about the system .Sh SYNOPSIS .Nm -.Op Fl amnprsv +.Op Fl aimnprsv .Sh DESCRIPTION The .Nm @@ -57,6 +57,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 diff --git a/usr.bin/uname/uname.c b/usr.bin/uname/uname.c index a80d4f30ea2b..b650ebf4d14c 100644 --- a/usr.bin/uname/uname.c +++ b/usr.bin/uname/uname.c @@ -60,10 +60,12 @@ static const char sccsid[] = "@(#)uname.c 8.2 (Berkeley) 5/4/95"; #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); @@ -74,7 +76,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 @@ -86,11 +88,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; @@ -145,6 +150,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) \ @@ -167,6 +173,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"); } @@ -218,9 +225,12 @@ NATIVE_SYSCTL2_GET(platform, CTL_HW, HW_MACHINE) { NATIVE_SYSCTL2_GET(arch, CTL_HW, HW_MACHINE_ARCH) { } NATIVE_SET; +NATIVE_SYSCTL2_GET(ident, CTL_KERN, KERN_IDENT) { +} NATIVE_SET; + void usage(void) { - fprintf(stderr, "usage: uname [-amnprsv]\n"); + fprintf(stderr, "usage: uname [-aimnprsv]\n"); exit(1); }