<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://help.openclovis.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://help.openclovis.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hoangle</id>
		<title>OpenClovis Product Documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://help.openclovis.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hoangle"/>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Special:Contributions/Hoangle"/>
		<updated>2026-04-24T09:49:16Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2014-07-07T06:51:53Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Step 3 (Cloud mode) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UDP can be run in two modes -- local or cloud.  In local mode, the UDP system uses multicast to find members of the cluster and auto-assigns non-routable IP addresses onto an alias of your chosen backplane network interface.  The advantage of local mode is that no IP addresses need to be configured.&lt;br /&gt;
&lt;br /&gt;
In cloud mode, it is assumed that the cluster is potentially running across the entire internet (no multicast) on machines with specified IP addresses.  Since no initial discovery is possible, every node needs to be configured with the IP addresses of the two system controller nodes.&lt;br /&gt;
&lt;br /&gt;
== Changing Your Model from TIPC to UDP ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- If you have a pre-60 model you will need to upgrade it.  Using the IDE open your model, every option will be grey except model-&amp;gt;update.  This update will generate a configuration file called &amp;lt;your model&amp;gt;/config/clTransport.xml that looks something like this:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit the content clTransport.xml with the UDP configuration details, and remove the TIPC details:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;protocol default=&amp;quot;UDP&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 (Local mode) ===&lt;br /&gt;
Add 2 environment variables into &amp;lt;model_dir&amp;gt;/src/target.env, or make sure these variables are defined before starting SAFplus:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 (Cloud mode) ===&lt;br /&gt;
To use the UDP transport without node discovery (multicast) or IP address assignment, you must:&lt;br /&gt;
&lt;br /&gt;
1. Add these 2 environment variables into &amp;lt;model_dir&amp;gt;/src/target.env, or make sure these variables are defined before starting SAFplus:&lt;br /&gt;
&lt;br /&gt;
ASP_UDP_USE_EXISTING_IP=true&lt;br /&gt;
&lt;br /&gt;
ASP_UDP_LINK_NAME=&amp;lt;link name, for example 'eth0'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure UDP peer addresses like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;6789&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.101&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.102&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following is a this complete example of a cloud mode configuration file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;xports&amp;gt;&lt;br /&gt;
       &amp;lt;xport&amp;gt;&lt;br /&gt;
         &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
         &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
       &amp;lt;/xport&amp;gt;&lt;br /&gt;
     &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;protocol default=&amp;quot;UDP&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;6789&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.101&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.102&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Before or After &amp;quot;make images&amp;quot;? ===&lt;br /&gt;
clTransport.xml and target.env can be changed before the &amp;quot;make images&amp;quot; step so all generated images are UDP by default OR these files can be changed on every node after deployment.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* Q: Is the SAFplus able to run in UDP local mode as a non-root user?&lt;br /&gt;
* A: Yes, but you must properly configure the interfaces since SAFplus cannot. &lt;br /&gt;
Configure interface name (ASP_UDP_LINK_NAME) with the IP address calculated from your subnet and node address (ASP_UDP_SUBNET.DEFAULT_NODEADDR).  The node address is the DEFAULT_NODEADDR settings from etc/asp.conf file.&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/AMF_plugin_to_influence_node_arrival/failure_detection</id>
		<title>AMF plugin to influence node arrival/failure detection</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/AMF_plugin_to_influence_node_arrival/failure_detection"/>
				<updated>2013-10-07T04:07:25Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: Created page with &amp;quot;If you thing internal keepalives mechanism of AMF is not good enough for you, then AMF extension plugin (namely &amp;quot;amfPlugin.so&amp;quot;) will provide an optional plugin which can be co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you thing internal keepalives mechanism of AMF is not good enough for you, then AMF extension plugin (namely &amp;quot;amfPlugin.so&amp;quot;) will provide an optional plugin which can be coordinate with HW based 'bus' or other protocols can learn of a failure to notify AMF Active/Standby's node status before AMF can handled via keepalives into internal mechanism (TIPC topology, UDP heartbeat).&lt;br /&gt;
&lt;br /&gt;
Example of implementation located at &amp;lt;SAFPlus&amp;gt;/src/examples/notifications/amf/plugins. &lt;br /&gt;
&lt;br /&gt;
To active the plugin, goto this folder and calling 'make', then copy the output (i.e amfPlugin.so) to &amp;lt;SAFplus&amp;gt;/lib on deployment target.&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-06-11T03:50:09Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;protocol default=&amp;quot;UDP&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Auto IP address assignment ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport with the IP address, 'already configured' on a link, set these variables in your environment before starting SAFplus:&lt;br /&gt;
&lt;br /&gt;
 ASP_UDP_USE_EXISTING_IP=true&lt;br /&gt;
 ASP_UDP_LINK_NAME=&amp;lt;link name, for example 'eth0'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''clTransport.xml''' should add static IP addresses for cluster:&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;6789&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.101&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.102&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the static addresses and define variable environments ASP_UDP_USE_EXISTING_IP=true and ASP_UDP_LINK_NAME for getting ip addresses below.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;xports&amp;gt;&lt;br /&gt;
       &amp;lt;xport&amp;gt;&lt;br /&gt;
         &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
         &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
       &amp;lt;/xport&amp;gt;&lt;br /&gt;
     &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;protocol default=&amp;quot;UDP&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;6789&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.101&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.102&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-05-23T09:54:34Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Auto IP address assignment ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport with the IP address, 'already configured' on a link, set these variables in your environment before starting SAFplus:&lt;br /&gt;
&lt;br /&gt;
 ASP_UDP_USE_EXISTING_IP=true&lt;br /&gt;
 ASP_UDP_LINK_NAME=&amp;lt;link name, for example 'eth0'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''clTransport.xml''' should add static IP addresses for cluster:&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;6789&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.101&amp;quot; slot=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.102&amp;quot; slot=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the static addresses and define variable environments ASP_UDP_USE_EXISTING_IP=true and ASP_UDP_LINK_NAME for getting ip addresses below.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xports&amp;gt;&lt;br /&gt;
        &amp;lt;xport&amp;gt;&lt;br /&gt;
          &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
          &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
        &amp;lt;/xport&amp;gt;&lt;br /&gt;
      &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;6789&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.101&amp;quot; slot=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;peer addr=&amp;quot;192.168.56.102&amp;quot; slot=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-05-23T03:04:14Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* UDP without Node Discovery (Multicast) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the static addresses and define variable environments ASP_UDP_USE_EXISTING_IP=true and ASP_UDP_LINK_NAME for getting ip addresses below.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xports&amp;gt;&lt;br /&gt;
        &amp;lt;xport&amp;gt;&lt;br /&gt;
          &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
          &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
        &amp;lt;/xport&amp;gt;&lt;br /&gt;
      &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;staticAddresses&amp;gt;&lt;br /&gt;
       &amp;lt;staticAddress address=&amp;quot;192.168.20.1&amp;quot; slot=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;staticAddress address=&amp;quot;192.168.20.2&amp;quot; slot=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/staticAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-05-23T03:01:24Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* UDP without Node Discovery (Multicast) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the static addresses and define variable environment ASP_UDP_USE_EXISTING_IP=true.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xports&amp;gt;&lt;br /&gt;
        &amp;lt;xport&amp;gt;&lt;br /&gt;
          &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
          &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
        &amp;lt;/xport&amp;gt;&lt;br /&gt;
      &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;staticAddresses&amp;gt;&lt;br /&gt;
       &amp;lt;staticAddress address=&amp;quot;192.168.20.1&amp;quot; slot=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;staticAddress address=&amp;quot;192.168.20.2&amp;quot; slot=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/staticAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-05-23T02:47:19Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the static addresses and define variable environment ASP_UDP_USE_EXISTING_IP=true.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xports&amp;gt;&lt;br /&gt;
        &amp;lt;xport&amp;gt;&lt;br /&gt;
          &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
          &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
        &amp;lt;/xport&amp;gt;&lt;br /&gt;
      &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;staticAddresses&amp;gt;&lt;br /&gt;
       &amp;lt;staticAddress address=&amp;quot;192.168.20.1&amp;quot; slot=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;staticAddress address=&amp;quot;192.168.20.2&amp;quot; slot=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-05-21T08:40:45Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Step 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the peer addresses.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xports&amp;gt;&lt;br /&gt;
        &amp;lt;xport&amp;gt;&lt;br /&gt;
          &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
          &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
        &amp;lt;/xport&amp;gt;&lt;br /&gt;
      &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;5689&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;peer addr=&amp;quot;192.168.20.1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;peer addr=&amp;quot;192.168.20.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-05-21T08:40:20Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Step 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/multixport&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the peer addresses.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xports&amp;gt;&lt;br /&gt;
        &amp;lt;xport&amp;gt;&lt;br /&gt;
          &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
          &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
        &amp;lt;/xport&amp;gt;&lt;br /&gt;
      &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;5689&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;peer addr=&amp;quot;192.168.20.1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;peer addr=&amp;quot;192.168.20.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-05-21T08:39:09Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== UDP without Node Discovery (Multicast) ==&lt;br /&gt;
&lt;br /&gt;
To use the UDP transport without node discovery, you must explicitly configure the peer addresses.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
  &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;multixport xmlns=&amp;quot;multixport.ecore&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xports&amp;gt;&lt;br /&gt;
        &amp;lt;xport&amp;gt;&lt;br /&gt;
          &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
          &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
        &amp;lt;/xport&amp;gt;&lt;br /&gt;
      &amp;lt;/xports&amp;gt;&lt;br /&gt;
     &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
          &amp;lt;interval&amp;gt;1000&amp;lt;/interval&amp;gt;&lt;br /&gt;
          &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
          &amp;lt;retries&amp;gt;4&amp;lt;/retries&amp;gt;&lt;br /&gt;
     &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
     &amp;lt;peerAddresses port=&amp;quot;5689&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;peer addr=&amp;quot;192.168.20.1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;peer addr=&amp;quot;192.168.20.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/peerAddresses&amp;gt;&lt;br /&gt;
    &amp;lt;/multixport&amp;gt;&lt;br /&gt;
  &amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;br /&gt;
&lt;br /&gt;
== Q&amp;amp;A ==&lt;br /&gt;
* Q: Is the SAFplus able to run as a user other than root?&lt;br /&gt;
* A: Only pre-requisites, configure interface name (ASP_UDP_LINK_NAME) with IP address (ASP_UDP_SUBNET.DEFAULT_NODEADDR) (Use DEFAULT_NODEADDR settings from asp.conf file)&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
  root:#ifconfig eth0 192.168.57.1&lt;br /&gt;
  user:#export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
  user:#export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
  user:#./etc/init.d/safplus start&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/C%2B%2B_generator_for_YANG_data</id>
		<title>C++ generator for YANG data</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/C%2B%2B_generator_for_YANG_data"/>
				<updated>2013-03-27T07:30:08Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Using console */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Checkout Pyang==&lt;br /&gt;
* svn checkout http://pyang.googlecode.com/svn/trunk/ /tmp/pyang&lt;br /&gt;
&lt;br /&gt;
==Using console==&lt;br /&gt;
&lt;br /&gt;
* export PYANG_PLUGINPATH=&amp;lt;location of management framework&amp;gt;/pyplugin&lt;br /&gt;
* export PYTHONPATH=$PYTHONPATH:/tmp/pyang&lt;br /&gt;
* export YANG_MODPATH=/tmp/pyang/modules:&amp;lt;your include YANG data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $/tmp/pyang/bin/pyang -f y2cpp simple.yang --y2cpp-output &amp;lt;output directory&amp;gt; --y2cpp-mgt &amp;lt;location of management framework&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using OpenClovis IDE==&lt;br /&gt;
&lt;br /&gt;
* Select location of Management Framework (calling client lib for mgt object)&lt;br /&gt;
**'''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View''', click at pull down menu and select '''&amp;quot;Select Management Framework Location&amp;quot;''' action.&lt;br /&gt;
&lt;br /&gt;
* Defined YANG data model file:&lt;br /&gt;
# Create a new yang data model anywhere locate at your project.&lt;br /&gt;
# Import YANG data model from '''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View''', click at pull down menu and select '''&amp;quot;Import YANG file&amp;quot;''' action.&lt;br /&gt;
&lt;br /&gt;
* C++ codegen class objects:&lt;br /&gt;
** Open Yang Explorer View: '''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View'''. Right click on yang data model from this list viewer (support multi-select items) and select '''&amp;quot;Generator CPP&amp;quot;'''.&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/C%2B%2B_generator_for_YANG_data</id>
		<title>C++ generator for YANG data</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/C%2B%2B_generator_for_YANG_data"/>
				<updated>2013-03-26T04:25:28Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Using console */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Checkout Pyang==&lt;br /&gt;
* svn checkout http://pyang.googlecode.com/svn/trunk/ /tmp/pyang&lt;br /&gt;
&lt;br /&gt;
==Using console==&lt;br /&gt;
&lt;br /&gt;
* export PYANG_PLUGINPATH=&amp;lt;location of management framework&amp;gt;/pyplugin&lt;br /&gt;
* export PYTHONPATH=$PYTHONPATH:/tmp/pyang&lt;br /&gt;
* export YANG_MODPATH=/tmp/pyang/modules&lt;br /&gt;
&lt;br /&gt;
  $pyang -f y2cpp simple.yang --y2cpp-output &amp;lt;output directory&amp;gt; --y2cpp-mgt &amp;lt;location of management framework&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using OpenClovis IDE==&lt;br /&gt;
&lt;br /&gt;
* Select location of Management Framework (calling client lib for mgt object)&lt;br /&gt;
**'''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View''', click at pull down menu and select '''&amp;quot;Select Management Framework Location&amp;quot;''' action.&lt;br /&gt;
&lt;br /&gt;
* Defined YANG data model file:&lt;br /&gt;
# Create a new yang data model anywhere locate at your project.&lt;br /&gt;
# Import YANG data model from '''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View''', click at pull down menu and select '''&amp;quot;Import YANG file&amp;quot;''' action.&lt;br /&gt;
&lt;br /&gt;
* C++ codegen class objects:&lt;br /&gt;
** Open Yang Explorer View: '''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View'''. Right click on yang data model from this list viewer (support multi-select items) and select '''&amp;quot;Generator CPP&amp;quot;'''.&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/C%2B%2B_generator_for_YANG_data</id>
		<title>C++ generator for YANG data</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/C%2B%2B_generator_for_YANG_data"/>
				<updated>2013-03-26T04:16:22Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: Created page with &amp;quot;==Checkout Pyang== * svn checkout http://pyang.googlecode.com/svn/trunk/ /tmp/pyang  ==Using console==  * export PYANG_PLUGINPATH=&amp;lt;location of management framework&amp;gt;/pyplugin *...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Checkout Pyang==&lt;br /&gt;
* svn checkout http://pyang.googlecode.com/svn/trunk/ /tmp/pyang&lt;br /&gt;
&lt;br /&gt;
==Using console==&lt;br /&gt;
&lt;br /&gt;
* export PYANG_PLUGINPATH=&amp;lt;location of management framework&amp;gt;/pyplugin&lt;br /&gt;
* export PYTHONPATH=$PYTHONPATH:/tmp/pyang&lt;br /&gt;
* export YANG_MODPATH=/tmp/pyang/modules&lt;br /&gt;
&lt;br /&gt;
  $pyang -f j2cpp simple.yang --y2cpp-output &amp;lt;output directory&amp;gt; --y2cpp-mgt &amp;lt;location of management framework&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using OpenClovis IDE==&lt;br /&gt;
&lt;br /&gt;
* Select location of Management Framework (calling client lib for mgt object)&lt;br /&gt;
**'''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View''', click at pull down menu and select '''&amp;quot;Select Management Framework Location&amp;quot;''' action.&lt;br /&gt;
&lt;br /&gt;
* Defined YANG data model file:&lt;br /&gt;
# Create a new yang data model anywhere locate at your project.&lt;br /&gt;
# Import YANG data model from '''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View''', click at pull down menu and select '''&amp;quot;Import YANG file&amp;quot;''' action.&lt;br /&gt;
&lt;br /&gt;
* C++ codegen class objects:&lt;br /&gt;
** Open Yang Explorer View: '''Window &amp;gt;&amp;gt; Show View &amp;gt;&amp;gt; Yang Explorer View'''. Right click on yang data model from this list viewer (support multi-select items) and select '''&amp;quot;Generator CPP&amp;quot;'''.&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-03-26T03:42:44Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deploying and running your model:==&lt;br /&gt;
===To install===&lt;br /&gt;
:This step is helping to automatically configure port 830 and netconf-subsystem for ssh daemon and define the super user for netconf server.&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/install.sh&lt;br /&gt;
&lt;br /&gt;
===To run the model===&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection on both yumacli or mgtcli===&lt;br /&gt;
&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:'''Hint:''' Go to step installing to make sure netconf-subsystem is listening on port 830.&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;br /&gt;
&lt;br /&gt;
[[C++ generator for YANG data]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-02-04T07:56:41Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deploying and running your model:==&lt;br /&gt;
===To install===&lt;br /&gt;
:This step is helping to automatically configure port 830 and netconf-subsystem for ssh daemon and define the super user for netconf server.&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/install.sh&lt;br /&gt;
&lt;br /&gt;
===To run the model===&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection on both yumacli or mgtcli===&lt;br /&gt;
&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:'''Hint:''' Go to step installing to make sure netconf-subsystem is listening on port 830.&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-02-04T07:55:25Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deploying and running your model:==&lt;br /&gt;
===To install===&lt;br /&gt;
:This step is helping to automatically configure port 830 and netconf-subsystem for ssh daemon and define the super user for netconf server.&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/install.sh&lt;br /&gt;
&lt;br /&gt;
===To run the model===&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection on both yumacli or mgtcli===&lt;br /&gt;
&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: &lt;br /&gt;
::  Go to step installing to make sure netconf-subsystem is listening on port 830.&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-02-04T07:54:38Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deploying and running your model:==&lt;br /&gt;
===To install===&lt;br /&gt;
:This step is helping to automatically configure port 830 and netconf-subsystem for ssh daemon and define the super user for netconf server.&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/install.sh&lt;br /&gt;
&lt;br /&gt;
===To run the model===&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection on both yumacli or mgtcli===&lt;br /&gt;
&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: &lt;br /&gt;
* Go to step installing to make sure netconf-subsystem is listening on port 830.&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-02-04T07:51:49Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Question: NETCONF close your connection with yumacli or mgtcli */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deploying and running your model:==&lt;br /&gt;
===To install===&lt;br /&gt;
:This step is helping to automatically configure port 830 and netconf-subsystem for ssh daemon and define the super user for netconf server.&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/install.sh&lt;br /&gt;
&lt;br /&gt;
===To run the model===&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection on both yumacli or mgtcli===&lt;br /&gt;
&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-02-04T07:49:53Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Running your model: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deploying and running your model:==&lt;br /&gt;
===To install===&lt;br /&gt;
:This step is helping to automatically configure port 830 and netconf-subsystem for ssh daemon and define the super user for netconf server.&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/install.sh&lt;br /&gt;
&lt;br /&gt;
===To run the model===&lt;br /&gt;
&lt;br /&gt;
: root@test-pc:$&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-31T07:31:36Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* YUUMA CLI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-31T07:31:03Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Testing SET/GET command: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
===YUUMA CLI===&lt;br /&gt;
:Should be exporting YUMA_HOME locate in &amp;lt;SAFplus run directory&amp;gt;/share/netconf&lt;br /&gt;
:'''Example''':&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# export YUMA_HOME=/root/SAFplus/ctrlI0/share/netconf&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# bin/yangcli&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-31T07:14:11Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Running testing SET/GET command: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-31T07:13:49Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Running your model: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
* Create notification instance:&lt;br /&gt;
    ClMgtNotify notiInstance(&amp;quot;&amp;lt;notification name defined in Yang file&amp;gt;&amp;quot;) &lt;br /&gt;
    Example:&lt;br /&gt;
      ClMgtNotify         addrFailoverNotify(&amp;quot;AddressFailover&amp;quot;);&lt;br /&gt;
* Add notification parameters:&lt;br /&gt;
    notiInstance.addLeaf(&amp;quot;&amp;lt;leaf name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;default value&amp;gt;&amp;quot;)&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.addLeaf(&amp;quot;ipAddress&amp;quot;, netif_eth0.IpAddress());&lt;br /&gt;
* Add notification to module:&lt;br /&gt;
    yangModule.addMgtNotify(&amp;amp;notiInstance)&lt;br /&gt;
    Example:&lt;br /&gt;
      yangModule.addMgtNotify(&amp;amp;addrFailoverNotify);&lt;br /&gt;
* Send notification:&lt;br /&gt;
    notiInstance.sendNotification()&lt;br /&gt;
    Example:&lt;br /&gt;
      addrFailoverNotify.sendNotification();&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Running testing SET/GET command:==&lt;br /&gt;
===Mgt CLI===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# python bin/mgtcli.py &lt;br /&gt;
&lt;br /&gt;
 Management info cli -- OpenClovis, Inc., 2012&lt;br /&gt;
 ---------------------------------------------&lt;br /&gt;
 Starting interactive prompt (type 'help' for help)&lt;br /&gt;
 [MgtCli]==&amp;gt; add element --host=127.0.0.1 --name=openclovis --user=root --password=clovis&lt;br /&gt;
 Connecting to openclovis&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/&lt;br /&gt;
 openclovis/arp         openclovis/ethernet    openclovis/interfaces  &lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/&lt;br /&gt;
 interfaces:          {'name': 'eth0'}&lt;br /&gt;
 interfaces:          {'name': 'eth1'}&lt;br /&gt;
&lt;br /&gt;
 [MgtCli]==&amp;gt; ls openclovis/ethernet/interfaces&lt;br /&gt;
 openclovis/ethernet/interfaces[name=eth0]:&lt;br /&gt;
  adminStatus:         false&lt;br /&gt;
  bytesReceived:       705477592&lt;br /&gt;
  bytesSent:           160825231&lt;br /&gt;
  errorCount:          0&lt;br /&gt;
  gateway:             0.0.0.0&lt;br /&gt;
  ipAddress:           10.20.15.37&lt;br /&gt;
  name:                eth0&lt;br /&gt;
  netMask:             255.255.255.0&lt;br /&gt;
  &lt;br /&gt;
  openclovis/ethernet/interfaces[name=eth1]:&lt;br /&gt;
   adminStatus:         false&lt;br /&gt;
   bytesReceived:       0&lt;br /&gt;
   bytesSent:           0&lt;br /&gt;
   errorCount:          0&lt;br /&gt;
   gateway:             0.0.0.0&lt;br /&gt;
   ipAddress:           255.127.0.0&lt;br /&gt;
   name:                eth1&lt;br /&gt;
   netMask:             255.127.0.0&lt;br /&gt;
   &lt;br /&gt;
   [MgtCli]==&amp;gt; &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NETSNMP===&lt;br /&gt;
root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 0&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpset -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1.0 u 1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.1.0 = Gauge32: 1&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 root@openclovis:/root/SAFplus/ctrlI0# snmpwalk -v 2c -c clovis localhost:1610 1.3.6.1.4.1.99840.2.1&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.48 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.1.4.101.116.104.49 = INTEGER: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.48 = Hex-STRING: 65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.2.4.101.116.104.49 = Hex-STRING: 65 74 68 31 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.48 = Hex-STRING: 31 30 2E 32 30 2E 31 35 2E 33 37 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.3.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.48 = Hex-STRING: 32 35 35 2E 32 35 35 2E 32 35 35 2E 30 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.4.4.101.116.104.49 = Hex-STRING: 32 35 35 2E 31 32 37 2E 30 2E 30 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.48 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.5.4.101.116.104.49 = Hex-STRING: 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.48 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.6.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.48 = Gauge32: 160719241&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.7.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.48 = Gauge32: 705216763&lt;br /&gt;
 SNMPv2-SMI::enterprises.99840.2.1.1.8.4.101.116.104.49 = Gauge32: 0&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-24T02:22:57Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Implementation RPC for YANG model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC====&lt;br /&gt;
: '''This is only valid for NETCONF'''&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-24T02:21:33Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Initialize maping between object instance and YANG/MIB model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and NETCONF/SNMP model====&lt;br /&gt;
&lt;br /&gt;
*With NETCONF&lt;br /&gt;
&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
*With SNMP &lt;br /&gt;
&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;network&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-24T02:18:48Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Declare your YANG/MIB model: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:System provides a set of data modeling classes to build a flexible data model which have object-oriented relationships (containment, inheritance, association). User can implement his own C++ classes derived from the MGT base classes to match with the model defined in the input Yang file.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtModule&lt;br /&gt;
:*ClMgtObject&lt;br /&gt;
:*ClMgtContainer&lt;br /&gt;
:*ClMgtList&lt;br /&gt;
:*ClMgtIndex&lt;br /&gt;
:*ClMgtProvision&lt;br /&gt;
:*ClMgtStatistic&lt;br /&gt;
:*ClMgtHistoryStatistic&lt;br /&gt;
:*ClMgtRpc&lt;br /&gt;
:*ClMgtNotification&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule dataModule(&amp;quot;&amp;lt;your model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: dataModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T08:34:10Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* FAQs: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base classes depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer:===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T08:33:46Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base classes depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer:===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: root@desktop:/#sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T08:32:48Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base classes depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T08:32:32Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base classes depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
&lt;br /&gt;
:: sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T08:32:13Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base classes depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:: sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
:: sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T08:31:28Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Declare your YANG/MIB model: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base classes depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
:: /*&lt;br /&gt;
::  * Initialize the module&lt;br /&gt;
::  */&lt;br /&gt;
:: mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T08:30:17Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Initialize maping between object instance and YANG/MIB model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base classes depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize maping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:*Create object instance:&lt;br /&gt;
&lt;br /&gt;
:: yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Should be defined at your main program or header file.&lt;br /&gt;
::  */&lt;br /&gt;
:: NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
:*Initialize the mapping for object instance:&lt;br /&gt;
&lt;br /&gt;
:: objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
*With MIB model&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
&lt;br /&gt;
:: object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
::'''Example''':&lt;br /&gt;
:: /* &lt;br /&gt;
::  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
::  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
::  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
::  */&lt;br /&gt;
::  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Using_Management_CLI</id>
		<title>Using Management CLI</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Using_Management_CLI"/>
				<updated>2013-01-23T07:48:06Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: Created page with &amp;quot; '''TODO'''&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; '''TODO'''&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T07:47:16Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: '''TODO'''&lt;br /&gt;
:*ClMgtObjectContainer: '''TODO'''&lt;br /&gt;
:*ClMgtList: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
====Implementation RPC for YANG model====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
====Implementation Notification====&lt;br /&gt;
 '''TODO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-01-23T07:19:49Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Step 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-01-23T07:19:17Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Step 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp\&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2013-01-23T07:19:01Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Step 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp\&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
 export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
 export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T07:14:19Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* FAQ: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQs:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Convert_YANG_to_MIB_model</id>
		<title>Convert YANG to MIB model</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Convert_YANG_to_MIB_model"/>
				<updated>2013-01-23T07:13:30Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
:YANG2SMI is an extensible output plugin for pyang. This plugin can be used to generate MIB model from YANG model data.&lt;br /&gt;
&lt;br /&gt;
Step to convert YANG to MIB model:&lt;br /&gt;
# You need an installation of pyang: &lt;br /&gt;
## cd &amp;lt;SAFplus-Management-Framework&amp;gt;/3rdparty&lt;br /&gt;
## make pyang&lt;br /&gt;
#Add the YANG2SMI plugin to your existing pyang installation. This may be done in one of the following three ways:&lt;br /&gt;
##Add &amp;lt;SAFplus-Management-Framework&amp;gt;/model/src/extras/pyplugin/yang2smi.py to &amp;lt;SAFplus-Management-Framework&amp;gt;/3rdparty/pyang/pyang/plugins,&lt;br /&gt;
##Add the location of &amp;lt;SAFplus-Management-Framework&amp;gt;/model/src/extras/pyplugin/yang2smi.py to the $PYANG_PLUGINPATH environment variable, or&lt;br /&gt;
##Use the --plugindir option of pyang each time you want to use YANG2SMI&lt;br /&gt;
#Change directory to &amp;lt;SAFplus-Management-Framework&amp;gt;/3rdparty/pyang and launch pyang with specific yang2smi output format, YANG module file, OID root module and MIB model file.&lt;br /&gt;
&lt;br /&gt;
For example, to generate the network.yang to NETWORK.MIB , type:&lt;br /&gt;
 root@desktop:/# source env.sh;./bin/pyang -f yang2smi network.yang --yang2smi-oid=99840 -o NETWORK.MIB&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T07:09:49Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: 3rdparty build failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
===Answer:===&lt;br /&gt;
 root@desktop:/# sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T07:08:41Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Answer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and communication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T07:07:38Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Question: Cannot connect to NETCONF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: NETCONF close your connection with yumacli or mgtcli===&lt;br /&gt;
===Answer===&lt;br /&gt;
:This may cause by your sshd deamon Subsystem is still not running normal. &lt;br /&gt;
:Solution: If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:or&lt;br /&gt;
&lt;br /&gt;
 sudo &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question: NETSNMP respone with timeout for snmpwalk/snmpget/snmpset command===&lt;br /&gt;
===Answer===&lt;br /&gt;
: The snmp master agent is listening on port 1610 and comunication string is &amp;quot;clovis&amp;quot;. Those params can be defined by your at &amp;lt;model&amp;gt;/src/config/snmpd.conf.&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:57:12Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Rebuild SAFplus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Re-building SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:56:47Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Build CPP component on SAFplus Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Building CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Rebuild SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Building your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:55:12Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Binding your object instance into YANG or MIB model with follow command: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Build CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Rebuild SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Build your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
====Initialize mapping between object instance and YANG/MIB model====&lt;br /&gt;
&lt;br /&gt;
*With Yang model&lt;br /&gt;
:Create object instance:&lt;br /&gt;
 yourclass objectInstance(&amp;quot;&amp;lt;name of node tree object intend to create the mapping&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 NetworkInterface    netif_eth0(&amp;quot;interfaces&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:Initialize the mapping for object instance:&lt;br /&gt;
 objectInstance.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindNetconf(&amp;quot;network&amp;quot;, &amp;quot;/ethernet/interfaces[name='eth0']&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=====With MIB model=====&lt;br /&gt;
:Replace initialize mapping command with below API&lt;br /&gt;
 object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
:*'''Example''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Bind the &amp;quot;active&amp;quot; network interface to &lt;br /&gt;
  * a &amp;quot;/ethernet/interfaces&amp;quot; subtree within&lt;br /&gt;
  * the &amp;quot;network&amp;quot; module.&lt;br /&gt;
  */&lt;br /&gt;
  netif_eth0.bindSnmp(&amp;quot;NETWORK&amp;quot;, &amp;quot;1.3.6.1.4.1.99840.2.1.1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:41:25Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Declare your YANG/MIB model: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Build CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Rebuild SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Build your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Declare your YANG/MIB model:====&lt;br /&gt;
:*'''With YANG module''':&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 yangModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
:*'''With MIB model''':&lt;br /&gt;
&lt;br /&gt;
 /* &lt;br /&gt;
  * Declare &amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot; module &lt;br /&gt;
  * Should be defined at your main program or header file.&lt;br /&gt;
  */&lt;br /&gt;
 ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
 /*&lt;br /&gt;
  * Initialize the module&lt;br /&gt;
  */&lt;br /&gt;
 mibModule.loadModule();&lt;br /&gt;
&lt;br /&gt;
==Binding your object instance into YANG or MIB model with follow command:==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:32:53Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Create your object implementor that derive from ClMgtObject mainly base class */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Build CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Rebuild SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Build your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
===Implementation your model===&lt;br /&gt;
:Create your C++ classes that derive from ClMgtObject base class or ClMgtObjectContainer or ClMgtList depend on your yang model.&lt;br /&gt;
&lt;br /&gt;
:*ClMgtObject: TODO&lt;br /&gt;
:*ClMgtObjectContainer: TODO&lt;br /&gt;
:*ClMgtList: TODO&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
 class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
 private:&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
 public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Declare your YANG/MIB model:==&lt;br /&gt;
For YANG model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
yangModule.loadModule();&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For MIB model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
mibModule.loadModule();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding your object instance into YANG or MIB model with follow command:==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:27:46Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Defined your YANG model view at /src/extras/share/netconf/modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Build CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Rebuild SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Build your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
===Defined your YANG model===&lt;br /&gt;
: Using vim, gedit or IDE to create your Yang model and put those models into &amp;lt;model&amp;gt;/src/extras/share/netconf/modules.&lt;br /&gt;
:*In case you would like to convert YANG model to MIB model, follow instruction at the link: [[Convert YANG to MIB model]] and also put the MIB model at &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs.&lt;br /&gt;
&lt;br /&gt;
==Create your object implementor that derive from ClMgtObject mainly base class==&lt;br /&gt;
or ClMgtObjectContainer or ClMgtList.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Declare your YANG/MIB model:==&lt;br /&gt;
For YANG model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
yangModule.loadModule();&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For MIB model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
mibModule.loadModule();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding your object instance into YANG or MIB model with follow command:==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Launch OpenClovis IDE and Import Framework Model (i.e /model) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Build CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Rebuild SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Build your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Development your source code==&lt;br /&gt;
* Using OpenClovis IDE:&lt;br /&gt;
: File -&amp;gt; Import -&amp;gt; General -&amp;gt; Existing Projects into Workspace -&amp;gt; Next -&amp;gt; Locate &amp;lt;git checkout Framework path&amp;gt;/models -&amp;gt; Finish.&lt;br /&gt;
:[[File:import_fw_model.png]]&lt;br /&gt;
&lt;br /&gt;
==Defined your YANG model view at &amp;lt;model&amp;gt;/src/extras/share/netconf/modules==&lt;br /&gt;
: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 &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs&lt;br /&gt;
&lt;br /&gt;
==Create your object implementor that derive from ClMgtObject mainly base class==&lt;br /&gt;
or ClMgtObjectContainer or ClMgtList.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Declare your YANG/MIB model:==&lt;br /&gt;
For YANG model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
yangModule.loadModule();&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For MIB model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
mibModule.loadModule();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding your object instance into YANG or MIB model with follow command:==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/SAFplus_Management_Framework</id>
		<title>SAFplus Management Framework</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/SAFplus_Management_Framework"/>
				<updated>2013-01-23T06:13:35Z</updated>
		
		<summary type="html">&lt;p&gt;Hoangle: /* Need to rebuild SAFplus SDK with environment variable BUILD_CPP=1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download Framework via github  ==&lt;br /&gt;
 root@desktop:/# git clone https://github.com/OpenClovis/SAFplus-Mgt.git &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building thirdparty library ==&lt;br /&gt;
&lt;br /&gt;
 root@desktop:/# cd &amp;lt;path&amp;gt;/3rdparty&lt;br /&gt;
 root@desktop:&amp;lt;path&amp;gt;/3rdparty# make&lt;br /&gt;
&lt;br /&gt;
==Build CPP component on SAFplus Framework==&lt;br /&gt;
This may be done in one of the following two ways:&lt;br /&gt;
&lt;br /&gt;
===Rebuild SAFplus===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;safplusdir&amp;gt;&lt;br /&gt;
 root@desktop:/# mkdir -p prebuild&lt;br /&gt;
 root@desktop:/# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:/# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure --with-safplus-build&lt;br /&gt;
 root@desktop:/# cd build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
===Build your model with extra configure===&lt;br /&gt;
 root@desktop:/# cd &amp;lt;project root&amp;gt;&lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# export BUILD_CPP=1 &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# &amp;lt;safplusdir&amp;gt;/src/SAFplus/configure '''--with-safplus-build''' --with-model-name=&amp;lt;your model name&amp;gt; &lt;br /&gt;
 root@desktop:&amp;lt;project root&amp;gt;# cd &amp;lt;your model name&amp;gt;/build/local&lt;br /&gt;
 root@desktop:/# make&lt;br /&gt;
&lt;br /&gt;
==Launch OpenClovis IDE and Import Framework Model (i.e &amp;lt;path&amp;gt;/model)==&lt;br /&gt;
&lt;br /&gt;
==Defined your YANG model view at &amp;lt;model&amp;gt;/src/extras/share/netconf/modules==&lt;br /&gt;
: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 &amp;lt;model&amp;gt;/src/extras/share/snmp/mibs&lt;br /&gt;
&lt;br /&gt;
==Create your object implementor that derive from ClMgtObject mainly base class==&lt;br /&gt;
or ClMgtObjectContainer or ClMgtList.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class NetworkInterface : public ClMgtObjectContainer {&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
private:&lt;br /&gt;
&lt;br /&gt;
    ClMgtIndex&amp;lt;string&amp;gt;        name;  // Interface name ex. &amp;quot;eth0&amp;quot;.  This is also the index into this data.&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * &amp;quot;Prov&amp;quot; objects are &amp;quot;provisioned&amp;quot; -- that is, they are stored in the replicated database.&lt;br /&gt;
     * When &amp;quot;bind&amp;quot; is called, these object will be loaded from the database's &amp;quot;active&amp;quot; configuration.&lt;br /&gt;
     * Once bound when the database is modified via an incoming provisioning request, these objects are notified.&lt;br /&gt;
     * ClMgtProv is a template that wraps provisioning functionality around any fundamental type (by fundamental I mean&lt;br /&gt;
     * any type that is serializable via memcpy).&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtProv&amp;lt;bool&amp;gt;          adminStatus;  // Administrative status.  If you want this to be &amp;quot;up&amp;quot; set it to &amp;quot;true&amp;quot;. &amp;quot;False&amp;quot; = &amp;quot;down&amp;quot;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   ipAddress;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   netMask;&lt;br /&gt;
    ClMgtProv&amp;lt;ClIpAddress&amp;gt;   gateway;&lt;br /&gt;
&lt;br /&gt;
    ClMgtStat&amp;lt;uint64_t&amp;gt;      errorCount;   // Cumulative count of errors&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * 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:&lt;br /&gt;
     * 5sec: the cumulative count within second 0-5, 5-10, 10-15, ...&lt;br /&gt;
     * 1min:&lt;br /&gt;
     * 5min:&lt;br /&gt;
     * 1hr:&lt;br /&gt;
     * 1day:&lt;br /&gt;
     * 1week:&lt;br /&gt;
     * 4weeks:&lt;br /&gt;
     * 1year:&lt;br /&gt;
     */&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesSent;&lt;br /&gt;
    ClMgtHistoryStat&amp;lt;uint64_t&amp;gt; bytesReceived;&lt;br /&gt;
public:&lt;br /&gt;
    NetworkInterface(const char* objName);&lt;br /&gt;
    virtual ~NetworkInterface();&lt;br /&gt;
    void initialize(std::string ifName, ClMgtObject* parent);&lt;br /&gt;
    void get(void **ppBuffer, ClUint64T *pBuffLen);&lt;br /&gt;
    void set(void *pBuffer, ClUint64T buffLen, ClTransaction&amp;amp; t = NO_TRANSACTION);&lt;br /&gt;
    string IpAddress();&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Declare your YANG/MIB model:==&lt;br /&gt;
For YANG model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         yangModule(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;);&lt;br /&gt;
yangModule.loadModule();&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For MIB model:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/* Declare &amp;quot;network&amp;quot; module */&lt;br /&gt;
ClMgtModule         mibModule(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;);&lt;br /&gt;
mibModule.loadModule();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding your object instance into YANG or MIB model with follow command:==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindNetconf(&amp;quot;&amp;lt;your yang model name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;your xpath model&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
object.bindSnmp(&amp;quot;&amp;lt;your mib module name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;oid instance&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Building your model:==&lt;br /&gt;
Right click project -&amp;gt; Build Project&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running your model:==&lt;br /&gt;
&amp;lt;model image&amp;gt;/etc/init.d/safplus start&lt;br /&gt;
&lt;br /&gt;
==FAQ:==&lt;br /&gt;
===Question: Cannot connect to NETCONF===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*If you are running your model with non-root user, port 830 cannot being listening. Your should manual running the script at &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh with root privileges and test your connect with below command:&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh start --&amp;gt; to start sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&lt;br /&gt;
::*sudo sh &amp;lt;model image&amp;gt;/etc/init.d/customerScript.sh stop  --&amp;gt; to stop sshd listening&lt;br /&gt;
:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Question: Make 3rdparty failed at libssh2: Need OpenSSL or Libgcrypt (such as Fedora or Centos)===&lt;br /&gt;
====Answer:====&lt;br /&gt;
:*sudo yum install libgcrypt-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using Management CLI]]&lt;/div&gt;</summary>
		<author><name>Hoangle</name></author>	</entry>

	</feed>