[Nut-upsdev] [PATCH 08/36] try to fix this a bit, but ultimately deprecate it entirely
Greg A. Woods
woods at planix.com
Thu Mar 8 23:21:19 UTC 2012
From: "Greg A. Woods" <woods at planix.com>
This script is an abomination, and should not be necessary. I have
temporarily re-implemented it in C as an option to the snmp-ups driver
itself. Eventually nut-scanner should link directly with the *-mib.c
modules instead.
---
tools/nut-snmpinfo.py | 70 +++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 59 insertions(+), 11 deletions(-)
diff --git a/tools/nut-snmpinfo.py b/tools/nut-snmpinfo.py
index 89cc359..8b26ed1 100755
--- a/tools/nut-snmpinfo.py
+++ b/tools/nut-snmpinfo.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+#
# Copyright (C) 2011 - Frederic Bohe <fredericbohe at eaton.com>
#
# This program is free software; you can redistribute it and/or modify
@@ -15,24 +16,58 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-# This program extracts all SNMP information related to NUT snmp-ups
-# drivers.
+# NOTICE!!!
+#
+# This script has been deprecated. It remains here only in hopes of
+# helping anyone trying to set up cross-compilation. It is not
+# regularly tested, and it may not work! See the comments about how
+# it could be improved.
+
+# This massive mess of trouble attempts to extract some SNMP
+# information from the MIB-defining source code modules of the NUT
+# snmp-ups driver so that it can be encoded into the nut-scanner
+# program.
+import sys
+import getpass
+import time
import glob
import re
output_file_name="./nut-scanner/nutscan-snmp.h"
output_file = open(output_file_name,'w')
-#expand #define constant
+# expand a #define constant, recursively
+#
+# XXX this is really gross and ugly, and should be done by cpp
+# instead!!!
+#
+# some Makefile should list each file documenting a MIB and a rule
+# should be defined therein to create a *.i file from each of those
+# files using $(CPP), like this:
+#
+# .c.i:
+# $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) -o $@ $<
+#
+# Then this script would merely look for the definition of the varible
+# with the type "mib2nut_info_t" in the resulting *.i files and decode
+# that as necessary
+#
+# Even better than trying to parse C struct initializers would be a
+# wee C program, or perhaps a hidden option to snmp-ups itself, that
+# would do this direct from the data defined in these mib2nut_info_t
+# variables.
+#
def expand_define(filename,constant):
ret_line = ""
f = open(filename, 'r')
for line in f:
- if constant in line and "#define" in line:
- line_without_carriage_return = re.sub("[\n\r]", "", line)
+ nocomment = re.sub("[ ]*/\*.*\*/[ ]*", "", line)
+ if constant in nocomment and "#define" in nocomment:
+ line_without_carriage_return = re.sub("[\n\r]", "", nocomment)
line_with_single_blank = re.sub("[ \t]+", " ", line_without_carriage_return)
- define_line = line_with_single_blank.split(" ");
+ define_line = line_with_single_blank.split(" ")
+ #print define_line
#define_line[0] = "#define"
#define_line[1] = const name
#define_line[2...] = const value (may be other const name)
@@ -44,11 +79,15 @@ def expand_define(filename,constant):
clean_elem = re.sub("\"", "", elem)
ret_line = ret_line + clean_elem
else:
- ret_line = ret_line + expand_define(filename,elem);
+ #print "recursing into " + filename + " for " + elem
+ ret_line = ret_line + expand_define(filename, elem)
+ f.close()
+
return ret_line
output_file.write( "/* nutscan-snmp\n" )
+output_file.write( " *\n" )
output_file.write( " * Copyright (C) 2011 - Frederic Bohe <fredericbohe at eaton.com>\n" )
output_file.write( " *\n" )
output_file.write( " * This program is free software; you can redistribute it and/or modify\n" )
@@ -65,6 +104,10 @@ output_file.write( " * You should have received a copy of the GNU General Publi
output_file.write( " * along with this program; if not, write to the Free Software\n" )
output_file.write( " * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" )
output_file.write( " */\n" )
+output_file.write( "/*\n" )
+output_file.write( " * WARNING!!! This file was generated by: " + sys.argv[0] + "\n" )
+output_file.write( " * (run by: " + getpass.getuser() + " on: " + time.ctime() + ")\n" )
+output_file.write( " */\n" )
output_file.write( "\n" )
output_file.write( "#ifndef DEVSCAN_SNMP_H\n" )
output_file.write( "#define DEVSCAN_SNMP_H\n" )
@@ -78,6 +121,9 @@ output_file.write( "\n" )
output_file.write( "/* SNMP IDs device table */\n" )
output_file.write( "static snmp_device_id_t snmp_device_table[] = {\n" )
+
+# Holy ugly parsing Batman!
+#
for filename in glob.glob('../drivers/*-mib.c'):
list_of_line = open(filename,'r').read().split(';')
for line in list_of_line:
@@ -99,7 +145,9 @@ for filename in glob.glob('../drivers/*-mib.c'):
else:
source_sysoid = "NULL"
- #decode source_oid
+ #print "found OID '" + source_oid + "', and sysOID '" + source_sysoid + "' in " + filename
+
+ # decode source_oid
line = source_oid.lstrip(" ")
line2 = line.split(" ")
@@ -109,9 +157,9 @@ for filename in glob.glob('../drivers/*-mib.c'):
clean_elem = re.sub("\"", "", elem)
oid = oid+clean_elem
else:
- oid = oid + expand_define(filename,elem);
+ oid = oid + expand_define(filename, elem);
- #decode source_sysoid
+ # decode source_sysoid
line = source_sysoid.lstrip(" ")
line = line.rstrip(" ")
line2 = line.split(" ")
@@ -122,7 +170,7 @@ for filename in glob.glob('../drivers/*-mib.c'):
clean_elem = re.sub("\"", "", elem)
sysoid = sysoid+clean_elem
else:
- sysoid = sysoid + expand_define(filename,elem);
+ sysoid = sysoid + expand_define(filename, elem);
if sysoid == "":
sysoid = "NULL"
--
1.7.9.2
More information about the Nut-upsdev
mailing list