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> |
- BGP module schema : BGP_Module.xsd
<xsd:schema> <xsd:complexType name="bgpType"> <!-- ... --> </xsd:complexType> </xsd:schema>
- RIP module schema : RIP_Module.xsd
<xsd:schema> <xsd:complexType name="ripType"> <!-- ... --> </xsd:complexType> </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.