Skip to main content.

Future Work

This is a draft of possible EnSuite future works

Yang

Yang modules cannot be augmented, sub-modules cannot be used. New operations and notifications are not considered

Notifications

YencaP does not send notifications neither YencaP Manager is able to receive them

Python exception

It would be better if modules can throw exception (ModuleException) when an error occurs. Then, the Netconf operation would catch this kind of exceptions and follow the error-option (continue-on-error, stop-on-error, ...).

Refactoring routing data model

The routing part of the data model needs to be refactored. route-map must be separated from BGP module since it can be used in other routing protocols. Also interfaces should be separated from the RIP module. A possible new data model organization would be the following:

<routing>
  <interfaces>
    <interface>
      <name>eth0</name>
      <ip-address>10.0.2.1</ip-address>
      <netmask>/24</netmask>
    </interface>
    <interface>
      <name>eth1</name>
      <ip-address>10.0.3.1</ip-address>
      <netmask>/24</netmask>
    </interface>
    <!-- other interfaces here -->
  <interfaces>
  <bgp>
    <as-number>400</as-number>
    <neighbors>
      <neighbor>
        <ip-address>10.0.3.2</ip-address>
        <netmask>/24</netmask>
       <remote-as-number>300</remote-as-number>
       <route-map direct="in" ref="route-map1"/>
      </neighbor>
      <!-- other neighbors here -->
    </neighbors>
  </bgp>
  <rip>
  </rip>
  <ospf>
  </ospf>
  <route-maps>
    <route-map id="route-map1">
      <permit>10</permit>
      <local-preference>800</local-preference>
      <prefix-list ref="prefix-list1"/>
    </route-map>
  <route-maps>
  <access-lists>
  </access-lists>
  <prefix-lists>
  </prefix-lists>
</routing>

Implement the SOAP application protocol

SOAPpy and python-fpconst packages provide the SOAP support in Linux distribution. It should be easy to implement a SOAP server and client.

Sample client code

import SOAPpy
test = 42
server = SOAPpy.SOAPProxy("http://localhost:8888")
server = server._sa ("urn:soapinterop")

hd = SOAPpy.Header() hd.InteropTestHeader ='This should fault, as you don't understand the header.' hd._setMustUnderstand ('InteropTestHeader', 0) hd._setActor ('InteropTestHeader','http://schemas.xmlsoap.org/soap/actor/next') server = server._hd (hd)

print server.echoInteger (test)

Sample server code

import SOAPpy

def echoInteger (inputInteger, _SOAPContext): c = _SOAPContext print c.xmldata print c.header print c.body print c.connection.getpeername() print c.soapaction print c.httpheaders return inputInteger

host = 'localhost' port = 8888

server = SOAPpy.SOAPServer ( (host, port) ) server.registerFunction (SOAPpy.MethodSig(echoInteger, keywords=0,context=1))

server.serve_forever()

Schema based approach

The goal is to make use of XML schema to define the data model. It allows XML structure validation.

Main Ensuite schema

<xsd:schema>
  <xsd:import name="module_RIP.xsd"/>
  <xsd:import name="module_BGP.xsd"/>

<xsd:element name="netconf">
  <element name="rip" type="ripmodule:ripType"/>
  <element name="bgp" type="bgpmodule:bgpType"/>
</xsd:element>

</xsd:schema>

Group based management

The goal is to provide a group based management that allows to manage transparently multiple Netconf agents as if we manage only one. It requires a change to YencapManager in the config.xml file :

<groups>
  <group name="routers">
    <agent id="192.168.0.10"/>
    <agent id="192.168.0.11"/>
  </group>
  <group name="pbx">
    <agent id="192.168.0.99"/>
  </group>
  <group name="workstations">
    <agent id="192.168.0.100"/>
    <agent id="192.168.0.101"/>
    <agent id="192.168.0.102"/>
    <agent id="192.168.0.103"/>
  </group>
</groups>

Improve error handling from modules

It would be nice to better signal module errors especially for EnSuite newcomers. For example, if something went wrong during instantiation or if the getConfig() isn't replying with a valid XML document.