DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦6b7a5413a⟧ TextFile

    Length: 4630 (0x1216)
    Types: TextFile
    Names: »systm.c«

Derivation

└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
    └─⟦697af93db⟧ »EurOpenD3/network/snmp/mit-snmp.tar.Z« 
        └─⟦57bbcbe75⟧ 
            └─⟦this⟧ »./bsd/systm.c« 

TextFile


/*
 *	$Header: systm.c,v 1.1 89/01/11 22:10:33 jrd Exp $
 *	Author: J. Davin
 *	Copyright 1988, 1989, Massachusetts Institute of Technology
 *	See permission and disclaimer notice in file "notice.h"
 */

#include	<notice.h>

#include	<sys/param.h>
#include	<sys/types.h>
#include	<sys/time.h>
#include	<nlist.h>
#include	<stdio.h>

#include	<ctypes.h>
#include	<local.h>
#include	<debug.h>
#include	<miv.h>
#include	<asn.h>
#include	<mix.h>
#include	<systm.h>
#include	<kmem.h>

#define			systmStringSize		(2 * MAXHOSTNAMELEN)

static	CCharType	systmDescrText [ systmStringSize ];
static	CCharType	systmHostName [ (MAXHOSTNAMELEN + 1) ];
static	MivStrType	systmDescrStr;

static	CByteType	systmObjId [ systmStringSize ];
static	MivStrType	systmIdStr;

static	struct	timeval	systmBootTime;

static	MixStatusType	systmTimeRelease (mix)

MixCookieType		mix;

{
	mix = mix;
	return (smpErrorGeneric);
}


static	MixStatusType	systmTimeNoSet (mix, name, namelen, value)

MixCookieType		mix;
MixNamePtrType		name;
MixLengthType		namelen;
AsnIdType		value;

{
	mix = mix;
	name = name;
	namelen = namelen;
	value = value;
	return (smpErrorReadOnly);
}

static	MixStatusType	systmTimeCreate (mix, name, namelen, value)

MixCookieType		mix;
MixNamePtrType		name;
MixLengthType		namelen;
AsnIdType		value;

{
	mix = mix;
	name = name;
	namelen = namelen;
	value = value;
	return (smpErrorGeneric);
}

static	MixStatusType	systmTimeDestroy (mix, name, namelen)

MixCookieType		mix;
MixNamePtrType		name;
MixLengthType		namelen;

{
	mix = mix;
	name = name;
	namelen = namelen;
	return (smpErrorGeneric);
}

static	AsnIdType	systmTimeGet (mix, name, namelen)

MixCookieType		mix;
MixNamePtrType		name;
MixLengthType		namelen;

{
	struct	timeval		now;
	CUnslType		uptime;

	mix = mix;
	if ((namelen != (MixLengthType) 1) ||
		(*name != (MixNameType) 0)) {
		return ((AsnIdType) 0);
	}
	else {
		(void) gettimeofday (& now, (struct timezone *) 0);
		uptime = (CUnslType) (now.tv_sec - systmBootTime.tv_sec) *
			(CUnslType) 100;
		return (asnUnsl (asnClassApplication, (AsnTagType) 3, uptime));
	}
}

static	AsnIdType	systmTimeNext (mix, name, namelenp)

MixCookieType		mix;
MixNamePtrType		name;
MixLengthPtrType	namelenp;

{
	struct	timeval		now;
	CUnslType		uptime;

	mix = mix;
	if (*namelenp != (MixLengthType) 0) {
		return ((AsnIdType) 0);
	}
	else {
		*namelenp = (MixLengthType) 1;
		*name = (MixNameType) 0;
		DEBUG2 ("systmTimeNext: boot %d %d\n",
			systmBootTime.tv_sec,
			systmBootTime.tv_usec);
		(void) gettimeofday (& now, (struct timezone *) 0);
		DEBUG2 ("systmTimeNext: now %d %d\n",
			now.tv_sec,
			now.tv_usec);
		uptime = (CUnslType) (now.tv_sec - systmBootTime.tv_sec) *
			(CUnslType) 100;
		DEBUG1 ("systmTimeNext: uptime %d\n", uptime);
		return (asnUnsl (asnClassApplication, (AsnTagType) 3, uptime));
	}
}

static	MixOpsType	systmTimeOps	= {

			systmTimeRelease,
			systmTimeCreate,
			systmTimeDestroy,
			systmTimeNext,
			systmTimeGet,
			systmTimeNoSet

			};

CVoidType		systmInit ()

{
	long		gethostid ();
	int		gethostname ();
	long		hostid;
	struct	nlist	nl [ 2 ];

	CCharType	playArea [ systmStringSize ];
	CIntfType	k;

	if (gethostname ((char *) systmHostName, (int) MAXHOSTNAMELEN) < 0) {
		(void) sprintf (systmDescrText, "Unknown BSD Unix Host");
	}
	else {
		systmHostName [ MAXHOSTNAMELEN ] = (CCharType) 0;
		(void) sprintf (systmDescrText, "BSD Unix Host %s",
			systmHostName);
	}

	systmDescrStr.mivStrData = (CBytePtrType) systmDescrText;
	systmDescrStr.mivStrMaxLen = (CUnsfType) systmStringSize;
	systmDescrStr.mivStrLen = (CUnsfType) strlen (systmDescrText);

	(void) mivStringRO ((MixNamePtrType) "\53\6\1\2\1\1\1",
		(MixLengthType) 7, & systmDescrStr);

	hostid = gethostid ();
	DEBUG1 ("systmInit: Hostid %d\n", hostid);
	/* enterprises 1.3.6.1.4.1; mit 20; lcs 1	*/
	(void) sprintf (playArea, "1.3.6.1.4.1.20.1.%d", hostid);
	k = oidEncode (systmObjId, (CIntfType) systmStringSize, playArea);
	if (k > (CIntfType) 0) {
		systmIdStr.mivStrData = systmObjId;
		systmIdStr.mivStrMaxLen = (CUnsfType) systmStringSize;
		systmIdStr.mivStrLen = (CUnsfType) k;

		(void) mivObjectIdRO ((MixNamePtrType) "\53\6\1\2\1\1\2",
			(MixLengthType) 7, & systmIdStr);
	}

	nl [ 0 ].n_name = "_boottime";
	nl [ 1 ].n_name = (char *) 0;

	if (nlist ("/vmunix", nl) == 0) {
		(void) kmemRead ((CBytePtrType) & systmBootTime,
			(CIntfType) sizeof (systmBootTime),
			(CUnslType) nl [ 0 ].n_value);
	}
	else {
		systmBootTime.tv_sec = (long) 0;
		systmBootTime.tv_usec = (long) 0;
	}

	(void) misExport ((MixNamePtrType) "\53\6\1\2\1\1\3",
		(MixLengthType) 7, & systmTimeOps, (MixCookieType) 0);
}