implemented nxsl class "Interface" and function GetInterfaceObject; manual updated
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 29 Nov 2011 18:28:01 +0000 (18:28 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 29 Nov 2011 18:28:01 +0000 (18:28 +0000)
ChangeLog
doc/manuals/netxms_user_manual.odt
src/server/core/nxsl_classes.cpp
src/server/core/nxslext.cpp
src/server/include/nms_objects.h
src/server/include/nms_script.h

index 3441afb..297dddc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
 - New internal parameter: Net.IP.NextHop
 - Implemented IP route visualization in management console
 - New MIBs added: JUNIPER-IVE-MIB
+- New NXSL functions: GetInterfaceObject
 - Fixed issues: #335, #336, #337
 
 
index 394eafc..d828135 100644 (file)
Binary files a/doc/manuals/netxms_user_manual.odt and b/doc/manuals/netxms_user_manual.odt differ
index ef51376..ce0fff1 100644 (file)
@@ -188,6 +188,92 @@ NXSL_Value *NXSL_NodeClass::getAttr(NXSL_Object *pObject, const TCHAR *pszAttr)
 
 
 //
+// Implementation of "NetXMS interface" class
+//
+
+NXSL_InterfaceClass::NXSL_InterfaceClass() : NXSL_Class()
+{
+   _tcscpy(m_szName, _T("Interface"));
+}
+
+NXSL_Value *NXSL_InterfaceClass::getAttr(NXSL_Object *pObject, const TCHAR *pszAttr)
+{
+   Interface *iface;
+   NXSL_Value *pValue = NULL;
+   TCHAR szBuffer[256];
+
+   iface = (Interface *)pObject->getData();
+   if (!_tcscmp(pszAttr, _T("name")))
+   {
+      pValue = new NXSL_Value(iface->Name());
+   }
+   else if (!_tcscmp(pszAttr, _T("id")))
+   {
+      pValue = new NXSL_Value(iface->Id());
+   }
+   else if (!_tcscmp(pszAttr, _T("status")))
+   {
+      pValue = new NXSL_Value((LONG)iface->Status());
+   }
+   else if (!_tcscmp(pszAttr, _T("ipAddr")))
+   {
+      IpToStr(iface->IpAddr(), szBuffer);
+      pValue = new NXSL_Value(szBuffer);
+   }
+   else if (!_tcscmp(pszAttr, _T("ipNetMask")))
+   {
+               IpToStr(iface->getIpNetMask(), szBuffer);
+      pValue = new NXSL_Value(szBuffer);
+   }
+   else if (!_tcscmp(pszAttr, _T("isLoopback")))
+   {
+               pValue = new NXSL_Value((LONG)(iface->isLoopback() ? 1 : 0));
+   }
+   else if (!_tcscmp(pszAttr, _T("isPhysicalPort")))
+   {
+               pValue = new NXSL_Value((LONG)(iface->isPhysicalPort() ? 1 : 0));
+   }
+   else if (!_tcscmp(pszAttr, _T("isManuallyCreated")))
+   {
+               pValue = new NXSL_Value((LONG)(iface->isManuallyCreated() ? 1 : 0));
+   }
+   else if (!_tcscmp(pszAttr, _T("isExcludedFromTopology")))
+   {
+      pValue = new NXSL_Value((LONG)(iface->isExcludedFromTopology() ? 1 : 0));
+   }
+   else if (!_tcscmp(pszAttr, _T("description")))
+   {
+      pValue = new NXSL_Value(iface->getDescription());
+   }
+   else if (!_tcscmp(pszAttr, _T("comments")))
+   {
+      pValue = new NXSL_Value(iface->getComments());
+   }
+   else if (!_tcscmp(pszAttr, _T("ifIndex")))
+   {
+               pValue = new NXSL_Value(iface->getIfIndex());
+   }
+   else if (!_tcscmp(pszAttr, _T("ifType")))
+   {
+               pValue = new NXSL_Value(iface->getIfType());
+   }
+   else if (!_tcscmp(pszAttr, _T("bridgePortNumber")))
+   {
+               pValue = new NXSL_Value(iface->getBridgePortNumber());
+   }
+       else
+       {
+               const TCHAR *attrValue = iface->GetCustomAttribute(pszAttr);
+               if (attrValue != NULL)
+               {
+                       pValue = new NXSL_Value(attrValue);
+               }
+       }
+   return pValue;
+}
+
+
+//
 // Implementation of "NetXMS event" class
 //
 
@@ -309,5 +395,6 @@ NXSL_Value *NXSL_DciClass::getAttr(NXSL_Object *object, const TCHAR *attr)
 
 NXSL_NetObjClass g_nxslNetObjClass;
 NXSL_NodeClass g_nxslNodeClass;
+NXSL_InterfaceClass g_nxslInterfaceClass;
 NXSL_EventClass g_nxslEventClass;
 NXSL_DciClass g_nxslDciClass;
index 9682fa8..7276b28 100644 (file)
@@ -141,6 +141,38 @@ static int F_GetInterfaceName(int argc, NXSL_Value **argv, NXSL_Value **ppResult
 
 
 //
+// Get interface object by index
+// Parameters: node object and interface index
+//
+
+static int F_GetInterfaceObject(int argc, NXSL_Value **argv, NXSL_Value **ppResult, NXSL_Program *program)
+{
+       if (!argv[0]->isObject())
+               return NXSL_ERR_NOT_OBJECT;
+
+       if (!argv[1]->isInteger())
+               return NXSL_ERR_NOT_INTEGER;
+
+       NXSL_Object *object = argv[0]->getValueAsObject();
+       if (_tcscmp(object->getClass()->getName(), g_nxslNodeClass.getName()))
+               return NXSL_ERR_BAD_CLASS;
+
+       Node *node = (Node *)object->getData();
+       Interface *ifc = node->findInterface(argv[1]->getValueAsUInt32(), INADDR_ANY);
+       if (ifc != NULL)
+       {
+               *ppResult = new NXSL_Value(new NXSL_Object(&g_nxslInterfaceClass, ifc));
+       }
+       else
+       {
+               *ppResult = new NXSL_Value;     // Return NULL if interface not found
+       }
+
+       return 0;
+}
+
+
+//
 // Find node object
 // First argument: current node object or null
 // Second argument: node id or name
@@ -352,6 +384,7 @@ static NXSL_ExtFunction m_nxslServerFunctions[] =
    { _T("GetCustomAttribute"), F_GetCustomAttribute, 2 },
    { _T("GetEventParameter"), F_GetEventParameter, 2 },
    { _T("GetInterfaceName"), F_GetInterfaceName, 2 },
+   { _T("GetInterfaceObject"), F_GetInterfaceObject, 2 },
    { _T("GetNodeParents"), F_GetNodeParents, 1 },
        { _T("FindNodeObject"), F_FindNodeObject, 2 },
        { _T("PostEvent"), F_PostEvent, -1 },
index e580942..8421424 100644 (file)
@@ -582,6 +582,7 @@ public:
        bool isSyntheticMask() { return (m_flags & IF_SYNTHETIC_MASK) ? true : false; }
        bool isPhysicalPort() { return (m_flags & IF_PHYSICAL_PORT) ? true : false; }
        bool isLoopback() { return (m_flags & IF_LOOPBACK) ? true : false; }
+       bool isManuallyCreated() { return (m_flags & IF_CREATED_MANUALLY) ? true : false; }
        bool isExcludedFromTopology() { return (m_flags & (IF_EXCLUDE_FROM_TOPOLOGY | IF_LOOPBACK)) ? true : false; }
    bool isFake() { return (m_dwIfIndex == 1) && 
                           (m_dwIfType == IFTYPE_OTHER) &&
index 87181ef..4a091c7 100644 (file)
@@ -51,6 +51,19 @@ public:
 
 
 //
+// "NetXMS interface" class
+//
+
+class NXSL_InterfaceClass : public NXSL_Class
+{
+public:
+   NXSL_InterfaceClass();
+
+   virtual NXSL_Value *getAttr(NXSL_Object *pObject, const TCHAR *pszAttr);
+};
+
+
+//
 // "NetXMS event" class
 //
 
@@ -105,6 +118,7 @@ BOOL IsValidScriptId(DWORD dwId);
 extern NXSL_Library *g_pScriptLibrary;
 extern NXSL_NetObjClass g_nxslNetObjClass;
 extern NXSL_NodeClass g_nxslNodeClass;
+extern NXSL_InterfaceClass g_nxslInterfaceClass;
 extern NXSL_EventClass g_nxslEventClass;
 extern NXSL_DciClass g_nxslDciClass;