diff -r f527656d334f -r ee0fb1eabcbf components/net-snmp/sun/sdk/demo/demo_module_11/MyTable.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/net-snmp/sun/sdk/demo/demo_module_11/MyTable.c Fri May 20 12:17:45 2011 +0530 @@ -0,0 +1,363 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * + * U.S. Government Rights - Commercial software. Government users are subject + * to the Sun Microsystems, Inc. standard license agreement and applicable + * provisions of the FAR and its supplements. + * + * + * This distribution may include materials developed by third parties. Sun, + * Sun Microsystems, the Sun logo and Solaris are trademarks or registered + * trademarks of Sun Microsystems, Inc. in the U.S. and other countries. + * + */ + + +#include +#include +#include +#include "stdhdr.h" +#include "entPhysicalTable.h" +#include "entLogicalTable.h" +#include "entPhysicalContainsTable.h" +#include "entAliasMappingTable.h" +#include "entLPMappingTable.h" +#include "MyTable.h" + +/* + These are global arrays that manage the physical indexes + and logical indexes within the scope of this program. + Similar index management scheme will be + developed within the program that uses the entity MIB + skeleton. The array is statically allocated here + for convience in the example +*/ +int i=0, j=0; +int physicalIndex[25], logicalIndex[25]; + + +/* +This is the initialisation function for the library. +This function is always named as init_. This function is called during +when this library gets loaded in the agent. Make sure that the libentity.so +library is already loaded before this library is loaded. + +*/ + +void init_demo_module_11(void) { + + entPhysicalEntry_t zEntry; + entLogicalEntry_t zLogEntry; + +/* + All these are ficitious OIDs created for this example. Do not + rely on these OID numbers, these are used just for demonstration + purposes +*/ + oid chassis_oid[] = { 1, 3, 6, 1, 4, 1, 42, 200, 1 }; + oid slot_oid[] = { 1, 3, 6, 1, 4, 1, 42, 201, 1 }; + oid cpu_oid1[] = { 1, 3, 6, 1, 4, 1, 42, 202, 14 }; + oid cpu_oid2[] = { 1, 3, 6, 1, 4, 1, 42, 202, 15 }; + oid cpu_oid3[] = { 1, 3, 6, 1, 4, 1, 42, 202, 25 }; + + oid module_oid1[] = { 1, 3, 6, 1, 4, 1, 42, 203, 2 }; + oid module_oid2[] = { 1, 3, 6, 1, 4, 1, 42, 203, 5 }; + + oid port_oid[] = { 1, 3, 6, 1, 4, 1, 42, 204, 5 }; + + oid solaris_oid[] = { 1, 3, 6, 1, 4, 1, 42, 2, 1 }; + oid SunExample_oid[] = { 1, 3, 6, 1, 4, 1, 42, 1005 }; + + oid ifIndex_oid1[] = { 1,3,6,1,2,1,2,2,1,1,1 }; + oid ifIndex_oid2[] = { 1,3,6,1,2,1,2,2,1,1,2 }; + oid ifIndex_oid3[] = { 1,3,6,1,2,1,2,2,1,1,3 }; + + +/* + Assuming that the entity MIB skeleton is already loaded, the + following lines adds all the Physical objects that will + be present in the modelled system +*/ + + FillentPhysicalEntry(&zEntry, "Sun Chassis Model b1000", chassis_oid, sizeof(chassis_oid), + 0, 3, -1, "b1000", "A(1.00.02)", "", "", "C100076544", + "Sun Microsystems", "CHS-1000", "cl-SJ17-3-006:rack1:rtr-U3", + "0007372293", MIB_TRUE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Chassis Slot Type AA", slot_oid, + sizeof(slot_oid), 1, 5, 1, "S1", "B(1.00.01)", "", "", "", + "Sun Microsystems", "SLT-AA97", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Chassis Slot Type AA", slot_oid, + sizeof(slot_oid), 1, 5, 2, "S2", "1.00.07", "", "", "", + "Sun Microsystems", "SLT-AA97", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Chassis Slot Type AA", slot_oid, + sizeof(slot_oid), 1, 5, 3, "S3", "1.00.07", "", "", "", + "Sun Microsystems", "SLT-AA97", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun CPU-100", cpu_oid1, + sizeof(cpu_oid1), 2, 9, 1, "M1", "1.00.07", "1.5.1", "A(1.1)", + "C100087363", "Sun Microsystems", "R10-FE00", + "rtr-U3:m1:SJ17-3-eng", "0007372562", MIB_TRUE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + + FillentPhysicalEntry(&zEntry, "Sun Ultrasparc-III 400MHz", module_oid1, + sizeof(module_oid1), 5, 1, 1, "P1", "G(1.02)", "", "1.1", "", + "Sun Microsystems", "SFE-400M", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Ultrasparc-III 400MHz", module_oid1, + sizeof(module_oid1), 5, 1, 2, "P2", "G(1.02)", "", "1.1", "", + "Sun Microsystems", "SFE-400M", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun CPU-200", cpu_oid2, + sizeof(cpu_oid2), 3, 9, 1, "M2", "2.01.00", "3.0.7", "A(1.2)", + "C100098732", "Sun Microsystems", "R10-FE0C", + "rtr-U3:m2:SJ17-2-eng", "0007373982", MIB_TRUE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Ultrasparc-III 400MHz", module_oid2, + sizeof(module_oid2), 8, 1, 1, "P3", "CC(1.07)", "2.0.34", "1.1", "", + "Sun Microsystems", "SFE-400M", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Ultrasparc-III 400MHz", module_oid1, + sizeof(module_oid1), 8, 1, 2, "P4", "G(1.04)", "", "1.3", "", + "Sun Microsystems", "SFE-400M", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun port-200", cpu_oid3, + sizeof(cpu_oid3), 4, 9, 1, "M2", "2.01.00", "3.0.7", "A(1.2)", + "C100098732", "Sun Microsystems", "R11-C100", + "rtr-U3:m2:SJ17-2-eng", "0007373982", MIB_TRUE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + + FillentPhysicalEntry(&zEntry, "Sun Ethernet-100 Port", port_oid, + sizeof(port_oid), 11, 10, 1, "P3", "CC(1.07)", "2.0.34", "1.1", + "", "Sun Microsystems", "SFE-P100", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Ethernet-100 Port", port_oid, + sizeof(port_oid), 11, 10, 2, "Ethernet B", "G(1.04)", "", "1.3", + "", "Sun Microsystems", "SFE-P100", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + + FillentPhysicalEntry(&zEntry, "Sun Ethernet-100 Port", port_oid, + sizeof(port_oid), 11, 10, 3, "Ethernet B", "G(1.04)", "", "1.3", + "", "Sun Microsystems", "SFE-P100", "", "", MIB_FALSE); + physicalIndex[i++] = allocPhysicalEntry(0, &zEntry); + +/* + The following lines adds all the logical instances that will + be present in the modelled system. Here first parameter to + allocLogicalEntry is ignored for now, it may be used in the + future to request a particular index in the table +*/ + + FillentLogicalEntry(&zLogEntry, "Domain A", solaris_oid, + sizeof(solaris_oid), "public-dom1", "124.125.126.127:161", + SunExample_oid, sizeof(SunExample_oid), "", ""); + logicalIndex[j++] = allocLogicalEntry(0, &zLogEntry); + + FillentLogicalEntry(&zLogEntry, "Domain B", solaris_oid, + sizeof(solaris_oid), "public-dom2", "124.125.126.128:161", + SunExample_oid, sizeof(SunExample_oid), "", ""); + logicalIndex[j++] = allocLogicalEntry(0, &zLogEntry); + + FillentLogicalEntry(&zLogEntry, "Sun Firewall v2.1.1", solaris_oid, + sizeof(solaris_oid), "public-firewall1", "124.125.126.129:161", + SunExample_oid, sizeof(SunExample_oid), "", ""); + logicalIndex[j++] = allocLogicalEntry(0, &zLogEntry); + + FillentLogicalEntry(&zLogEntry, "Sun Firewall v2.1.1", solaris_oid, + sizeof(solaris_oid), "public-firewall2", "124.125.126.130:161", + SunExample_oid, sizeof(SunExample_oid), "", ""); + logicalIndex[j++] = allocLogicalEntry(0, &zLogEntry); + + +/* + + Now we add all the relationships into the entity MIB. The + physical and logical indexes must be present to create + any relationships, and so the relationship table is + filled after the physical and logical tables are + populated + +*/ + + if (addLPMappingTableEntry(1, 5)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(1, 12)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(2, 8)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(2, 13)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(2, 14)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(3, 6)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(3, 12)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(4, 9)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(4, 13)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + + if (addLPMappingTableEntry(4, 14)) + snmp_log(LOG_ERR, "LPMappingTable Addition failed"); + +/* + + Any error in addition to the relationship table will + be logged in the agent's log file + +*/ + + if (addAliasMappingTableEntry(12, 0, ifIndex_oid1, sizeof(ifIndex_oid1))) + snmp_log(LOG_ERR, "AliasMappingTable Addition failed"); + + if (addAliasMappingTableEntry(13, 0, ifIndex_oid2, sizeof(ifIndex_oid2))) + snmp_log(LOG_ERR, "AliasMappingTable Addition failed"); + + if (addAliasMappingTableEntry(14, 0, ifIndex_oid3, sizeof(ifIndex_oid3))) + snmp_log(LOG_ERR, "AliasMappingTable Addition failed"); + +/* + The physical child table must not contains any recursive relationships + Care must be taken to avoid them. The entity MIB infrastructure should + be able to check this in the future +*/ + + if (addPhysicalContainsTableEntry(1, 2)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(1, 3)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(1, 4)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(2, 5)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(3, 8)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(4, 11)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(4, 6)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(4, 7)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(8, 9)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(8, 10)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(11, 12)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(11, 13)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + if (addPhysicalContainsTableEntry(11, 14)) + snmp_log(LOG_ERR, "PhysicalChild Table Addition failed"); + +/* + printTableIndex(); +*/ + + +} + + +/* + This function is just a conveience function to add many physical table + entries +*/ + +void FillentPhysicalEntry(entPhysicalEntry_t *phyStatic, + char *entPhysicalDescr, + oid *entPhysicalVendorType, + int entPhysicalVendorTypeSize, + int entPhysicalContainedIn, + int entPhysicalClass, + int entPhysicalParentRelPos, + char *entPhysicalName, + char *entPhysicalHardwareRev, + char *entPhysicalFirmwareRev, + char *entPhysicalSoftwareRev, + char *entPhysicalSerialNum, + char *entPhysicalMfgName, + char *entPhysicalModelName, + char *entPhysicalAlias, + char *entPhysicalAssetID, + int entPhysicalIsFRU) +{ + phyStatic->entPhysicalDescr = entPhysicalDescr; + phyStatic->entPhysicalVendorType = entPhysicalVendorType; + phyStatic->entPhysicalVendorTypeSize = entPhysicalVendorTypeSize; + phyStatic->entPhysicalContainedIn = entPhysicalContainedIn; + phyStatic->entPhysicalClass = entPhysicalClass; + phyStatic->entPhysicalParentRelPos = entPhysicalParentRelPos; + phyStatic->entPhysicalName = entPhysicalName; + phyStatic->entPhysicalHardwareRev = entPhysicalHardwareRev; + phyStatic->entPhysicalFirmwareRev = entPhysicalFirmwareRev; + phyStatic->entPhysicalSoftwareRev = entPhysicalSoftwareRev; + phyStatic->entPhysicalSerialNum = entPhysicalSerialNum; + phyStatic->entPhysicalMfgName = entPhysicalMfgName; + phyStatic->entPhysicalModelName = entPhysicalModelName; + phyStatic->entPhysicalAlias = entPhysicalAlias; + phyStatic->entPhysicalAssetID = entPhysicalAssetID; + phyStatic->entPhysicalIsFRU = entPhysicalIsFRU; +} + +/* + This function is just a convenience function to add many logical table + entries +*/ + +void FillentLogicalEntry(entLogicalEntry_t *xLogicalStatic, + char *entLogicalDescr, + oid *entLogicalType, + int entLogicalTypeSize, + char *entLogicalCommunity, + char *entLogicalTAddress, + oid *entLogicalTDomain, + int entLogicalTDomainSize, + char *entLogicalContextEngineId, + char *entLogicalContextName) +{ + xLogicalStatic->entLogicalDescr = entLogicalDescr; + xLogicalStatic->entLogicalType = entLogicalType; + xLogicalStatic->entLogicalTypeSize = entLogicalTypeSize; + xLogicalStatic->entLogicalCommunity = entLogicalCommunity; + xLogicalStatic->entLogicalTAddress = entLogicalTAddress; + xLogicalStatic->entLogicalTDomain = entLogicalTDomain; + xLogicalStatic->entLogicalTDomainSize = entLogicalTDomainSize; + xLogicalStatic->entLogicalContextEngineId = entLogicalContextEngineId; + xLogicalStatic->entLogicalContextName = entLogicalContextName; +} + + +void printTableIndex() +{ + int k=0, m=0; + printf("\n The physical indexes allocated are, \n"); + for (k=0; k