[cl-net-snmp-cvs] r67 - in trunk: . mib smi snmp
ctian at common-lisp.net
ctian at common-lisp.net
Tue Oct 16 19:53:59 UTC 2007
Author: ctian
Date: Tue Oct 16 15:53:58 2007
New Revision: 67
Added:
trunk/fli-templates.lisp
Modified:
trunk/deliver.lisp
trunk/mib/build.lisp
trunk/smi/message.lisp
trunk/smi/pdu.lisp
trunk/snmp/package.lisp
trunk/snmp/session.lisp
trunk/snmp/snmp-get.lisp
trunk/snmp/snmp-walk.lisp
Log:
SNMP Walk fixed
Modified: trunk/deliver.lisp
==============================================================================
--- trunk/deliver.lisp (original)
+++ trunk/deliver.lisp Tue Oct 16 15:53:58 2007
@@ -4,14 +4,14 @@
;;; Where we are going to deliver the image.
-(defvar *delivered-image-name* "mbrowse")
+(defvar *delivered-image-name* "~/mbrowse")
;;; Load the "application".
(clc:clc-require :net-snmp)
-(mib:build-mib-tree)
+(mib:build-tree)
;; Deliver.
-(deliver 'mib:browser *delivered-image-name* 5 :interface :capi)
+(deliver 'mib:browser *delivered-image-name* 0 :interface :capi)
Added: trunk/fli-templates.lisp
==============================================================================
Modified: trunk/mib/build.lisp
==============================================================================
--- trunk/mib/build.lisp (original)
+++ trunk/mib/build.lisp Tue Oct 16 15:53:58 2007
@@ -114,3 +114,6 @@
(format t "Parsing ~A" i)
(read-mib (mib-pathname i))
(format t ".~%")))
+
+(eval-when (:load-toplevel :execute)
+ (build-tree))
Modified: trunk/smi/message.lisp
==============================================================================
--- trunk/smi/message.lisp (original)
+++ trunk/smi/message.lisp Tue Oct 16 15:53:58 2007
@@ -8,7 +8,7 @@
:initarg :community
:reader message-comminity)
(data :initarg :data
- :reader message-data)))
+ :accessor message-data)))
(defmethod ber-encode ((value message))
(with-slots (version community data) value
Modified: trunk/smi/pdu.lisp
==============================================================================
--- trunk/smi/pdu.lisp (original)
+++ trunk/smi/pdu.lisp Tue Oct 16 15:53:58 2007
@@ -2,11 +2,11 @@
(defclass base-pdu ()
((request-id :type (unsigned-byte 32)
- :reader request-id
+ :accessor request-id
:initform 0
:initarg :request-id)
(variable-bindings :type list
- :reader variable-bindings
+ :accessor variable-bindings
:initform nil
:initarg :variable-bindings)))
Modified: trunk/snmp/package.lisp
==============================================================================
--- trunk/snmp/package.lisp (original)
+++ trunk/snmp/package.lisp Tue Oct 16 15:53:58 2007
@@ -3,7 +3,8 @@
(defpackage :com.netease.snmp
(:nicknames snmp)
(:use :common-lisp :smi :asn.1 :mib #-win32 :net.sockets #-win32 :io.streams)
- (:export v1-session v2c-session v3-session
+ (:export v1-session v2c-session v3-session make-session
+ *default-version* *default-community* *default-port*
snmp-get snmp-walk))
(in-package :snmp)
Modified: trunk/snmp/session.lisp
==============================================================================
--- trunk/snmp/session.lisp (original)
+++ trunk/snmp/session.lisp Tue Oct 16 15:53:58 2007
@@ -1,5 +1,10 @@
(in-package :snmp)
+(defvar *default-version* +snmp-version-1+)
+(defvar *default-port* 161)
+(defvar *default-community* "public")
+(defvar *default-class* 'v1-session)
+
#-win32
(defclass session ()
((socket :reader socket
@@ -8,20 +13,20 @@
(version :reader version
:initarg :version
:type integer
- :initform +snmp-version-1+)))
+ :initform *default-version*)))
#+win32
(defclass session ()
((version :reader version
:initarg :version
:type integer
- :initform +snmp-version-1+)))
+ :initform *default-version*)))
(defclass v1-session (session)
((community :reader community
:initarg :community
:type string
- :initform "public"))
+ :initform *default-community*))
(:documentation "SNMP v1 session, community based"))
(defmethod initialize-instance :after ((instance v1-session)
@@ -57,3 +62,13 @@
&rest initargs &key &allow-other-keys)
(declare (ignore initargs))
(setf (slot-value instance 'version) +snmp-version-3+))
+
+(defun make-session (host &key (class *default-class*)
+ (port *default-port*)
+ (community *default-community*))
+ (let ((socket (make-socket :remote-host host
+ :remote-port port
+ :type :datagram
+ :ipv6 nil)))
+ (set-socket-option socket :receive-timeout :timeval '(1 0))
+ (make-instance class :socket socket :community community)))
Modified: trunk/snmp/snmp-get.lisp
==============================================================================
--- trunk/snmp/snmp-get.lisp (original)
+++ trunk/snmp/snmp-get.lisp Tue Oct 16 15:53:58 2007
@@ -4,15 +4,7 @@
(:documentation "SNMP Get"))
(defmethod snmp-get ((host string) &rest vars)
- (let ((socket (make-socket :remote-host host
- :remote-port 161
- :type :datagram
- :ipv6 nil)))
- (let ((session (make-instance 'v2c-session
- :socket socket
- :community "public")))
- (values (apply #'snmp-get session vars)
- session))))
+ (apply #'snmp-get (make-session host) vars))
#-win32
(defmethod snmp-get ((session v1-session) &rest vars)
Modified: trunk/snmp/snmp-walk.lisp
==============================================================================
--- trunk/snmp/snmp-walk.lisp (original)
+++ trunk/snmp/snmp-walk.lisp Tue Oct 16 15:53:58 2007
@@ -3,48 +3,21 @@
(defgeneric snmp-walk (object var)
(:documentation "SNMP Walk"))
-#-win32
(defmethod snmp-walk ((host string) var)
- (let ((socket (make-socket :remote-host host
- :remote-port 161
- :type :datagram
- :ipv6 nil)))
- (let ((session (make-instance 'v1-session
- :socket socket
- :community "public")))
- (values (snmp-walk session var) session))))
+ (apply #'snmp-walk (make-session host) var))
#-win32
(defmethod snmp-walk ((session v1-session) (var object-id))
- (labels ((iter (acc)
- (let ((message (make-instance 'message
- :version (version session)
- :community (community session)
- :data (make-instance 'get-next-request-pdu
- :request-id 0
- :variable-bindings (list (list var nil))))))
- (let ((data (ber-encode message)))
- (socket-send (make-array (length data)
- :element-type '(unsigned-byte 8)
- :adjustable nil
- :initial-contents data
- #+lispworks :allocation #+lispworks :static)
- (socket session))
- (let ((result (decode-message (socket session))))
- (if (= (error-status (message-data result)) +snmp-err-nosuchname+)
- (nreverse acc)
- (iter (cons (car (variable-bindings (message-data result))) acc))))))))
- (iter nil)))
-
-#-win32
-(defmethod snmp-walk ((session v2c-session) (var object-id))
- (labels ((iter (acc)
- (let ((message (make-instance 'message
- :version (version session)
- :community (community session)
- :data (make-instance 'get-next-request-pdu
- :request-id 0
- :variable-bindings (list (list var nil))))))
+ "SNMP Walk for v1 and v2c"
+ (let ((message (make-instance 'message
+ :version (version session)
+ :community (community session)
+ :data (make-instance 'get-next-request-pdu
+ :request-id 0
+ :variable-bindings (list nil)))))
+ (labels ((iter (v id acc)
+ (setf (car (variable-bindings (message-data message))) (list v nil)
+ (request-id (message-data message)) id)
(let ((data (ber-encode message)))
(socket-send (make-array (length data)
:element-type '(unsigned-byte 8)
@@ -54,10 +27,10 @@
(socket session))
(let ((result (decode-message (socket session))))
(let ((vb (car (variable-bindings (message-data result)))))
- (if (null (second vb))
- (nreverse acc)
- (iter (cons vb acc)))))))))
- (iter nil)))
+ (if (not (oid-< (car vb) var))
+ (nreverse acc)
+ (iter (first vb) (1+ id) (cons vb acc))))))))
+ (iter var 0 nil))))
(defmethod snmp-walk ((session v1-session) (var string))
(let ((oid (resolve var)))
More information about the Cl-net-snmp-cvs
mailing list