Difference between revisions of "SAFplus Management Framework"

Line 1: Line 1:
1. Git clone:
+
==Git clone==
git clone https://github.com/OpenClovis/SAFplus-Mgt.git <path>
+
:git clone https://github.com/OpenClovis/SAFplus-Mgt.git <path>
  
 +
# Make thirdparty:
 +
<code>
 +
*cd <path>/3rdparty
 +
*make
 +
<code>
  
2. cd <path>/3rdparty
+
==Need to rebuild SAFplus SDK with environment variable BUILD_CPP=1==
make
+
  
3. Need to rebuild SAFplus SDK with environment variable BUILD_CPP=1
+
*$cd <safplusdir>
<br>
+
*$<safplusdir>/src/SAFplus/configure --with-safplus-build
$cd <safplusdir>
+
 
<br>
+
*$export BUILD_CPP=1  
$<safplusdir>/src/SAFplus/configure --with-safplus-build
+
 
<br>
+
*$cd build/local
$export BUILD_CPP=1  
+
 
<br>
+
*$make
$cd build/local
+
<br>
+
$make
+
<br>
+
  
4. Launch OpenClovis IDE and Import Framework Model (i.e <path>/model)
+
==Launch OpenClovis IDE and Import Framework Model (i.e <path>/model)==
  
5. Defined your YANG model view at <model>/src/extras/share/netconf/modules
+
==Defined your YANG model view at <model>/src/extras/share/netconf/modules==
In case you would like to convert YANG model to MIB model, follow the link: [[Convert YANG to MIB model]] and put your MIB model at <model>/src/extras/share/snmp/mibs
+
:In case you would like to convert YANG model to MIB model, follow the link: [[Convert YANG to MIB model]] and put your MIB model at <model>/src/extras/share/snmp/mibs
  
6. Create your object implementor that derive from ClMgtObject mainly base class
+
==Create your object implementor that derive from ClMgtObject mainly base class==
 
or ClMgtObjectContainer or ClMgtList.
 
or ClMgtObjectContainer or ClMgtList.
  
Line 73: Line 73:
 
</code>
 
</code>
  
7. Declare your YANG/MIB model:
+
==Declare your YANG/MIB model:==
 
For YANG model:
 
For YANG model:
 
<br>
 
<br>
Line 93: Line 93:
 
<br>
 
<br>
  
8. Binding your object instance into YANG or MIB model with follow command:
+
==Binding your object instance into YANG or MIB model with follow command:==
 
<br>
 
<br>
 
<code>
 
<code>
Line 105: Line 105:
 
</code>
 
</code>
  
9. Building your model:
+
==Building your model:==
 
Right click project -> Build Project
 
Right click project -> Build Project
 
<br>
 
<br>
  
10. Running your model: <model image>/etc/init.d/safplus start
+
==Running your model:==
 +
<model image>/etc/init.d/safplus start
  
FAQ:
+
==FAQ:==
 
Question:  
 
Question:  
1. Cannot connect to NETCONF.
+
===Cannot connect to NETCONF===
Answer:
+
##Answer:
 
If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at <model image>/etc/init.d/customerScript.sh with root privileges and test your connect with below command:
 
If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at <model image>/etc/init.d/customerScript.sh with root privileges and test your connect with below command:
 
<br>
 
<br>
 
<code>
 
<code>
#sudo sh <model image>/etc/init.d/customerScript.sh start --> to start sshd listening
+
sudo sh <model image>/etc/init.d/customerScript.sh start --> to start sshd listening
 
</code>
 
</code>
 
<br>
 
<br>
Line 128: Line 129:
  
  
2. Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)
+
===Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===
 
Answer:
 
Answer:
sudo yum install libgcrypt-devel
+
:*sudo yum install libgcrypt-devel
  
  
  
 
[[Using Management CLI]]
 
[[Using Management CLI]]

Revision as of 04:18, 23 January 2013

Contents

Git clone

git clone https://github.com/OpenClovis/SAFplus-Mgt.git <path>
  1. Make thirdparty:

  • cd <path>/3rdparty
  • make

<code>

Need to rebuild SAFplus SDK with environment variable BUILD_CPP=1

  • $cd <safplusdir>
  • $<safplusdir>/src/SAFplus/configure --with-safplus-build
  • $export BUILD_CPP=1
  • $cd build/local
  • $make

Launch OpenClovis IDE and Import Framework Model (i.e <path>/model)

Defined your YANG model view at <model>/src/extras/share/netconf/modules

In case you would like to convert YANG model to MIB model, follow the link: Convert YANG to MIB model and put your MIB model at <model>/src/extras/share/snmp/mibs

Create your object implementor that derive from ClMgtObject mainly base class

or ClMgtObjectContainer or ClMgtList.

Example:
<code> class NetworkInterface : public ClMgtObjectContainer {
private:

   ClMgtIndex<string>        name;  // Interface name ex. "eth0".  This is also the index into this data.
   /*
    * "Prov" objects are "provisioned" -- that is, they are stored in the replicated database.
    * When "bind" is called, these object will be loaded from the database's "active" configuration.
    * Once bound when the database is modified via an incoming provisioning request, these objects are notified.
    * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean
    * any type that is serializable via memcpy).
    */
   ClMgtProv<bool>          adminStatus;  // Administrative status.  If you want this to be "up" set it to "true". "False" = "down"
   ClMgtProv<ClIpAddress>   ipAddress;
   ClMgtProv<ClIpAddress>   netMask;
   ClMgtProv<ClIpAddress>   gateway;
   ClMgtStat<uint64_t>      errorCount;   // Cumulative count of errors
   /*
    * ClMgtHistoryStat is an in-ram statistic that returns cumulative count AND contains sub-nodes which are arrays of 10 values containing historical (starting now and extending into the past) data:
    * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...
    * 1min:
    * 5min:
    * 1hr:
    * 1day:
    * 1week:
    * 4weeks:
    * 1year:
    */
   ClMgtHistoryStat<uint64_t> bytesSent;
   ClMgtHistoryStat<uint64_t> bytesReceived;

public:

   NetworkInterface(const char* objName);
   virtual ~NetworkInterface();
   void initialize(std::string ifName, ClMgtObject* parent);
   void get(void **ppBuffer, ClUint64T *pBuffLen);
   void set(void *pBuffer, ClUint64T buffLen, ClTransaction& t = NO_TRANSACTION);
   string IpAddress();

};

Declare your YANG/MIB model:

For YANG model:

/* Declare "network" module */ ClMgtModule yangModule("<your yang model name>"); yangModule.loadModule();

For MIB model:
/* Declare "network" module */ ClMgtModule mibModule("<your mib module name>"); mibModule.loadModule();

Binding your object instance into YANG or MIB model with follow command:


object.bindNetconf("<your yang model name>", "<your xpath model>");
or
object.bindSnmp("<your mib module name>", "<oid instance>");

Building your model:

Right click project -> Build Project

Running your model:

<model image>/etc/init.d/safplus start

FAQ:

Question:

Cannot connect to NETCONF

    1. Answer:

If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at <model image>/etc/init.d/customerScript.sh with root privileges and test your connect with below command:
sudo sh <model image>/etc/init.d/customerScript.sh start --> to start sshd listening
or

  1. sudo sh <model image>/etc/init.d/customerScript.sh stop --> to stop sshd listening


Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)

Answer:

  • sudo yum install libgcrypt-devel


Using Management CLI