Re: DHCP server command and control

Erikas Aras Napjus <erikas+@cmu.edu> Wed, 07 August 1996 22:50 UTC

Received: from ietf.org by ietf.org id aa24177; 7 Aug 96 18:50 EDT
Received: from cnri by ietf.org id aa24172; 7 Aug 96 18:50 EDT
Received: from reef.bucknell.edu by CNRI.Reston.VA.US id aa17114; 7 Aug 96 18:50 EDT
Received: from localhost by reef.bucknell.edu with SMTP (5.65/IDA-1.2.8) id AA20284; Wed, 7 Aug 1996 18:42:33 -0400
Date: Wed, 7 Aug 1996 18:42:33 -0400
Message-Id: <Im2FFju00UM1JJnZZ3@andrew.cmu.edu>
Errors-To: droms@bucknell.edu
Reply-To: dhcp-v4@bucknell.edu
Originator: dhcp-v4@bucknell.edu
X-Orig-Sender: dhcp-v4@bucknell.edu
Precedence: bulk
Sender: ietf-archive-request@ietf.org
From: Erikas Aras Napjus <erikas+@cmu.edu>
To: Multiple recipients of list <dhcp-v4@bucknell.edu>
Subject: Re: DHCP server command and control
X-Listprocessor-Version: 6.0c -- ListProcessor by Anastasios Kotsikonas
X-Comment: Discussion of DHCP for IPv4

I don't know exactly why my address isn't appearing on postings. It's
erikas@cmu.edu. You might also want to send more general mail to
bootp@andrew.cmu.edu since it gets archived and read by my (limited)
development group.

The DHCP MIB implemented for our DHCP server currently uses space in the
enterprises/cmu part of the tree for lack of any place better. I helped
Chris Davis with some of the initial planning, but most of this is his
work. He has now gone off to (evil) industry, so I'm covering basics
until we can get a new systems programmer up to speed on the issues. 

This MIB is by no means comprehensive, but it's the basic stuff that we
wanted to see available for debugging and monitoring. We also gave some
thought to eventually proposing this as a means of server-to-server
communications for DHCP, but never specifically headed in that
direction. About the only real localized hack I know of is the "unknown"
table. We have a working implementation of this with a few remaining
bugs. 

Here's the most recent version of the MIB with limited comments:

		cmu OBJECT IDENTIFIER ::= { enterprises 3 }
		systems OBJECT IDENTIFIER ::= { cmu 1 }
		mibs OBJECT IDENTIFIER ::= { cmu 2 }
cmuDHCPserverMib	OBJECT IDENTIFIER ::= { mibs 3 }


stats		OBJECT IDENTIFIER ::= { cmuDHCPserverMib 1 }
configure		OBJECT IDENTIFIER ::= { cmuDHCPserverMib 2 }
bindTable	OBJECT IDENTIFIER ::= { cmuDHCPserverMib 3 }
lastbindTable	OBJECT IDENTIFIER ::= { cmuDHCPserverMib 4 }
dynamic		OBJECT IDENTIFIER ::= { cmuDHCPserverMib 5 }
network		OBJECT IDENTIFIER ::= { dynamic 1 }
gateway		OBJECT IDENTIFIER ::= { dynamic 2 }
unknownTable		OBJECT IDENTIFIER ::= { cmuDHCPserverMib 12 }

		uptime	OBJECT-TYPE
			   	SYNTAX  TimeTicks
				ACCESS  read-only
				STATUS  mandatory
				::= { stats 1 }

		verison		OBJECT-TYPE
				SYNTAX	OCTET STRING
				ACCESS read-only
				STATUS 	mandatory
				::= { stats 2}
		-- Last time the bootptab file was read
		lasttabread OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 3 }

		-- Last time the configuration file was read
		lastconfigread OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 4 }

		-- Time scheduled to recollect expired bindings
		nextgarbagecollect OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 5 }

		-- The folling are messages sent and received by the DHCP server
		discovers OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 6 }

		offers OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 7 }

		requests OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 8 }

		declines OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 9 }

		acks OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 10 }

		nacks OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 11 }

		releases OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 12 }

		informs OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 13 }

		bootprequests OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 14 }

		bootpreplys OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 15 }
		activeleases OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 16 }
		expired OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 17 }
		reclaimeddynamic OBJECT-TYPE
				SYNTAX  INTEGER
                ACCESS  read-only
                STATUS  mandatory
				::= { stats 18 }

		command OBJECT-TYPE
				SYNTAX  INTEGER  {
							readtab(1),
							readconf(2),
							flush(3)
							garbagecollect(4)
							}
                ACCESS  write-only
                STATUS  mandatory
				::= { configure 1 }
		tabfile OBJECT-TYPE
				SYNTAX  OCTET STRING  
                ACCESS  read-write
                STATUS  mandatory
				::= { configure 2 }
		conffile OBJECT-TYPE
				SYNTAX  OCTET STRING  
                ACCESS  read-write
                STATUS  mandatory
				::= { configure 3 }
		gcinterval OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS 	read-write
				STATUS	mandatory
				::= { configure 4 }
		flushinterval OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS 	read-write
				STATUS	mandatory
				::= { configure 5 }
		flushitems	OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS 	read-write
				STATUS	mandatory
				::= { configure 6 }

		-- Table of non-expired non-infinite bindings
		bindTable  OBJECT-TYPE
                SYNTAX  SEQUENCE OF bindEntry
                ACCESS  read-only
                STATUS  mandatory
				::= { cmuDHCPserverMib 3 }

		bindEntry OBJECT-TYPE
				SYNTAX	bindEntry
				ACCESS	read-only
				STATUS	mandatory
				::= { bindTable 1}

		bindEntry ::= SEQUENCE {
				clientid
					OCTECT STRING,
				bindaddress
					IpAddress,
				bindexpire
					INTEGER,
				bindcode
					INTEGER
		}

		clientid OBJECT-TYPE
				SYNTAX	OCTET STRING
				ACCESS  read-only
				STATUS	mandatory
				::= { bindEntry 1 }

		bindaddress OBJECT-TYPE
				SYNTAX	IpAddress
				ACCESS  read-only
				STATUS	mandatory
				::= { bindEntry 2 }

		bindexpire OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS  read-only
				STATUS	mandatory
				::= { bindEntry 3 }
		bindcode OBJECT-TYPE
				SYNTAX	INTEGER {
							reserverd(1), -- Address is reserved for client
							dhcp(2),	-- Dynamically assigned via DHCP
							bootp(3),	-- Dynamically assigned via BOOTP
							roaming(3),	-- Dynamically assigned via BOOTP
							synch (4)	-- Binding obtained via synchronization
					}
				ACCESS  read-only
				STATUS	mandatory
				::= { bindEntry 4 }

		-- Bindings which may or may not have expired
		lastbindTable  OBJECT-TYPE
                SYNTAX  SEQUENCE OF lastbindEntry
                ACCESS  read-only
                STATUS  mandatory
				::= { cmuDHCPserverMib 4 }

		lastbindEntry OBJECT-TYPE
				SYNTAX	lastbindEntry
				ACCESS	read-only
				STATUS	mandatory
				::= { lastbindTable 1}

		lastbindEntry ::= SEQUENCE {
				clientid
					OCTECT STRING,
				bindaddress
					IpAddress,
				hwaddress
					OCTECT STRING,
				vendorid
					OCTECT STRING,
				class
					OCTECT STRING,
				replys
					INTEGER,
				lasttouched
					INTEGER,
				bindexpire
					INTEGER,
				misc
					OCTET STRING
		}

		clientid OBJECT-TYPE
				SYNTAX	OCTET STRING
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 1 }

		bindaddress OBJECT-TYPE
				SYNTAX	IpAddress
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 2 }

		hwaddress OBJECT-TYPE
				SYNTAX	OCTET STRING
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 3 }

		vendorid OBJECT-TYPE
				SYNTAX	OCTET STRING
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 4 }

		class OBJECT-TYPE
				SYNTAX	OCTET STRING
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 5 }

		replys OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 6 }

		lasttouched OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 7 }
		bindexpire OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 8 }
		misc OBJECT-TYPE
				SYNTAX	OCTET STRING
				ACCESS  read-only
				STATUS	mandatory
				::= { lastbindEntry 9 }

		networkTable  OBJECT-TYPE
                SYNTAX  SEQUENCE OF networkEntry
                ACCESS  read-only
                STATUS  mandatory
				::= { dynamic 1 }

		networkEntry OBJECT-TYPE
				SYNTAX	networkEntry
				ACCESS	read-only
				STATUS	mandatory
				::= { networkTable 1}

		networkEntry ::= SEQUENCE {
				name
					OCTECT STRING,
				network
					IpAddress,
				mask
					OCTECT STRING,
				code
					INTEGER,
				free
					INTEGER,
				total
					INTEGER
		}

		name OBJECT-TYPE
				SYNTAX OCTET-STRING
				ACCESS	read-write
				STATUS	mandatory
				::= { networkEntry 1 }
		network OBJECT-TYPE
				SYNTAX IpAddress
				ACCESS	read-write
				STATUS	mandatory
				::= { networkEntry 2 }
		mask OBJECT-TYPE
				SYNTAX IpAddress
				ACCESS	read-write
				STATUS	mandatory
				::= { networkEntry 3 }
		code OBJECT-TYPE
				SYNTAX INTEGER	{
						dhcp(1),
						bootp(2),
						roaming(3),
						any(127)
				}
				ACCESS	read-write
				STATUS	mandatory
				::= { networkEntry 4 }

		free OBJECT-TYPE
				SYNTAX INTEGER
				ACCESS	read-write
				STATUS	mandatory
				::= { networkEntry 5 }
		total OBJECT-TYPE
				SYNTAX INTEGER
				ACCESS	read-write
				STATUS	mandatory
				::= { networkEntry 6 }
		-- Table of unknown hardware addresses 
		unknownTable  OBJECT-TYPE
                SYNTAX  SEQUENCE OF unknownEntry
                ACCESS  read-only
                STATUS  mandatory
				::= { cmuDHCPserverMib 12 }

		unknownEntry OBJECT-TYPE
				SYNTAX	bindEntry
				ACCESS	read-only
				STATUS	mandatory
				::= { unknownTable 1}

		unknownEntry ::= SEQUENCE {
				hwaddress
					OCTECT STRING,
				htype
					INTEGER,
				hlen
					INTEGER,
				lastseen
					INTEGER,
				relayagent
					IpAddress,
				fromip
					INTEGER,
		}
		hwaddress OBJECT-TYPE
				SYNTAX	OCTECT-STRING
				ACCESS	read-only
				STATUS	mandatory
				::= { unknownEntry 1}
		htype OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS	read-only
				STATUS	mandatory
				::= { unknownEntry 2}
		hlen OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS	read-only
				STATUS	mandatory
				::= { unknownEntry 3}
		lastseen OBJECT-TYPE
				SYNTAX	INTEGER
				ACCESS	read-only
				STATUS	mandatory
				::= { unknownEntry 4}
		relayagent OBJECT-TYPE
				SYNTAX	IpAddress
				ACCESS	read-only
				STATUS	mandatory
				::= { unknownEntry 5}
		fromip OBJECT-TYPE
				SYNTAX	IpAddress
				ACCESS	read-only
				STATUS	mandatory
				::= { unknownEntry 6}