summaryrefslogtreecommitdiff
path: root/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable')
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt1164
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c387
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h291
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c808
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c1195
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c1508
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h140
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h150
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c1863
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h84
35 files changed, 8810 insertions, 0 deletions
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d
new file mode 100644
index 0000000000..7df110dd15
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUAction
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d
new file mode 100644
index 0000000000..addadd3b78
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUAdminStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d
new file mode 100644
index 0000000000..54e061220b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUAuthorizationState
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d
new file mode 100644
index 0000000000..f4f011fdd0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d
new file mode 100644
index 0000000000..15f84ed569
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUConfigurationResult
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d
new file mode 100644
index 0000000000..8ec94c2463
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUConfigurationSaving
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d
new file mode 100644
index 0000000000..7f6d893a9b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUDownstreamPIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d
new file mode 100644
index 0000000000..035ff2939d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d
new file mode 100644
index 0000000000..65dd4d7ad3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUMACAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d
new file mode 100644
index 0000000000..03bb129ca8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUModelNumber
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d
new file mode 100644
index 0000000000..ba60bfb8ea
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUOnlineStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d
new file mode 100644
index 0000000000..58c9a747d7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPhyDownstreamRate
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d
new file mode 100644
index 0000000000..0d7b09358f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPhyUpstreamRate
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d
new file mode 100644
index 0000000000..873edf22ed
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPortAmount
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d
new file mode 100644
index 0000000000..4a03e0776c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNURFAttenuation
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d
new file mode 100644
index 0000000000..dd8da8146a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNURFDownstreamQuality
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d
new file mode 100644
index 0000000000..b457f2bcc7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNURFUpstreamQuality
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d
new file mode 100644
index 0000000000..dc75d6f035
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUReset
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d
new file mode 100644
index 0000000000..2a99c76a4e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUSoftwareVersion
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d
new file mode 100644
index 0000000000..304b618562
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUUpstreamPIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d
new file mode 100644
index 0000000000..1870f36393
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt
new file mode 100644
index 0000000000..f440935e37
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUTable_Makefile
+
+
+ File : eocCNUTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUTable-README-eocCNUTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt
new file mode 100644
index 0000000000..6e9c74b2f2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt
@@ -0,0 +1,1164 @@
+************************************************************************
+eocCNUTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUTable_allocate_data
+ eocCNUTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUTable_rowreq_ctx_init
+ eocCNUTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUTable table are:
+
+ eocCNUCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocCNUIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCNUTable_data.
+
+
+************************************************************************
+eocCNUTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUTable_indexes_set
+ WHERE: eocCNUTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUMACAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUOnlineStatus_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUModelNumber_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPortAmount_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUAuthorizationState_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUSoftwareVersion_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUReset_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNURFAttenuation_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNURFDownstreamQuality_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNURFUpstreamQuality_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPhyDownstreamRate_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPhyUpstreamRate_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUConfigurationSaving_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUConfigurationResult_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUAction_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUAdminStatus_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUDownstreamPIR_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUUpstreamPIR_get
+
+
+
+File: eocCNUTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCNUTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCNUTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUReset_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUReset_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUReset_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUReset_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUConfigurationSaving_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUConfigurationSaving_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUConfigurationSaving_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUConfigurationSaving_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUAction_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUAction_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUAction_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUAction_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUAdminStatus_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUAdminStatus_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUAdminStatus_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUAdminStatus_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUDownstreamPIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUDownstreamPIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUDownstreamPIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUDownstreamPIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUUpstreamPIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUUpstreamPIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUUpstreamPIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUUpstreamPIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCNUTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCNUTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUTable table.
+
+To watch the flow of the eocCNUTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUTable
+ verbose:eocCNUTable
+ internal:eocCNUTable
+
+e.g.
+ snmpd -f -Le -DeocCNUTable,verbose:eocCNUTable,internal:eocCNUTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUCBATCardIndex
+ * eocCNUCBATCardIndex is subid 1 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUIndex
+ * eocCNUIndex is subid 2 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.2
+ * Description:
+ CNUµÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUMACAddress
+ * eocCNUMACAddress is subid 3 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.3
+ * Description:
+CNUµÄMACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUOnlineStatus
+ * eocCNUOnlineStatus is subid 4 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.4
+ * Description:
+CNUÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUModelNumber
+ * eocCNUModelNumber is subid 5 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.5
+ * Description:
+ÔÚÏßCNUµÄÐͺš£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPortAmount
+ * eocCNUPortAmount is subid 6 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.6
+ * Description:
+ÔÚÏßCNUÒÔÌ«Íø¶Ë¿ÚÊýÁ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAuthorizationState
+ * eocCNUAuthorizationState is subid 7 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.7
+ * Description:
+ÔÚÏßCNUµÄÊÚȨ״̬¡£
+ 0- ·ÇÊÚȨʹÓÃÉ豸£»
+ 1- ºÏ·¨ÊÚȨÉ豸¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: not_authorized(0), authorized(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUSoftwareVersion
+ * eocCNUSoftwareVersion is subid 8 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.8
+ * Description:
+ÔÚÏßCNUµÄ³ÌÐò°æ±¾ºÅ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUReset
+ * eocCNUReset is subid 9 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.9
+ * Description:
+¸´Î»ÔÚÏßCNU£¬Ð´Èë1ʱ£¬¸´Î»¸ÃÔÚÏßÖÕ¶ËÉ豸£»¶Á³ö´ËÖµÎÞÒâÒå¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFAttenuation
+ * eocCNURFAttenuation is subid 10 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.10
+ * Description:
+ÉäƵÐŵÀÁ´Â·Ë¥¼õ£¬µ¥Î»ÎªdB¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 127;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFDownstreamQuality
+ * eocCNURFDownstreamQuality is subid 11 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.11
+ * Description:
+ÉäƵÏÂÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£»ÆÀ¼Û·½Ê½ÓÉÉ豸³§
+ É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFUpstreamQuality
+ * eocCNURFUpstreamQuality is subid 12 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.12
+ * Description:
+ÉäƵÉÏÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£¬ÆÀ¼Û·½Ê½ÓÉÉ豸³§É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyDownstreamRate
+ * eocCNUPhyDownstreamRate is subid 13 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.13
+ * Description:
+CNUÏÂÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyUpstreamRate
+ * eocCNUPhyUpstreamRate is subid 14 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.14
+ * Description:
+CNUÉÏÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving is subid 15 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.15
+ * Description:
+±£´æCNUµÄµ±Ç°ÅäÖÃÖÁ·ÇÒ×ʧÐÔ´æ´¢Æ÷£¬ÉèÖÃΪ1¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationResult
+ * eocCNUConfigurationResult is subid 16 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.16
+ * Description:
+±£´æEoC CNUÉ豸µ±Ç°ÅäÖõĽá¹û:
+ success(0)- ±£´æµ±Ç°Åä³É¹¦,
+ running(1)- ÕýÔÚ±£´æµ±Ç°ÅäÖÃ,
+ failed(2)- ±£´æµ±Ç°ÅäÖÃʧ°Ü¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: success(0), running(1), failed(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAction
+ * eocCNUAction is subid 17 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.17
+ * Description:
+¶ÔCNU½øÐеIJÙ×÷¡£
+ delete(1)- ´ÓCNU±íÖÐɾ³ýCNU, Ö»ÄÜɾ³ý²»ÔÚÏßµÄCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: delete(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAdminStatus
+ * eocCNUAdminStatus is subid 18 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.18
+ * Description:
+CNU¹ÜÀí״̬
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUDownstreamPIR
+ * eocCNUDownstreamPIR is subid 19 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.19
+ * Description:
+unit: kkbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUUpstreamPIR
+ * eocCNUUpstreamPIR is subid 20 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.20
+ * Description:
+ unit: kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c
new file mode 100644
index 0000000000..801b63cc7b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c
@@ -0,0 +1,387 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUTable_interface.h"
+
+oid eocCNUTable_oid[] = { EOCCNUTABLE_OID };
+int eocCNUTable_oid_size = OID_LENGTH(eocCNUTable_oid);
+
+ eocCNUTable_registration eocCNUTable_user_context;
+
+void initialize_table_eocCNUTable(void);
+void shutdown_table_eocCNUTable(void);
+
+int
+handle_eocCNUCurrentAmount (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+int
+handle_eocCNUAmountLimitation (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration
+ *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+/**
+ * Initializes the eocCNUTable module
+ */
+void
+init_eocCNUTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:init_eocCNUTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCNUTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCNUTable"))
+ initialize_table_eocCNUTable();
+
+} /* init_eocCNUTable */
+
+/**
+ * Shut-down the eocCNUTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUTable(void)
+{
+ if (should_init("eocCNUTable"))
+ shutdown_table_eocCNUTable();
+
+}
+
+/**
+ * Initialize the table eocCNUTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUTable (void)
+{
+ eocCNUTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:initialize_table_eocCNUTable",
+ "called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list ("eocCNUTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUTable_initialize_interface (user_context, flags);
+
+
+
+ /*
+ * register scalar for eocCNUCurrentAmount
+ */
+ {
+ static oid eocCNUCurrentAmount_oid[] =
+ { EOCCNUCURRENTAMOUNT_OID };
+
+ netsnmp_register_scalar (netsnmp_create_handler_registration (
+ "eocCNUCurrentAmount",
+ handle_eocCNUCurrentAmount,
+ eocCNUCurrentAmount_oid,
+ OID_LENGTH (eocCNUCurrentAmount_oid),
+ HANDLER_CAN_RONLY));
+
+ }
+ /*
+ * register scalar for eocCNUAmountLimitation
+ */
+ {
+
+ static oid eocCNUAmountLimitation_oid[] =
+ { EOCCNUAMOUNTLIMITATION_OID };
+
+ netsnmp_register_scalar (netsnmp_create_handler_registration (
+ "eocCNUAmountLimitation",
+ handle_eocCNUAmountLimitation,
+ eocCNUAmountLimitation_oid,
+ OID_LENGTH
+ (eocCNUAmountLimitation_oid),
+ HANDLER_CAN_RWRITE));
+ }
+}
+
+/**
+ * Shutdown the table eocCNUTable
+ */
+void
+shutdown_table_eocCNUTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUTable_shutdown_interface(&eocCNUTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUTable_rowreq_ctx_init(eocCNUTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUTable_rowreq_ctx_cleanup(eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUTable rowreq cleanup.
+ */
+} /* eocCNUTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUTable_pre_request(eocCNUTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUTable_post_request(eocCNUTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCNUTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCNUTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_post_request */
+
+
+int
+handle_eocCNUCurrentAmount (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_container * online_container;
+ int curr_amount = 0;
+ int rc;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:handle_eocCNUCurrentAmount",
+ "called\n"));
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ curr_amount = eocCNUTable_RegisteredAmount_get ();
+ if (curr_amount < 0)
+ {
+ snmp_log (LOG_ERR, "error getting Registered Amount\n");
+ /* registered amount is set to -1 to permit walk requests */
+ curr_amount = -1;
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &curr_amount,
+ sizeof (curr_amount));
+ break;
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_modEoCOnlineCNUCurrentAmount\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+handle_eocCNUAmountLimitation (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int amount_limit = LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &amount_limit,
+ sizeof (amount_limit));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ break;
+
+ case MODE_SET_RESERVE2:
+ break;
+
+ case MODE_SET_FREE:
+ break;
+
+ case MODE_SET_ACTION:
+ /* SET request is not supported */
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_NOTWRITABLE);
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in \
+ handle_modEoCOnlineCNUAmountLimitation\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h
new file mode 100644
index 0000000000..403d593a82
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h
@@ -0,0 +1,291 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_H
+#define EOCCNUTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCNUTable */
+#include "eocCNUTable_oids.h"
+
+/* enum definions */
+#include "eocCNUTable_enums.h"
+
+/* include common header */
+#include "EoCCommon.h"
+
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUTable(void);
+void shutdown_eocCNUTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+/* *********************************************************************
+ * When you register your mib, you get to provide a generic
+ * pointer that will be passed back to you for most of the
+ * functions calls.
+ *
+ * TODO:100:r: Review all context structures
+ */
+ /*
+ * TODO:101:o: |-> Review eocCNUTable registration context.
+ */
+typedef netsnmp_data_list eocCNUTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUTable data context structure.
+ * This structure is used to represent the data for eocCNUTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUTable.
+ */
+typedef struct eocCNUTable_data_s {
+
+ /*
+ * eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ char eocCNUMACAddress[6];
+size_t eocCNUMACAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUOnlineStatus(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCNUOnlineStatus;
+
+ /*
+ * eocCNUModelNumber(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCNUModelNumber[255];
+size_t eocCNUModelNumber_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUPortAmount(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortAmount;
+
+ /*
+ * eocCNUAuthorizationState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCNUAuthorizationState;
+
+ /*
+ * eocCNUSoftwareVersion(8)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCNUSoftwareVersion[128];
+
+ size_t eocCNUSoftwareVersion_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUReset;
+
+ /*
+ * eocCNURFAttenuation(10)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocCNURFAttenuation;
+
+ /*
+ * eocCNURFDownstreamQuality(11)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocCNURFDownstreamQuality;
+
+ /*
+ * eocCNURFUpstreamQuality(12)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocCNURFUpstreamQuality;
+
+ /*
+ * eocCNUPhyDownstreamRate(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPhyDownstreamRate;
+
+ /*
+ * eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPhyUpstreamRate;
+
+ /*
+ * eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUConfigurationSaving;
+
+ /*
+ * eocCNUConfigurationResult(16)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCNUConfigurationResult;
+
+ /*
+ * eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUAction;
+
+ /*
+ * eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUAdminStatus;
+
+ /*
+ * eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUDownstreamPIR;
+
+ /*
+ * eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUUpstreamPIR;
+
+} eocCNUTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCNUTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCNUTable_data eocCNUTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCNUTable mib index.
+ * This structure is used to represent the index for eocCNUTable.
+ */
+typedef struct eocCNUTable_mib_index_s {
+
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUCBATCardIndex;
+
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUIndex;
+
+
+} eocCNUTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCNUTable_IDX_LEN 2
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUTable_IDX_LEN];
+
+ eocCNUTable_mib_index tbl_idx;
+
+ eocCNUTable_data data;
+ eocCNUTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * flags per row. Currently, the first (lower) 8 bits are reserved
+ * for the user. See mfd.h for other flags.
+ */
+ u_int rowreq_flags;
+
+ /*
+ * TODO:131:o: | |-> Add useful data to eocCNUTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUTable_data_list;
+
+} eocCNUTable_rowreq_ctx;
+
+typedef struct eocCNUTable_ref_rowreq_ctx_s {
+ eocCNUTable_rowreq_ctx *rowreq_ctx;
+} eocCNUTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUTable_pre_request(eocCNUTable_registration * user_context);
+ int eocCNUTable_post_request(eocCNUTable_registration * user_context,
+ int rc);
+
+ int eocCNUTable_rowreq_ctx_init(eocCNUTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUTable_rowreq_ctx_cleanup(eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCNUTable_commit(eocCNUTable_rowreq_ctx * rowreq_ctx);
+
+ eocCNUTable_rowreq_ctx *
+ eocCNUTable_row_find_by_mib_index(eocCNUTable_mib_index *mib_idx);
+
+extern oid eocCNUTable_oid[];
+extern int eocCNUTable_oid_size;
+extern int saving_result[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+
+
+#include "eocCNUTable_interface.h"
+#include "eocCNUTable_data_access.h"
+#include "eocCNUTable_data_get.h"
+#include "eocCNUTable_data_set.h"
+
+/*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c
new file mode 100644
index 0000000000..ad0d9e3c39
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c
@@ -0,0 +1,808 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+#include "eocCNUTable_data_access.h"
+
+int saving_result[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+/**
+ * initialization for eocCNUTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUTable_reg
+ * Pointer to eocCNUTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUTable_init_data(eocCNUTable_registration * eocCNUTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUTABLE_CACHE_TIMEOUT; /* seconds */
+ /* adjust cache flags */
+ cache->flags |= ( NETSNMP_CACHE_PRELOAD );
+
+ memset (saving_result, 0, sizeof (saving_result));
+} /* eocCNUTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUTable_container_load(netsnmp_container *container)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx;
+ int rc = MFD_SUCCESS;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUCBATCardIndex = 0;
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUIndex;
+ int tmp_index;
+
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ int wl_count;
+ int i;
+
+ wl_count = 128;
+
+ libspid_eoc_wl_entry_t eoc_wl_entry[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_wl_get_list (eoc_wl_entry, &wl_count))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable_container_load:\
+ CNUlibspid_eoc_wl_get_list error\n");
+ return MFD_ERROR;
+ }
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_container_load",
+ "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUTable container.
+ * loop over your eocCNUTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+
+ /* check if the MAC address exists in the list
+ * if it exists, update corresponding data structure
+ * if it doesn't exist, create corresponding data structure
+ */
+ for (i = 0; i < wl_count; i++)
+ {
+ memset (mac_str, 0x0, LIBSPID_MAC_STR_LEN);
+ strcpy (mac_str,eoc_wl_entry[i].mac_addr);
+
+ eocCNUIndex = se_find_value_in_slist ("eoc_online_table", mac_str);
+
+ if (eocCNUIndex == SE_DNE)
+ {
+ if (1 != sscanf (eoc_wl_entry[i].tei, "%d", &tmp_index))
+ {
+ snmp_log (LOG_ERR, "error parsing tei value\n");
+ return MFD_ERROR;
+ }
+
+ eocCNUIndex = tmp_index - 2;
+ se_add_pair_to_slist ("eoc_online_table",
+ strdup (mac_str), eocCNUIndex);
+ DEBUGMSGTL (("eocCNUTable:eocCNUIndex",
+ "new eocCNUIndex %d for %s \n",
+ eocCNUIndex, mac_str));
+ }
+
+
+ if ((NULL == mac_str) || (0 == eocCNUIndex))
+ {
+ rc = MFD_END_OF_DATA;
+ break;
+ }
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCNUTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCNUTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocCNUTable_indexes_set (rowreq_ctx,
+ eocCNUCBATCardIndex,
+ eocCNUIndex))
+ {
+ snmp_log (LOG_ERR,
+ "error setting index while loading "
+ "eocCNUTable data.\n");
+ eocCNUTable_release_rowreq_ctx (rowreq_ctx);
+ continue;
+ }
+
+
+ CONTAINER_INSERT (container, rowreq_ctx);
+
+ }
+ return MFD_SUCCESS;
+} /* eocCNUTable_container_load */
+
+/* manually free row request context (as an item in online table container) */
+void
+_eoc_online_container_item_free (eocCNUTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL (("internal:eocCNUTable_data_access:\
+ _online_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ eocCNUTable_release_rowreq_ctx (rowreq_ctx);
+}
+
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUTable_container_free (netsnmp_container *container)
+{
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_container_free",
+ "called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUTable container data.
+ */
+ if (NULL == container)
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable_container_free: invalid container\n");
+ return;
+ }
+
+ /*
+ * TODO:380:M: Free eocCNUTable container data.
+ */
+
+ /* make sure row request contexts are really released */
+ CONTAINER_CLEAR (container,
+ (netsnmp_container_obj_func *)
+ _eoc_online_container_item_free,
+ NULL);
+
+}
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUTable_row_prep (eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ char eocCNUMACAddress[6];
+ size_t eocCNUMACAddress_len = 6;
+ int eocCNUOnlineStatus = 0;
+ char eocCNUModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCNUModelNumber_len = 0;
+ long eocCNUPortAmount = 0;
+ u_long eocCNUAuthorizationState = 0;
+ char eocCNUSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCNUSoftwareVersion_len = 0;
+ long eocCNURFAttenuation = 0;
+ long eocCNURFDownstreamQuality = 0;
+ long eocCNURFUpstreamQuality = 0;
+ u_long eocCNUReset = 0;
+ long eocCNUPhyDownstreamRate = 0;
+ long eocCNUPhyUpstreamRate = 0;
+
+ /* values for columns that are not supported are set to 0 */
+ u_long eocCNUConfigurationSaving = 0;
+ u_long eocCNUConfigurationResult = 0;
+
+ /* declarations for calls to libspid */
+ const char delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char *elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+ char buffer[LIBSPID_LINE_MAX_LEN] = {0};
+
+
+ char *mac_slist;
+ char mac_str[LIBSPID_KEY_MAX_LEN];
+ int rc;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_row_prep",
+ "current index: %d\n",
+ rowreq_ctx->tbl_idx.eocCNUIndex));
+
+ mac_slist = se_find_label_in_slist ("eoc_online_table",
+ rowreq_ctx->tbl_idx.eocCNUIndex);
+
+
+ if (NULL == mac_slist)
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: error retrieving \
+ MAC address from slave index\n");
+ return MFD_ERROR;
+ }
+
+ /* copy MAC address string to use for calls to libspid */
+ strcpy (mac_str, mac_slist);
+
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_row_prep",
+ "current MAC string: |%s|\n", mac_str));
+
+ /*LIBSPID_ONLINE_INFO_PATH*/
+ rc = libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH,
+ delimiters, mac_str, &elt_number, elt_buffer, buffer,
+ LIBSPID_LINE_MAX_LEN);
+
+ if (rc != LIBSPID_SUCCESS && rc != LIBSPID_ERROR_NOT_FOUND)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error=%d\n",rc);
+ return MFD_ERROR;
+ }
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ /*
+ * TODO:352:r: | |-> populate eocCNUTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCNUMACAddress
+ * eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+
+ /* convert MAC address from string to char array */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_str_to_bin (mac_slist, eocCNUMACAddress))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin error\n");
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data.eocCNUMACAddress_len = 6;
+
+
+ /*
+ * make sure there is enough space for eocCNUMACAddress data
+ */
+
+
+ if ((NULL == rowreq_ctx->data.eocCNUMACAddress) ||
+ (rowreq_ctx->data.eocCNUMACAddress_len <
+ (eocCNUMACAddress_len * sizeof (eocCNUMACAddress[0]))))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: eocCNUMACAddress: \
+ not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCNUMACAddress_len =
+ eocCNUMACAddress_len * sizeof (eocCNUMACAddress[0]);
+
+ memcpy (rowreq_ctx->data.eocCNUMACAddress,
+ eocCNUMACAddress,
+ eocCNUMACAddress_len * sizeof (eocCNUMACAddress[0]));
+
+ rowreq_ctx->data.eocCNUOnlineStatus = (rc == LIBSPID_SUCCESS) ? 1 : 0;
+
+ /*
+ * setup/save data for eocCNUModelNumber
+ * eocCNUModelNumber(4)/DisplayString/
+ * ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ strncpy (eocCNUModelNumber, "NOT_ONLINE",
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocCNUModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+ eocCNUModelNumber_len = strlen (eocCNUModelNumber) + 1;
+ rowreq_ctx->data.eocCNUModelNumber_len = eocCNUModelNumber_len;
+ }
+ else
+ {
+ strncpy (eocCNUModelNumber, elt_buffer[0],
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocCNUModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+ eocCNUModelNumber_len = strlen (eocCNUModelNumber) + 1;
+ rowreq_ctx->data.eocCNUModelNumber_len = eocCNUModelNumber_len;
+ }
+ /*
+ * make sure there is enough space for eocCNUModelNumber data
+ */
+ if ((NULL == rowreq_ctx->data.eocCNUModelNumber) ||
+ (rowreq_ctx->data.eocCNUModelNumber_len <
+ (eocCNUModelNumber_len * sizeof (eocCNUModelNumber[0]))))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: eocCNUModelNumber: \
+ not enough space for value\n");
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data.eocCNUModelNumber_len =
+ eocCNUModelNumber_len * sizeof (eocCNUModelNumber[0]);
+
+ memcpy (rowreq_ctx->data.eocCNUModelNumber,
+ eocCNUModelNumber,
+ eocCNUModelNumber_len * sizeof (eocCNUModelNumber[0]));
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUPortAmount = 0;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[1], "%d", &eocCNUPortAmount))
+ {
+ snmp_log (LOG_ERR, "error parsing port amount\n");
+ return MFD_ERROR;
+ }
+ }
+ /*
+ * setup/save data for eocCNUPortAmount
+ * eocCNUPortAmount(5)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUPortAmount mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ rowreq_ctx->data.eocCNUPortAmount = eocCNUPortAmount;
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUAuthorizationState = EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[2], "%d", &eocCNUAuthorizationState))
+ {
+ snmp_log (LOG_ERR, "error parsing authorization state\n");
+ return MFD_ERROR;
+ }
+ }
+
+ /*
+ * setup/save data for eocCNUAuthorizationState
+ * eocCNUAuthorizationState(6)/
+ * INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUAuthorizationState mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUAuthorizationState = eocCNUAuthorizationState;
+
+ /*
+ * setup/save data for eocCNUSoftwareVersion
+ * eocCNUSoftwareVersion(7)/DisplayString/
+ * ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ strncpy (eocCNUSoftwareVersion, "NOT_ONLINE",
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocCNUSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+ eocCNUSoftwareVersion_len = strlen (eocCNUSoftwareVersion) + 1;
+ rowreq_ctx->data.eocCNUSoftwareVersion_len =
+ eocCNUSoftwareVersion_len;
+ }
+ else
+ {
+ strncpy (eocCNUSoftwareVersion, elt_buffer[3],
+ DEFAULT_SNMP_STRING_MAX_LENGTH-1);
+ eocCNUSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH-1] = '\0';
+ eocCNUSoftwareVersion_len = strlen (eocCNUSoftwareVersion) + 1;
+ rowreq_ctx->data.eocCNUSoftwareVersion_len =
+ eocCNUSoftwareVersion_len;
+ }
+ /*
+ * make sure there is enough space for eocCNUSoftwareVersion data
+ */
+ if ((NULL == rowreq_ctx->data.eocCNUSoftwareVersion) ||
+ (rowreq_ctx->data.eocCNUSoftwareVersion_len <
+ (eocCNUSoftwareVersion_len * sizeof (eocCNUSoftwareVersion[0]))))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: eocCNUSoftwareVersion:"
+ "not enough space for value\n");
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data.eocCNUSoftwareVersion_len =
+ eocCNUSoftwareVersion_len * sizeof (eocCNUSoftwareVersion[0]);
+ memcpy (rowreq_ctx->data.eocCNUSoftwareVersion,
+ eocCNUSoftwareVersion,
+ eocCNUSoftwareVersion_len * sizeof (eocCNUSoftwareVersion[0]));
+
+ /*
+ * setup/save data for eocCNUReset
+ * eocCNUReset(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUReset mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUReset = eocCNUReset;
+
+ /*
+ * setup/save data for eocCNURFDownstreamAttenuation
+ * eocCNURFDownstreamAttenuation(9)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNURFAttenuation = 0;
+ }
+ else
+ {
+ if (1 != sscanf (elt_buffer[5], "%d", &eocCNURFAttenuation))
+ {
+ snmp_log (LOG_ERR, "error parsing downstream attenuation\n");
+ return MFD_ERROR;
+ }
+ }
+ /*
+ * TODO:246:r: |-> Define eocCNURFDownstreamAttenuation mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ rowreq_ctx->data.eocCNURFAttenuation = eocCNURFAttenuation;
+
+ /*
+ * setup/save data for eocCNURFDownstreamQuality
+ * eocCNURFDownstreamQuality(11)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNURFDownstreamQuality mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNURFDownstreamQuality = 0;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[6], "%d", &eocCNURFDownstreamQuality))
+ {
+ snmp_log (LOG_ERR, "error parsing downstream quality\n");
+ return MFD_ERROR;
+ }
+ }
+ rowreq_ctx->data.eocCNURFDownstreamQuality =
+ (eocCNURFDownstreamQuality > 100 ) ? 100 : eocCNURFDownstreamQuality;
+
+ /*
+ * setup/save data for eocCNURFUpstreamQuality
+ * eocCNURFUpstreamQuality(12)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNURFUpstreamQuality mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNURFUpstreamQuality = 0;
+ }
+ else
+ {
+ if (1 != sscanf (elt_buffer[7], "%d", &eocCNURFUpstreamQuality))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream quality\n");
+ return MFD_ERROR;
+ }
+ }
+
+ rowreq_ctx->data.eocCNURFUpstreamQuality =
+ (eocCNURFUpstreamQuality > 100 ) ? 100 : eocCNURFUpstreamQuality;
+
+ /*
+ * setup/save data for eocCNUPhyDownstreamRate
+ * eocCNUPhyDownstreamRate(13)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUPhyDownstreamRate = 0;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[8], "%d", &eocCNUPhyDownstreamRate))
+ {
+ snmp_log (LOG_ERR, "error parsing downstream rate\n");
+ return MFD_ERROR;
+ }
+ }
+ rowreq_ctx->data.eocCNUPhyDownstreamRate = eocCNUPhyDownstreamRate;
+
+ /*
+ * setup/save data for eocCNUPhyUpstreamRate
+ * eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ * TODO:246:r: |-> Define eocCNUPhyUpstreamRate mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUPhyUpstreamRate = 0;
+ }
+ else
+ {
+ if (1 != sscanf (elt_buffer[9], "%d", &eocCNUPhyUpstreamRate))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream rate\n");
+ return MFD_ERROR;
+ }
+ }
+ rowreq_ctx->data.eocCNUPhyUpstreamRate = eocCNUPhyUpstreamRate;
+
+ /*
+ * setup/save data for eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving(15)/
+ * INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUConfigurationSaving mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUConfigurationSaving = eocCNUConfigurationSaving;
+
+ /*
+ * setup/save data for eocCNUConfigurationResult
+ * eocCNUConfigurationResult(16)/
+ * INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUConfigurationResult mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUConfigurationResult =
+ saving_result[rowreq_ctx->tbl_idx.eocCNUIndex];
+
+
+ return MFD_SUCCESS;
+}
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h
new file mode 100644
index 0000000000..49bcbea56f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_DATA_ACCESS_H
+#define EOCCNUTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+
+ int eocCNUTable_init_data(eocCNUTable_registration * eocCNUTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUTABLE_CACHE_TIMEOUT 60
+
+void eocCNUTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUTable_container_load(netsnmp_container *container);
+void eocCNUTable_container_free(netsnmp_container *container);
+
+int eocCNUTable_cache_load(netsnmp_container *container);
+void eocCNUTable_cache_free(netsnmp_container *container);
+
+ int eocCNUTable_row_prep( eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c
new file mode 100644
index 0000000000..afff25dc5e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c
@@ -0,0 +1,1195 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUTable get routines.
+ * TODO:240:M: Implement eocCNUTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUCBATCardIndex_val
+ * @param eocCNUIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUTable_indexes_set_tbl_idx(eocCNUTable_mib_index *tbl_idx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUCBATCardIndex = eocCNUCBATCardIndex_val;
+
+ /* eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUIndex = eocCNUIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUTable_indexes_set(eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCNUTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCNUCBATCardIndex_val
+ , eocCNUIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCNUTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUMACAddress
+ * eocCNUMACAddress is subid 3 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.3
+ * Description:
+CNUµÄMACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Extract the current value of the eocCNUMACAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUMACAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUMACAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUMACAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUMACAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUMACAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUMACAddress_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUMACAddress_val_ptr_ptr, size_t *eocCNUMACAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUMACAddress_val_ptr_ptr) && (NULL != *eocCNUMACAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUMACAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUMACAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUMACAddress data.
+ * copy (* eocCNUMACAddress_val_ptr_ptr ) data and (* eocCNUMACAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUMACAddress data
+ */
+ if ((NULL == (* eocCNUMACAddress_val_ptr_ptr )) ||
+ ((* eocCNUMACAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0])))) {
+ /*
+ * allocate space for eocCNUMACAddress data
+ */
+ (* eocCNUMACAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0]));
+ if(NULL == (* eocCNUMACAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUMACAddress_val_ptr_len_ptr ) = rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0]);
+ memcpy( (* eocCNUMACAddress_val_ptr_ptr ), rowreq_ctx->data.eocCNUMACAddress, rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCNUMACAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUOnlineStatus
+ * eocCNUOnlineStatus is subid 4 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.4
+ * Description:
+CNUÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUOnlineStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUOnlineStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUOnlineStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUOnlineStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUOnlineStatus_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUOnlineStatus_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUOnlineStatus data.
+ * copy (* eocCNUOnlineStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUOnlineStatus_val_ptr ) = rowreq_ctx->data.eocCNUOnlineStatus;
+
+ return MFD_SUCCESS;
+} /* eocCNUOnlineStatus_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUModelNumber
+ * eocCNUModelNumber is subid 5 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.5
+ * Description:
+ÔÚÏßCNUµÄÐͺš£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCNUModelNumber data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUModelNumber_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUModelNumber_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUModelNumber.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUModelNumber_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUModelNumber_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUModelNumber_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUModelNumber_val_ptr_ptr, size_t *eocCNUModelNumber_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUModelNumber_val_ptr_ptr) && (NULL != *eocCNUModelNumber_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUModelNumber_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUModelNumber_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUModelNumber data.
+ * copy (* eocCNUModelNumber_val_ptr_ptr ) data and (* eocCNUModelNumber_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUModelNumber data
+ */
+ if ((NULL == (* eocCNUModelNumber_val_ptr_ptr )) ||
+ ((* eocCNUModelNumber_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0])))) {
+ /*
+ * allocate space for eocCNUModelNumber data
+ */
+ (* eocCNUModelNumber_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0]));
+ if(NULL == (* eocCNUModelNumber_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUModelNumber_val_ptr_len_ptr ) = rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0]);
+ memcpy( (* eocCNUModelNumber_val_ptr_ptr ), rowreq_ctx->data.eocCNUModelNumber, rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCNUModelNumber_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPortAmount
+ * eocCNUPortAmount is subid 6 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.6
+ * Description:
+ÔÚÏßCNUÒÔÌ«Íø¶Ë¿ÚÊýÁ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUPortAmount data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPortAmount_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPortAmount_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPortAmount_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPortAmount_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUPortAmount_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPortAmount data.
+ * copy (* eocCNUPortAmount_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPortAmount_val_ptr ) = rowreq_ctx->data.eocCNUPortAmount;
+
+ return MFD_SUCCESS;
+} /* eocCNUPortAmount_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAuthorizationState
+ * eocCNUAuthorizationState is subid 7 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.7
+ * Description:
+ÔÚÏßCNUµÄÊÚȨ״̬¡£
+ 0- ·ÇÊÚȨʹÓÃÉ豸£»
+ 1- ºÏ·¨ÊÚȨÉ豸¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: not_authorized(0), authorized(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUAuthorizationState data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAuthorizationState_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUAuthorizationState_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAuthorizationState_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUAuthorizationState_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAuthorizationState_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUAuthorizationState data.
+ * copy (* eocCNUAuthorizationState_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUAuthorizationState_val_ptr ) = rowreq_ctx->data.eocCNUAuthorizationState;
+
+ return MFD_SUCCESS;
+} /* eocCNUAuthorizationState_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUSoftwareVersion
+ * eocCNUSoftwareVersion is subid 8 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.8
+ * Description:
+ÔÚÏßCNUµÄ³ÌÐò°æ±¾ºÅ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCNUSoftwareVersion data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUSoftwareVersion_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUSoftwareVersion_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUSoftwareVersion.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUSoftwareVersion_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUSoftwareVersion_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUSoftwareVersion_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUSoftwareVersion_val_ptr_ptr, size_t *eocCNUSoftwareVersion_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUSoftwareVersion_val_ptr_ptr) && (NULL != *eocCNUSoftwareVersion_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUSoftwareVersion_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUSoftwareVersion_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUSoftwareVersion data.
+ * copy (* eocCNUSoftwareVersion_val_ptr_ptr ) data and (* eocCNUSoftwareVersion_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUSoftwareVersion data
+ */
+ if ((NULL == (* eocCNUSoftwareVersion_val_ptr_ptr )) ||
+ ((* eocCNUSoftwareVersion_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0])))) {
+ /*
+ * allocate space for eocCNUSoftwareVersion data
+ */
+ (* eocCNUSoftwareVersion_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0]));
+ if(NULL == (* eocCNUSoftwareVersion_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUSoftwareVersion_val_ptr_len_ptr ) = rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0]);
+ memcpy( (* eocCNUSoftwareVersion_val_ptr_ptr ), rowreq_ctx->data.eocCNUSoftwareVersion, rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCNUSoftwareVersion_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUReset
+ * eocCNUReset is subid 9 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.9
+ * Description:
+¸´Î»ÔÚÏßCNU£¬Ð´Èë1ʱ£¬¸´Î»¸ÃÔÚÏßÖÕ¶ËÉ豸£»¶Á³ö´ËÖµÎÞÒâÒå¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUReset data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUReset_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUReset_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUReset_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUReset_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUReset data.
+ * copy (* eocCNUReset_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUReset_val_ptr ) = rowreq_ctx->data.eocCNUReset;
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFAttenuation
+ * eocCNURFAttenuation is subid 10 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.10
+ * Description:
+ÉäƵÐŵÀÁ´Â·Ë¥¼õ£¬µ¥Î»ÎªdB¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 127;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNURFAttenuation data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNURFAttenuation_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNURFAttenuation_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFAttenuation_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNURFAttenuation_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNURFAttenuation_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNURFAttenuation data.
+ * copy (* eocCNURFAttenuation_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNURFAttenuation_val_ptr ) = rowreq_ctx->data.eocCNURFAttenuation;
+
+ return MFD_SUCCESS;
+} /* eocCNURFAttenuation_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFDownstreamQuality
+ * eocCNURFDownstreamQuality is subid 11 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.11
+ * Description:
+ÉäƵÏÂÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£»ÆÀ¼Û·½Ê½ÓÉÉ豸³§
+ É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNURFDownstreamQuality data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNURFDownstreamQuality_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNURFDownstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFDownstreamQuality_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNURFDownstreamQuality_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNURFDownstreamQuality_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNURFDownstreamQuality data.
+ * copy (* eocCNURFDownstreamQuality_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNURFDownstreamQuality_val_ptr ) = rowreq_ctx->data.eocCNURFDownstreamQuality;
+
+ return MFD_SUCCESS;
+} /* eocCNURFDownstreamQuality_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFUpstreamQuality
+ * eocCNURFUpstreamQuality is subid 12 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.12
+ * Description:
+ÉäƵÉÏÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£¬ÆÀ¼Û·½Ê½ÓÉÉ豸³§É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNURFUpstreamQuality data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNURFUpstreamQuality_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNURFUpstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFUpstreamQuality_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNURFUpstreamQuality_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNURFUpstreamQuality_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNURFUpstreamQuality data.
+ * copy (* eocCNURFUpstreamQuality_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNURFUpstreamQuality_val_ptr ) = rowreq_ctx->data.eocCNURFUpstreamQuality;
+
+ return MFD_SUCCESS;
+} /* eocCNURFUpstreamQuality_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyDownstreamRate
+ * eocCNUPhyDownstreamRate is subid 13 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.13
+ * Description:
+CNUÏÂÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUPhyDownstreamRate data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPhyDownstreamRate_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPhyDownstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyDownstreamRate_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPhyDownstreamRate_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUPhyDownstreamRate_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPhyDownstreamRate data.
+ * copy (* eocCNUPhyDownstreamRate_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPhyDownstreamRate_val_ptr ) = rowreq_ctx->data.eocCNUPhyDownstreamRate;
+
+ return MFD_SUCCESS;
+} /* eocCNUPhyDownstreamRate_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyUpstreamRate
+ * eocCNUPhyUpstreamRate is subid 14 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.14
+ * Description:
+CNUÉÏÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUPhyUpstreamRate data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPhyUpstreamRate_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPhyUpstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyUpstreamRate_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPhyUpstreamRate_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUPhyUpstreamRate_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPhyUpstreamRate data.
+ * copy (* eocCNUPhyUpstreamRate_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPhyUpstreamRate_val_ptr ) = rowreq_ctx->data.eocCNUPhyUpstreamRate;
+
+ return MFD_SUCCESS;
+} /* eocCNUPhyUpstreamRate_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving is subid 15 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.15
+ * Description:
+±£´æCNUµÄµ±Ç°ÅäÖÃÖÁ·ÇÒ×ʧÐÔ´æ´¢Æ÷£¬ÉèÖÃΪ1¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUConfigurationSaving data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUConfigurationSaving_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUConfigurationSaving_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationSaving_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUConfigurationSaving_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUConfigurationSaving data.
+ * copy (* eocCNUConfigurationSaving_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUConfigurationSaving_val_ptr ) = rowreq_ctx->data.eocCNUConfigurationSaving;
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationSaving_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationResult
+ * eocCNUConfigurationResult is subid 16 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.16
+ * Description:
+±£´æEoC CNUÉ豸µ±Ç°ÅäÖõĽá¹û:
+ success(0)- ±£´æµ±Ç°Åä³É¹¦,
+ running(1)- ÕýÔÚ±£´æµ±Ç°ÅäÖÃ,
+ failed(2)- ±£´æµ±Ç°ÅäÖÃʧ°Ü¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: success(0), running(1), failed(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUConfigurationResult data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUConfigurationResult_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUConfigurationResult_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationResult_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUConfigurationResult_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationResult_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUConfigurationResult data.
+ * copy (* eocCNUConfigurationResult_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUConfigurationResult_val_ptr ) = rowreq_ctx->data.eocCNUConfigurationResult;
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationResult_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAction
+ * eocCNUAction is subid 17 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.17
+ * Description:
+¶ÔCNU½øÐеIJÙ×÷¡£
+ delete(1)- ´ÓCNU±íÖÐɾ³ýCNU, Ö»ÄÜɾ³ý²»ÔÚÏßµÄCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: delete(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUAction data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAction_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUAction_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAction_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUAction_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUAction data.
+ * copy (* eocCNUAction_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUAction_val_ptr ) = rowreq_ctx->data.eocCNUAction;
+
+ return MFD_SUCCESS;
+} /* eocCNUAction_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAdminStatus
+ * eocCNUAdminStatus is subid 18 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.18
+ * Description:
+CNU¹ÜÀí״̬
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUAdminStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAdminStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUAdminStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAdminStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUAdminStatus_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUAdminStatus data.
+ * copy (* eocCNUAdminStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUAdminStatus_val_ptr ) = rowreq_ctx->data.eocCNUAdminStatus;
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUDownstreamPIR
+ * eocCNUDownstreamPIR is subid 19 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.19
+ * Description:
+unit: kkbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUDownstreamPIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUDownstreamPIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUDownstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUDownstreamPIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUDownstreamPIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUDownstreamPIR data.
+ * copy (* eocCNUDownstreamPIR_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUDownstreamPIR_val_ptr ) = rowreq_ctx->data.eocCNUDownstreamPIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUUpstreamPIR
+ * eocCNUUpstreamPIR is subid 20 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.20
+ * Description:
+ unit: kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUUpstreamPIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUUpstreamPIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUUpstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUUpstreamPIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUUpstreamPIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUUpstreamPIR data.
+ * copy (* eocCNUUpstreamPIR_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUUpstreamPIR_val_ptr ) = rowreq_ctx->data.eocCNUUpstreamPIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_get */
+
+
+int
+eocCNUTable_RegisteredAmount_get (void)
+{
+ netsnmp_container * online_container;
+ int rc;
+ int reg_amount = 0;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_RegisteredAmount_get",
+ "called!\n"));
+
+ online_container =
+ netsnmp_container_find ("eocCNUTable:table_container");
+ if (NULL == online_container)
+ {
+ snmp_log (LOG_ERR, "online table temp container not found\n");
+ return SNMP_ERR_GENERR;
+ }
+
+
+ /* free container before loading */
+ eocCNUTable_container_free (online_container);
+
+
+ /* load fresh container contents */
+ rc = eocCNUTable_container_load (online_container);
+ if (MFD_ERROR == rc)
+ {
+ snmp_log (LOG_ERR, "online table container load error\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ /* get current container size */
+ reg_amount = CONTAINER_SIZE (online_container);
+
+ return reg_amount;
+}
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h
new file mode 100644
index 0000000000..8d28bbafe0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h
@@ -0,0 +1,76 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUTABLE_DATA_GET_H
+#define EOCCNUTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUMACAddress_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUMACAddress_val_ptr_ptr, size_t *eocCNUMACAddress_val_ptr_len_ptr );
+ int eocCNUOnlineStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUOnlineStatus_val_ptr );
+ int eocCNUModelNumber_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUModelNumber_val_ptr_ptr, size_t *eocCNUModelNumber_val_ptr_len_ptr );
+ int eocCNUPortAmount_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPortAmount_val_ptr );
+ int eocCNUAuthorizationState_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAuthorizationState_val_ptr );
+ int eocCNUSoftwareVersion_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUSoftwareVersion_val_ptr_ptr, size_t *eocCNUSoftwareVersion_val_ptr_len_ptr );
+ int eocCNUReset_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUReset_val_ptr );
+ int eocCNURFAttenuation_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFAttenuation_val_ptr );
+ int eocCNURFDownstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFDownstreamQuality_val_ptr );
+ int eocCNURFUpstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFUpstreamQuality_val_ptr );
+ int eocCNUPhyDownstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyDownstreamRate_val_ptr );
+ int eocCNUPhyUpstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyUpstreamRate_val_ptr );
+ int eocCNUConfigurationSaving_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationSaving_val_ptr );
+ int eocCNUConfigurationResult_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationResult_val_ptr );
+ int eocCNUAction_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAction_val_ptr );
+ int eocCNUAdminStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAdminStatus_val_ptr );
+ int eocCNUDownstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUDownstreamPIR_val_ptr );
+ int eocCNUUpstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUUpstreamPIR_val_ptr );
+
+
+int eocCNUTable_indexes_set_tbl_idx(eocCNUTable_mib_index *tbl_idx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val);
+int eocCNUTable_indexes_set(eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c
new file mode 100644
index 0000000000..e335394f64
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c
@@ -0,0 +1,1508 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCNUTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCNUTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUTable_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCNUTable undo.
+ * set up eocCNUTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCNUUpstreamPIR_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUTable_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCNUTable undo.
+ * eocCNUTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCNUUpstreamPIR_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUTable_undo_cleanup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCNUTable undo.
+ * Undo storage is in (* eocCNUUpstreamPIR_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUTable_commit( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCNUTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCCNURESET_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNURESET_FLAG; /* clear eocCNUReset */
+ char cmd_str[32], mac_str[24];
+ /*
+ * TODO:482:o: |-> commit column eocCNUReset.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUReset
+ */
+
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (rowreq_ctx->data.eocCNUMACAddress,
+ mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ sprintf (cmd_str, "mme reboot %s", mac_str);
+
+ rc = system (cmd_str);
+ if (rc != 0)
+ {
+ snmp_log (LOG_ERR, "reboot %s failed\n",
+ rowreq_ctx->data.eocCNUMACAddress);
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNURESET_FLAG;
+ rc = 0;
+ }
+
+ if (save_flags & COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG)
+ {
+ /* clear eocCNUConfigurationSaving */
+ save_flags &= ~COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUConfigurationSaving.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUConfigurationSaving
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCNUACTION_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUACTION_FLAG; /* clear eocCNUAction */
+ /*
+ * TODO:482:o: |-> commit column eocCNUAction.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUAction
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUACTION_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUADMINSTATUS_FLAG)
+ {
+ /* clear eocCNUAdminStatus */
+ save_flags &= ~COLUMN_EOCCNUADMINSTATUS_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUAdminStatus.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUAdminStatus
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUADMINSTATUS_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUDOWNSTREAMPIR_FLAG)
+ {
+ /* clear eocCNUDownstreamPIR */
+ save_flags &= ~COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUDownstreamPIR.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUDownstreamPIR
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUUPSTREAMPIR_FLAG)
+ {
+ /* clear eocCNUUpstreamPIR */
+ save_flags &= ~COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUUpstreamPIR.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUUpstreamPIR
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCNUTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUTable_undo_commit( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocCNUTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCNUTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCNUTable node value checks.
+ * TODO:450:M: Implement eocCNUTable undo functions.
+ * TODO:460:M: Implement eocCNUTable set functions.
+ * TODO:480:M: Implement eocCNUTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUReset
+ * eocCNUReset is subid 9 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.9
+ * Description:
+¸´Î»ÔÚÏßCNU£¬Ð´Èë1ʱ£¬¸´Î»¸ÃÔÚÏßÖÕ¶ËÉ豸£»¶Á³ö´ËÖµÎÞÒâÒå¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUReset_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of reset(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUReset_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUReset value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUReset value not illegal */
+} /* eocCNUReset_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUReset_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUReset undo.
+ */
+ /*
+ * copy eocCNUReset data
+ * set rowreq_ctx->undo->eocCNUReset from rowreq_ctx->data.eocCNUReset
+ */
+ rowreq_ctx->undo->eocCNUReset = rowreq_ctx->data.eocCNUReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUReset_val
+ * A long containing the new value.
+ */
+int
+eocCNUReset_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val )
+{
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUReset_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /* check if current MAC address is valid */
+ netsnmp_assert (NULL != rowreq_ctx->data.eocCNUMACAddress);
+
+ /*
+ * TODO:245:o: |-> Implement eocCNUReset reverse mapping.
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ */
+ switch (eocCNUReset_val)
+ {
+ case EOCCNURESET_RESET:
+ /* if reset value is given, call libspid function for rebooting
+ * slave with MAC address corresponding to current row */
+ /* if reboot succeeds, update current table node */
+
+ /* convert MAC address from char array to string */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (rowreq_ctx->data.eocCNUMACAddress,
+ mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* check if slave is authorized before attempting reset */
+ if (rowreq_ctx->data.eocCNUAuthorizationState ==
+ EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED)
+ return SNMP_ERR_AUTHORIZATIONERROR;
+
+ if (LIBSPID_SUCCESS == libspid_eoc_reboot (mac_str))
+ rowreq_ctx->data.eocCNUReset = EOCCNURESET_RESET;
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't reboot slave for MAC address: %s \n",
+ mac_str);
+ return MFD_ERROR;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld for eocCNUReset\n",
+ eocCNUReset_val);
+ return SNMP_ERR_GENERR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUReset_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUReset undo.
+ */
+ /*
+ * copy eocCNUReset data
+ * set rowreq_ctx->data.eocCNUReset from rowreq_ctx->undo->eocCNUReset
+ */
+ rowreq_ctx->data.eocCNUReset = rowreq_ctx->undo->eocCNUReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving is subid 15 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.15
+ * Description:
+±£´æCNUµÄµ±Ç°ÅäÖÃÖÁ·ÇÒ×ʧÐÔ´æ´¢Æ÷£¬ÉèÖÃΪ1¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUConfigurationSaving_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of save(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUConfigurationSaving_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUConfigurationSaving value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUConfigurationSaving value not illegal */
+} /* eocCNUConfigurationSaving_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUConfigurationSaving_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUConfigurationSaving undo.
+ */
+ /*
+ * copy eocCNUConfigurationSaving data
+ * set rowreq_ctx->undo->eocCNUConfigurationSaving from rowreq_ctx->data.eocCNUConfigurationSaving
+ */
+ rowreq_ctx->undo->eocCNUConfigurationSaving = rowreq_ctx->data.eocCNUConfigurationSaving;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationSaving_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUConfigurationSaving_val
+ * A long containing the new value.
+ */
+int
+eocCNUConfigurationSaving_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val )
+{
+ char mac_str[LIBSPID_MAC_STR_LEN];
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+ switch (eocCNUConfigurationSaving_val)
+ {
+ case EOCCNUCONFIGURATIONSAVING_SAVE:
+ /* if saving value is given, call libspid function for rebooting
+ * slave with MAC address corresponding to current row */
+
+ /* convert MAC address from char array to string */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (rowreq_ctx->data.eocCNUMACAddress,
+ mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* check if slave is authorized before attempting reset */
+ if (rowreq_ctx->data.eocCNUAuthorizationState ==
+ EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED)
+ return SNMP_ERR_AUTHORIZATIONERROR;
+
+ if (LIBSPID_SUCCESS == libspid_eoc_reboot (mac_str))
+ {
+ rowreq_ctx->data.eocCNUConfigurationSaving =
+ EOCCNUCONFIGURATIONSAVING_SAVE;
+ saving_result[rowreq_ctx->tbl_idx.eocCNUIndex] =
+ EOCCNUCONFIGURATIONRESULT_SUCCESS;
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't reboot slave for MAC address: %s \n",
+ mac_str);
+ rowreq_ctx->data.eocCNUConfigurationSaving =
+ EOCCNUCONFIGURATIONSAVING_SAVE;
+ saving_result[rowreq_ctx->tbl_idx.eocCNUIndex] =
+ EOCCNUCONFIGURATIONRESULT_FAILED;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld"
+ " for eocCNUConfigurationSaving\n",
+ eocCNUConfigurationSaving_val);
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * TODO:461:M: |-> Set eocCNUConfigurationSaving value.
+ * set eocCNUConfigurationSaving value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUConfigurationSaving_undo (eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUConfigurationSaving_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUConfigurationSaving undo.
+ */
+ /*
+ * copy eocCNUConfigurationSaving data
+ * set rowreq_ctx->data.eocCNUConfigurationSaving from rowreq_ctx->undo->eocCNUConfigurationSaving
+ */
+ rowreq_ctx->data.eocCNUConfigurationSaving = rowreq_ctx->undo->eocCNUConfigurationSaving;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationSaving_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAction
+ * eocCNUAction is subid 17 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.17
+ * Description:
+¶ÔCNU½øÐеIJÙ×÷¡£
+ delete(1)- ´ÓCNU±íÖÐɾ³ýCNU, Ö»ÄÜɾ³ý²»ÔÚÏßµÄCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: delete(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAction_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of delete(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUAction_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUAction value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUAction value not illegal */
+} /* eocCNUAction_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUAction_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUAction undo.
+ */
+ /*
+ * copy eocCNUAction data
+ * set rowreq_ctx->undo->eocCNUAction from rowreq_ctx->data.eocCNUAction
+ */
+ rowreq_ctx->undo->eocCNUAction = rowreq_ctx->data.eocCNUAction;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAction_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUAction_val
+ * A long containing the new value.
+ */
+int
+eocCNUAction_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val )
+{
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUAction_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUAction value.
+ * set eocCNUAction value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUAction = eocCNUAction_val;
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUAction_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUAction undo.
+ */
+ /*
+ * copy eocCNUAction data
+ * set rowreq_ctx->data.eocCNUAction from rowreq_ctx->undo->eocCNUAction
+ */
+ rowreq_ctx->data.eocCNUAction = rowreq_ctx->undo->eocCNUAction;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAction_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAdminStatus
+ * eocCNUAdminStatus is subid 18 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.18
+ * Description:
+CNU¹ÜÀí״̬
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAdminStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUAdminStatus_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUAdminStatus value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUAdminStatus value not illegal */
+} /* eocCNUAdminStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUAdminStatus_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUAdminStatus undo.
+ */
+ /*
+ * copy eocCNUAdminStatus data
+ * set rowreq_ctx->undo->eocCNUAdminStatus from rowreq_ctx->data.eocCNUAdminStatus
+ */
+ rowreq_ctx->undo->eocCNUAdminStatus = rowreq_ctx->data.eocCNUAdminStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUAdminStatus_val
+ * A long containing the new value.
+ */
+int
+eocCNUAdminStatus_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val )
+{
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUAdminStatus_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUAdminStatus value.
+ * set eocCNUAdminStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUAdminStatus = eocCNUAdminStatus_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUAdminStatus_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUAdminStatus undo.
+ */
+ /*
+ * copy eocCNUAdminStatus data
+ * set rowreq_ctx->data.eocCNUAdminStatus from rowreq_ctx->undo->eocCNUAdminStatus
+ */
+ rowreq_ctx->data.eocCNUAdminStatus = rowreq_ctx->undo->eocCNUAdminStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUDownstreamPIR
+ * eocCNUDownstreamPIR is subid 19 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.19
+ * Description:
+unit: kkbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUDownstreamPIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUDownstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUDownstreamPIR value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUDownstreamPIR value not illegal */
+} /* eocCNUDownstreamPIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUDownstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUDownstreamPIR undo.
+ */
+ /*
+ * copy eocCNUDownstreamPIR data
+ * set rowreq_ctx->undo->eocCNUDownstreamPIR from rowreq_ctx->data.eocCNUDownstreamPIR
+ */
+ rowreq_ctx->undo->eocCNUDownstreamPIR = rowreq_ctx->data.eocCNUDownstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUDownstreamPIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUDownstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUDownstreamPIR value.
+ * set eocCNUDownstreamPIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUDownstreamPIR = eocCNUDownstreamPIR_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUDownstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUDownstreamPIR undo.
+ */
+ /*
+ * copy eocCNUDownstreamPIR data
+ * set rowreq_ctx->data.eocCNUDownstreamPIR from rowreq_ctx->undo->eocCNUDownstreamPIR
+ */
+ rowreq_ctx->data.eocCNUDownstreamPIR = rowreq_ctx->undo->eocCNUDownstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUUpstreamPIR
+ * eocCNUUpstreamPIR is subid 20 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.20
+ * Description:
+ unit: kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUUpstreamPIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUUpstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUUpstreamPIR value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUUpstreamPIR value not illegal */
+} /* eocCNUUpstreamPIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUUpstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUUpstreamPIR undo.
+ */
+ /*
+ * copy eocCNUUpstreamPIR data
+ * set rowreq_ctx->undo->eocCNUUpstreamPIR from rowreq_ctx->data.eocCNUUpstreamPIR
+ */
+ rowreq_ctx->undo->eocCNUUpstreamPIR = rowreq_ctx->data.eocCNUUpstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUUpstreamPIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUUpstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUUpstreamPIR value.
+ * set eocCNUUpstreamPIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUUpstreamPIR = eocCNUUpstreamPIR_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUUpstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUUpstreamPIR undo.
+ */
+ /*
+ * copy eocCNUUpstreamPIR data
+ * set rowreq_ctx->data.eocCNUUpstreamPIR from rowreq_ctx->undo->eocCNUUpstreamPIR
+ */
+ rowreq_ctx->data.eocCNUUpstreamPIR = rowreq_ctx->undo->eocCNUUpstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h
new file mode 100644
index 0000000000..22d9525ecb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h
@@ -0,0 +1,140 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_DATA_SET_H
+#define EOCCNUTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+
+int eocCNUTable_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_undo_cleanup( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_undo( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_commit( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_undo_commit( eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCNUMACAddress_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUMACAddress_val_ptr, size_t eocCNUMACAddress_val_ptr_len);
+int eocCNUMACAddress_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUMACAddress_set( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUMACAddress_val_ptr, size_t eocCNUMACAddress_val_ptr_len );
+int eocCNUMACAddress_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUOnlineStatus_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUOnlineStatus_val);
+int eocCNUOnlineStatus_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUOnlineStatus_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUOnlineStatus_val );
+int eocCNUOnlineStatus_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUModelNumber_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUModelNumber_val_ptr, size_t eocCNUModelNumber_val_ptr_len);
+int eocCNUModelNumber_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUModelNumber_set( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUModelNumber_val_ptr, size_t eocCNUModelNumber_val_ptr_len );
+int eocCNUModelNumber_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUPortAmount_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPortAmount_val);
+int eocCNUPortAmount_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPortAmount_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPortAmount_val );
+int eocCNUPortAmount_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUAuthorizationState_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAuthorizationState_val);
+int eocCNUAuthorizationState_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUAuthorizationState_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAuthorizationState_val );
+int eocCNUAuthorizationState_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUSoftwareVersion_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUSoftwareVersion_val_ptr, size_t eocCNUSoftwareVersion_val_ptr_len);
+int eocCNUSoftwareVersion_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUSoftwareVersion_set( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUSoftwareVersion_val_ptr, size_t eocCNUSoftwareVersion_val_ptr_len );
+int eocCNUSoftwareVersion_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUReset_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val);
+int eocCNUReset_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUReset_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val );
+int eocCNUReset_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNURFAttenuation_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFAttenuation_val);
+int eocCNURFAttenuation_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNURFAttenuation_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFAttenuation_val );
+int eocCNURFAttenuation_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNURFDownstreamQuality_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFDownstreamQuality_val);
+int eocCNURFDownstreamQuality_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNURFDownstreamQuality_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFDownstreamQuality_val );
+int eocCNURFDownstreamQuality_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNURFUpstreamQuality_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFUpstreamQuality_val);
+int eocCNURFUpstreamQuality_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNURFUpstreamQuality_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFUpstreamQuality_val );
+int eocCNURFUpstreamQuality_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUPhyDownstreamRate_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyDownstreamRate_val);
+int eocCNUPhyDownstreamRate_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPhyDownstreamRate_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyDownstreamRate_val );
+int eocCNUPhyDownstreamRate_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUPhyUpstreamRate_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyUpstreamRate_val);
+int eocCNUPhyUpstreamRate_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPhyUpstreamRate_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyUpstreamRate_val );
+int eocCNUPhyUpstreamRate_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUConfigurationSaving_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val);
+int eocCNUConfigurationSaving_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUConfigurationSaving_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val );
+int eocCNUConfigurationSaving_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUConfigurationResult_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationResult_val);
+int eocCNUConfigurationResult_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUConfigurationResult_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationResult_val );
+int eocCNUConfigurationResult_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUAction_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val);
+int eocCNUAction_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUAction_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val );
+int eocCNUAction_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUAdminStatus_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val);
+int eocCNUAdminStatus_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUAdminStatus_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val );
+int eocCNUAdminStatus_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUDownstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val);
+int eocCNUDownstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUDownstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val );
+int eocCNUDownstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUUpstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val);
+int eocCNUUpstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUUpstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val );
+int eocCNUUpstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCNUTable_check_dependencies(eocCNUTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h
new file mode 100644
index 0000000000..cd27bf48a0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h
@@ -0,0 +1,150 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_ENUMS_H
+#define EOCCNUTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUOnlineStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUONLINESTATUS_ENUMS
+#define EOCCNUONLINESTATUS_ENUMS
+
+#define EOCCNUONLINESTATUS_OFFLINE 0
+#define EOCCNUONLINESTATUS_ONLINE 1
+
+#endif /* EOCCNUONLINESTATUS_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUAuthorizationState (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUAUTHORIZATIONSTATE_ENUMS
+#define EOCCNUAUTHORIZATIONSTATE_ENUMS
+
+#define EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED 0
+#define EOCCNUAUTHORIZATIONSTATE_AUTHORIZED 1
+
+#endif /* EOCCNUAUTHORIZATIONSTATE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUReset (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNURESET_ENUMS
+#define EOCCNURESET_ENUMS
+
+#define EOCCNURESET_RESET 1
+
+#endif /* EOCCNURESET_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUConfigurationSaving (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUCONFIGURATIONSAVING_ENUMS
+#define EOCCNUCONFIGURATIONSAVING_ENUMS
+
+#define EOCCNUCONFIGURATIONSAVING_SAVE 1
+
+#endif /* EOCCNUCONFIGURATIONSAVING_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUConfigurationResult (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUCONFIGURATIONRESULT_ENUMS
+#define EOCCNUCONFIGURATIONRESULT_ENUMS
+
+#define EOCCNUCONFIGURATIONRESULT_SUCCESS 0
+#define EOCCNUCONFIGURATIONRESULT_RUNNING 1
+#define EOCCNUCONFIGURATIONRESULT_FAILED 2
+
+#endif /* EOCCNUCONFIGURATIONRESULT_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUAction (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUACTION_ENUMS
+#define EOCCNUACTION_ENUMS
+
+#define EOCCNUACTION_DELETE 1
+
+#endif /* EOCCNUACTION_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUAdminStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUADMINSTATUS_ENUMS
+#define EOCCNUADMINSTATUS_ENUMS
+
+#define EOCCNUADMINSTATUS_DISABLE 0
+#define EOCCNUADMINSTATUS_ENABLE 1
+
+#endif /* EOCCNUADMINSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c
new file mode 100644
index 0000000000..f50b61b43f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c
@@ -0,0 +1,1863 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+typedef struct eocCNUTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCNUTable_interface_ctx;
+
+static eocCNUTable_interface_ctx eocCNUTable_if_ctx;
+
+static void _eocCNUTable_container_init(
+ eocCNUTable_interface_ctx *if_ctx);
+static void _eocCNUTable_container_shutdown(
+ eocCNUTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUTable_container_get( void )
+{
+ return eocCNUTable_if_ctx.container;
+}
+
+eocCNUTable_registration *
+eocCNUTable_registration_get( void )
+{
+ return eocCNUTable_if_ctx.user_ctx;
+}
+
+eocCNUTable_registration *
+eocCNUTable_registration_set( eocCNUTable_registration * newreg )
+{
+ eocCNUTable_registration * old = eocCNUTable_if_ctx.user_ctx;
+ eocCNUTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUTable_if_ctx.container);
+}
+
+u_int
+eocCNUTable_dirty_get( void )
+{
+ return eocCNUTable_if_ctx.table_dirty;
+}
+
+void
+eocCNUTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCNUTable:eocCNUTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCNUTable_if_ctx.table_dirty, status));
+ eocCNUTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCNUTable_undo_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCNUTable_data *eocCNUTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCNUTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUTable_initialize_interface(eocCNUTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCNUTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCNUCBATCardIndex */
+ ASN_INTEGER, /** index: eocCNUIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUTABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUTable_container_init(&eocCNUTable_if_ctx);
+ if (NULL == eocCNUTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCNUTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCNUTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCNUTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCNUTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCNUTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCNUTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCNUTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCNUTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUTable:init_eocCNUTable",
+ "Registering eocCNUTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUTable", handler,
+ eocCNUTable_oid,
+ eocCNUTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUTable
+ */
+void
+_eocCNUTable_shutdown_interface(eocCNUTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUTable_container_shutdown(&eocCNUTable_if_ctx);
+}
+
+void
+eocCNUTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUCBATCardIndex;
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUCBATCardIndex, 0x00, sizeof(var_eocCNUCBATCardIndex) );
+ var_eocCNUCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUIndex, 0x00, sizeof(var_eocCNUIndex) );
+ var_eocCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUCBATCardIndex.next_variable = &var_eocCNUIndex; var_eocCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_index_to_oid","called\n"));
+
+ /* eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUCBATCardIndex, (u_char*)&mib_idx->eocCNUCBATCardIndex,
+ sizeof(mib_idx->eocCNUCBATCardIndex));
+
+ /* eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUIndex, (u_char*)&mib_idx->eocCNUIndex,
+ sizeof(mib_idx->eocCNUIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUCBATCardIndex );
+
+ return err;
+} /* eocCNUTable_index_to_oid */
+
+/**
+ * extract eocCNUTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUCBATCardIndex;
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUCBATCardIndex, 0x00, sizeof(var_eocCNUCBATCardIndex) );
+ var_eocCNUCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUIndex, 0x00, sizeof(var_eocCNUIndex) );
+ var_eocCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUCBATCardIndex.next_variable = &var_eocCNUIndex; var_eocCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCNUCBATCardIndex = *((long *)var_eocCNUCBATCardIndex.val.string);
+ mib_idx->eocCNUIndex = *((long *)var_eocCNUIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUCBATCardIndex );
+
+ return err;
+} /* eocCNUTable_index_from_oid */
+
+
+/*
+ * eocCNUTable_allocate_data
+ *
+ * Purpose: create new eocCNUTable_data.
+ */
+eocCNUTable_data *
+eocCNUTable_allocate_data(void)
+{
+ eocCNUTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCNUTable_data);
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCNUTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCNUTable_allocate_data */
+
+/*
+ * eocCNUTable_release_data
+ *
+ * Purpose: release eocCNUTable data.
+ */
+void
+eocCNUTable_release_data(eocCNUTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_release_data","called\n"));
+
+ free(data);
+} /* eocCNUTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUTable_rowreq_ctx
+ */
+eocCNUTable_rowreq_ctx *
+eocCNUTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCNUTable:eocCNUTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCNUTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCNUTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCNUTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUTable_rowreq_ctx
+ */
+void
+eocCNUTable_release_rowreq_ctx(eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:eocCNUTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCNUTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCNUTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUTable_pre_request(eocCNUTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable","error %d from "
+ "eocCNUTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCNUTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCNUTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCNUTable_post_request(eocCNUTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable","error %d from "
+ "eocCNUTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUTable_interface_ctx *if_ctx =
+ * (eocCNUTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_get_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUCBATCardIndex;
+ break;
+
+ /* (INDEX) eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUIndex;
+ break;
+
+ /* eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H */
+ case COLUMN_EOCCNUMACADDRESS:
+ var->type = ASN_OCTET_STR;
+rc = eocCNUMACAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUOnlineStatus(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUONLINESTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUOnlineStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUModelNumber(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUMODELNUMBER:
+ var->type = ASN_OCTET_STR;
+rc = eocCNUModelNumber_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUPortAmount(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTAMOUNT:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPortAmount_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUAuthorizationState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUAUTHORIZATIONSTATE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUAuthorizationState_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUSoftwareVersion(8)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUSOFTWAREVERSION:
+ var->type = ASN_OCTET_STR;
+rc = eocCNUSoftwareVersion_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUReset_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNURFAttenuation(10)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFATTENUATION:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNURFAttenuation_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNURFDownstreamQuality(11)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFDOWNSTREAMQUALITY:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNURFDownstreamQuality_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNURFUpstreamQuality(12)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFUPSTREAMQUALITY:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNURFUpstreamQuality_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUPhyDownstreamRate(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYDOWNSTREAMRATE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPhyDownstreamRate_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYUPSTREAMRATE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPhyUpstreamRate_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUConfigurationSaving_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUConfigurationResult(16)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONRESULT:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUConfigurationResult_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUAction_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUAdminStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUDownstreamPIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUUpstreamPIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUTABLE_MIN_COL <= column && column <= EOCCNUTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_get_column */
+
+int
+_mfd_eocCNUTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_check_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H */
+ case COLUMN_EOCCNUMACADDRESS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUOnlineStatus(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUONLINESTATUS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUModelNumber(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUMODELNUMBER:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUPortAmount(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTAMOUNT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUAuthorizationState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUAUTHORIZATIONSTATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUSoftwareVersion(8)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUSOFTWAREVERSION:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUReset ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNURESET_RESET )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUReset",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUReset_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUReset_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNURFAttenuation(10)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFATTENUATION:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNURFDownstreamQuality(11)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFDOWNSTREAMQUALITY:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNURFUpstreamQuality(12)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFUPSTREAMQUALITY:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUPhyDownstreamRate(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYDOWNSTREAMRATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYUPSTREAMRATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUConfigurationSaving ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUCONFIGURATIONSAVING_SAVE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUConfigurationSaving",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUConfigurationSaving_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUConfigurationSaving_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUConfigurationResult(16)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONRESULT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUAction ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUACTION_DELETE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUAction",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUAction_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUAction_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUAdminStatus ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUADMINSTATUS_DISABLE )
+ && ( *var->val.integer != EOCCNUADMINSTATUS_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUAdminStatus",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUAdminStatus_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUAdminStatus_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUDownstreamPIR ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUDownstreamPIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUDownstreamPIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUDownstreamPIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUUpstreamPIR ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUUpstreamPIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUUpstreamPIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUUpstreamPIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCNUTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCNUTable_check_column */
+
+int
+_mfd_eocCNUTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_undo_setup_column( eocCNUTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNURESET_FLAG;
+ rc = eocCNUReset_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+ rc = eocCNUConfigurationSaving_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUACTION_FLAG;
+ rc = eocCNUAction_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUADMINSTATUS_FLAG;
+ rc = eocCNUAdminStatus_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ rc = eocCNUDownstreamPIR_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ rc = eocCNUUpstreamPIR_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCNUTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCNUTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCNUTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCNUTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_set_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNURESET_FLAG;
+ rc = eocCNUReset_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+ rc = eocCNUConfigurationSaving_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUACTION_FLAG;
+ rc = eocCNUAction_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUADMINSTATUS_FLAG;
+ rc = eocCNUAdminStatus_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ rc = eocCNUDownstreamPIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ rc = eocCNUUpstreamPIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_set_column */
+
+int
+_mfd_eocCNUTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCNUTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCNUTable_dirty_set( eocCNUTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCNUTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCNUTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCNUTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCNUTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCNUTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_undo_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rc = eocCNUReset_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rc = eocCNUConfigurationSaving_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rc = eocCNUAction_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rc = eocCNUAdminStatus_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rc = eocCNUDownstreamPIR_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rc = eocCNUUpstreamPIR_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_undo_column */
+
+int
+_mfd_eocCNUTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCNUTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCNUTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCNUTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCNUTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCNUTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCNUTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUTable_container_init(eocCNUTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUTable_oid,
+ eocCNUTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUTable_container_shutdown(eocCNUTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_container_shutdown","called\n"));
+
+ eocCNUTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUTable_container_shutdown */
+
+
+eocCNUTable_rowreq_ctx *
+eocCNUTable_row_find_by_mib_index(eocCNUTable_mib_index *mib_idx)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h
new file mode 100644
index 0000000000..865d191627
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUTABLE_INTERFACE_H
+#define EOCCNUTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUTable_initialize_interface(eocCNUTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUTable_shutdown_interface(eocCNUTable_registration * user_ctx);
+
+eocCNUTable_registration *
+eocCNUTable_registration_get( void );
+
+eocCNUTable_registration *
+eocCNUTable_registration_set( eocCNUTable_registration * newreg );
+
+netsnmp_container *eocCNUTable_container_get( void );
+int eocCNUTable_container_size( void );
+
+u_int eocCNUTable_dirty_get( void );
+void eocCNUTable_dirty_set( u_int status );
+
+ eocCNUTable_rowreq_ctx * eocCNUTable_allocate_rowreq_ctx(void *);
+void eocCNUTable_release_rowreq_ctx(eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx);
+int eocCNUTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h
new file mode 100644
index 0000000000..d06c02e013
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h
@@ -0,0 +1,84 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_OIDS_H
+#define EOCCNUTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* definitions for scalars added to table modEoCOnlineCNUTable */
+#define EOCCNUCURRENTAMOUNT_OID 1,3,6,1,4,1,17409,2,4,5,2,2
+#define EOCCNUAMOUNTLIMITATION_OID 1,3,6,1,4,1,17409,2,4,5,2,3
+
+/* column number definitions for table eocCNUTable */
+#define EOCCNUTABLE_OID 1,3,6,1,4,1,17409,2,4,5,2,4
+
+
+#define COLUMN_EOCCNUCBATCARDINDEX 1
+
+#define COLUMN_EOCCNUINDEX 2
+
+#define COLUMN_EOCCNUMACADDRESS 3
+
+#define COLUMN_EOCCNUONLINESTATUS 4
+
+#define COLUMN_EOCCNUMODELNUMBER 5
+
+#define COLUMN_EOCCNUPORTAMOUNT 6
+
+#define COLUMN_EOCCNUAUTHORIZATIONSTATE 7
+
+#define COLUMN_EOCCNUSOFTWAREVERSION 8
+
+#define COLUMN_EOCCNURESET 9
+#define COLUMN_EOCCNURESET_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCNURFATTENUATION 10
+
+#define COLUMN_EOCCNURFDOWNSTREAMQUALITY 11
+
+#define COLUMN_EOCCNURFUPSTREAMQUALITY 12
+
+#define COLUMN_EOCCNUPHYDOWNSTREAMRATE 13
+
+#define COLUMN_EOCCNUPHYUPSTREAMRATE 14
+
+#define COLUMN_EOCCNUCONFIGURATIONSAVING 15
+#define COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCNUCONFIGURATIONRESULT 16
+
+#define COLUMN_EOCCNUACTION 17
+#define COLUMN_EOCCNUACTION_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCNUADMINSTATUS 18
+#define COLUMN_EOCCNUADMINSTATUS_FLAG (0x1 << 3)
+
+#define COLUMN_EOCCNUDOWNSTREAMPIR 19
+#define COLUMN_EOCCNUDOWNSTREAMPIR_FLAG (0x1 << 4)
+
+#define COLUMN_EOCCNUUPSTREAMPIR 20
+#define COLUMN_EOCCNUUPSTREAMPIR_FLAG (0x1 << 5)
+
+
+#define EOCCNUTABLE_MIN_COL COLUMN_EOCCNUCBATCARDINDEX
+#define EOCCNUTABLE_MAX_COL COLUMN_EOCCNUUPSTREAMPIR
+
+
+ /*
+ * TODO:405:r: Review EOCCNUTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCNUTABLE_SETTABLE_COLS (COLUMN_EOCCNURESET_FLAG | COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG | COLUMN_EOCCNUACTION_FLAG | COLUMN_EOCCNUADMINSTATUS_FLAG | COLUMN_EOCCNUDOWNSTREAMPIR_FLAG | COLUMN_EOCCNUUPSTREAMPIR_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_OIDS_H */