Author: ctian Date: Thu Jun 7 02:23:53 2007 New Revision: 20
Added: trunk/advance.lisp trunk/zilong.lisp Modified: trunk/asn1.lisp trunk/classes.lisp trunk/load.lisp trunk/net-snmp.asd trunk/package.lisp trunk/snmp-api.lisp Log: use cffi again, since I can patch it to support 64bit lispworks
Added: trunk/advance.lisp ============================================================================== --- (empty file) +++ trunk/advance.lisp Thu Jun 7 02:23:53 2007 @@ -0,0 +1,2 @@ +(in-package :org.net-snmp) +
Modified: trunk/asn1.lisp ============================================================================== --- trunk/asn1.lisp (original) +++ trunk/asn1.lisp Thu Jun 7 02:23:53 2007 @@ -6,30 +6,15 @@ c-oids c-oid-len))
-#-lispworks (defmethod shared-initialize :after ((instance oid) slot-names &rest initargs) (declare (ignore slot-names initargs)) (with-slots (name length c-oids c-oid-len) instance (progn (setf c-oids (foreign-alloc 'c-oid :count +max-oid-len+) c-oid-len (foreign-alloc 'c-size-type :initial-element +max-oid-len+)) - (if (and (> (length name) 0) - (eq (elt name 0) #.)) - (c-read-objid name c-oids c-oid-len) - (c-get-node name c-oids c-oid-len)) + (c-read-objid name c-oids c-oid-len) (setf length (mem-ref c-oid-len 'c-size-type)))))
-#+lispworks -(defmethod shared-initialize :after ((instance oid) slot-names &rest initargs) - (declare (ignore slot-names initargs)) - (with-slots (name length c-oids c-oid-len) instance - (progn - (setf c-oids (fli:allocate-foreign-object :type 'oid :nelems +max-oid-len+) - c-oid-len (fli:allocate-foreign-object :type 'size-t)) - (read-objid name c-oids c-oid-len) - (setf length (fli:dereference c-oid-len))))) - -#-lispworks (defun snmp-var->value (v) (case (foreign-slot-value v 'c-variable-list 'c-type) ;; ASN_INTEGER @@ -42,19 +27,3 @@ (foreign-slot-value v 'c-variable-list 'c-val) (foreign-slot-value v 'c-variable-list 'c-val-len))) (otherwise :others))) - -#+lispworks -(defun snmp-var->value (v) - (case (fli:foreign-slot-value v 'type) - ;; ASN_INTEGER - (#x02 - (fli:dereference - (fli:foreign-slot-value (fli:foreign-slot-pointer v 'val) - 'integer))) - ;; ASN_OCTET_STR - (#x04 - (fli:convert-from-foreign-string - (fli:foreign-slot-value (fli:foreign-slot-pointer v 'val) - 'string) - :length (fli:foreign-slot-value v 'val-len))) - (otherwise (fli:foreign-slot-value v 'type))))
Modified: trunk/classes.lisp ============================================================================== --- trunk/classes.lisp (original) +++ trunk/classes.lisp Thu Jun 7 02:23:53 2007 @@ -42,7 +42,6 @@ :initform "01234567") c-session))
-#-lispworks (defmethod shared-initialize :after ((instance snmp-session) slot-names &rest initargs) (declare (ignore slot-names initargs)) (with-slots (peername version c-session) instance @@ -101,49 +100,6 @@ (error "Error generating Ku from authentication pass phrase."))))))) (t (error "unknown snmp version!"))))))
-#+lispworks -(defmethod shared-initialize :after ((instance snmp-session) slot-names &rest initargs) - (declare (ignore slot-names initargs)) - (with-slots (peername version c-session) instance - (progn - (setf c-session (fli:allocate-foreign-object :type 'netsnmp-session)) - (snmp-sess-init c-session) - (setf (fli:foreign-slot-value c-session 'peername) (fli:convert-to-foreign-string peername) - (fli:foreign-slot-value c-session 'version) version) - (cond ((or (= version +snmp-version-1+) - (= version +snmp-version-2c+)) - (with-slots (community) instance - (setf (fli:foreign-slot-value c-session 'community) (fli:convert-to-foreign-string community) - (fli:foreign-slot-value c-session 'community-len) (length community)))) - ;; SNMPv3 support - ((= version +snmp-version-3+) - (with-slots (security-name security-auth-proto passphrase) instance - (progn - (setf (fli:foreign-slot-value c-session 'security-name) (fli:convert-to-foreign-string security-name) - (fli:foreign-slot-value c-session 'security-name-len) (length security-name) - ;; we only support authNoPriv now - (fli:foreign-slot-value c-session 'security-level) +snmp-sec-level-authnopriv+ - (fli:foreign-slot-value c-session 'security-auth-key-len) +usm-auth-ku-len+) - (case security-auth-proto - (:hmac-md5 - (setf (fli:foreign-slot-value c-session 'security-auth-proto) +usm-hmac-md5-auth-protocol+ - (fli:foreign-slot-value c-session 'security-auth-proto-len) +usm-hmac-md5-auth-protocol-len+)) - (:hmac-sha1 - (setf (fli:foreign-slot-value c-session 'security-auth-proto) +usm-hmac-sha1-auth-protocol+ - (fli:foreign-slot-value c-session 'security-auth-proto-len) +usm-hmac-sha1-auth-protocol-len+))) - (fli:with-foreign-string (c-passphrase c-passphrase-len byte-count) - passphrase - (declare (ignore byte-count)) - (if (/= (generate-ku (fli:foreign-slot-value c-session 'security-auth-proto) - (fli:foreign-slot-value c-session 'security-auth-proto-len) - c-passphrase - c-passphrase-len - (fli:foreign-array-pointer (fli:foreign-slot-pointer c-session 'security-auth-key) 0) - (fli:foreign-slot-pointer c-session 'security-auth-key-len)) - +snmp-err-success+) - (error "Error generating Ku from authentication pass phrase.")))))) - (t (error "unknown snmp version!")))))) - (defmethod snmp-msg-get ((s snmp-session) (o oid)) (car (snmp-msg-get-list s (list o))))
@@ -156,7 +112,6 @@ (defmethod snmp-msg-get ((s string) (o oid)) (snmp-msg-get (make-instance 'snmp-session :peername s) o))
-#-lispworks (defmethod snmp-msg-get-list ((s snmp-session) (oids list)) (let ((ss (c-snmp-open (slot-value s 'c-session))) (pdu (c-snmp-pdu-create +snmp-msg-get+)) @@ -176,47 +131,21 @@ (let ((status (c-snmp-synch-response ss pdu response))) (setf values (if (and (= status +snmp-stat-success+) - (= (foreign-slot-value (mem-aref response :pointer) 'c-snmp-pdu 'c-errstat) + (= (foreign-slot-value (mem-aref response :pointer) + 'c-snmp-pdu + 'c-errstat) +snmp-err-noerror+)) - (loop for vars = (foreign-slot-value (mem-aref response :pointer) - 'c-snmp-pdu 'c-variables) - then (foreign-slot-value vars 'c-variable-list 'c-next-variable) + (loop for vars = (foreign-slot-value (mem-aref response :pointer) + 'c-snmp-pdu + 'c-variables) + then (foreign-slot-value vars + 'c-variable-list + 'c-next-variable) until (null-pointer-p vars) collect (snmp-var->value vars))))) (c-snmp-pdu-free (mem-aref response :pointer)) (c-snmp-close ss) values)))
-#+lispworks -(defmethod snmp-msg-get-list ((s snmp-session) (oids list)) - (let ((ss (snmp-open (slot-value s 'c-session))) - (pdu (snmp-pdu-create +snmp-msg-get+)) - values) - (fli:with-dynamic-foreign-objects ((response (:pointer netsnmp-pdu))) - (progn - ;; 1. fill oids into request pdu - (dolist (o oids) - (let ((real-o (typecase o - (oid o) - (string (make-instance 'oid :name o)) - (t (error "unknown oid type"))))) - (snmp-add-null-var pdu - (slot-value real-o 'c-oids) - (fli:dereference (slot-value real-o 'c-oid-len))))) - ;; 2. get results from response pdu - (let ((status (snmp-synch-response ss pdu response))) - (setf values - (if (and (= status +snmp-stat-success+) - (= (fli:foreign-slot-value (fli:dereference response) 'errstat) - +snmp-err-noerror+)) - (loop for vars = (fli:foreign-slot-value (fli:dereference response) - 'variables) - then (fli:foreign-slot-value vars 'next-variable) - until (fli:null-pointer-p vars) - collect (snmp-var->value vars))))) - (snmp-free-pdu (fli:dereference response)) - (snmp-close ss) - values)))) - (defmethod snmp-msg-get-list ((s string) (oids list)) (snmp-msg-get-list (make-instance 'snmp-session :peername s) oids))
Modified: trunk/load.lisp ============================================================================== --- trunk/load.lisp (original) +++ trunk/load.lisp Thu Jun 7 02:23:53 2007 @@ -1,6 +1,5 @@ (in-package :org.net-snmp)
(eval-when (:load-toplevel) - (init-snmp "snmpapp") + (c-snmp-init "snmpapp") (format t "Net-SNMP Initialized.~%")) -
Modified: trunk/net-snmp.asd ============================================================================== --- trunk/net-snmp.asd (original) +++ trunk/net-snmp.asd Thu Jun 7 02:23:53 2007 @@ -1,41 +1,36 @@ ;;;; -*- Mode: Lisp -*-
+(in-package :cl-user) + (defpackage :net-snmp-system (:use :cl :asdf))
(in-package :net-snmp-system)
-(require "foreign-parser") -(require "sql") - (defsystem net-snmp :description "Common Lisp interface for Net-SNMP" - :version "0.5" + :version "0.6" :author "Chun Tian (binghe) binghe.lisp@gmail.com" - :depends-on (#-lispworks :cffi) + :depends-on (:cffi) :components ((:file "package") (:file "constants" :depends-on ("package")) - #-lispworks (:file "typedefs" :depends-on ("constants")) - #+lispworks (:file "net-snmp-dff" :depends-on ("constants")) - #+lispworks (:file "lw-dff" :depends-on ("net-snmp-dff")) - #+lispworks (:file "load" :depends-on ("lw-dff")) - #-lispworks (:file "snmp-api" :depends-on ("constants" "typedefs")) - (:file "asn1" :depends-on (#-lispworks "typedefs" #+lispworks "load")) - (:file "classes" :depends-on ("asn1")))) + (:file "typedefs" :depends-on ("constants")) + (:file "snmp-api" :depends-on ("typedefs")) + (:file "load" :depends-on ("snmp-api")) + (:file "asn1" :depends-on ("load")) + (:file "classes" :depends-on ("asn1")) + (:file "advance" :depends-on ("classes"))))
(defsystem sabrina :description "Sabrina - Update server status into database" :version "0.1" :author "Chun Tian (binghe) binghe.lisp@gmail.com" :depends-on (:net-snmp - :net-telent-date) - :components ((:file "sabrina"))) - -(defun make-fli-dff () - (foreign-parser:process-foreign-file "net-snmp.h" - :dff "net-snmp-dff.lisp" - :case-sensitive :split-name - :package :org.net-snmp)) + :net-telent-date + :hunchentoot + :clsql-postgresql) + :components ((:file "sabrina") + (:file "zilong" :depends-on ("sabrina"))))
;; (fli:start-collecting-template-info) (defun make-fli-templates ()
Modified: trunk/package.lisp ============================================================================== --- trunk/package.lisp (original) +++ trunk/package.lisp Thu Jun 7 02:23:53 2007 @@ -2,7 +2,7 @@
(defpackage :org.net-snmp (:nicknames :snmp) - (:use :cl #-lispworks :cffi) + (:use :cl :cffi) (:export ;; class snmp-session oid @@ -16,13 +16,8 @@
(in-package :org.net-snmp)
-#-lispworks (eval-when (:compile-toplevel :load-toplevel) (define-foreign-library libsnmp (:unix "libsnmp.so") (t (:default "libsnmp"))) (use-foreign-library libsnmp)) - -#+lispworks -(eval-when (:compile-toplevel :load-toplevel) - (fli:register-module "libsnmp.so"))
Modified: trunk/snmp-api.lisp ============================================================================== --- trunk/snmp-api.lisp (original) +++ trunk/snmp-api.lisp Thu Jun 7 02:23:53 2007 @@ -1,11 +1,6 @@ (in-package :org.net-snmp)
-(eval-when (:compile-toplevel :load-toplevel) - (defcfun ("init_snmp" c-snmp-init) :void (type :string))) - -(eval-when (:load-toplevel :execute) - (progn (c-snmp-init "snmpapp") - (format t "c-snmp-init called.~%"))) +(defcfun ("init_snmp" c-snmp-init) :void (type :string))
;;; ;;; Initializes the session structure.
Added: trunk/zilong.lisp ============================================================================== --- (empty file) +++ trunk/zilong.lisp Thu Jun 7 02:23:53 2007 @@ -0,0 +1,2 @@ +(in-package :org.net-snmp.sabrina) +
cl-net-snmp-cvs@common-lisp.net