User login

Florin Zaicu's blog

23

Oct

2017

Last week I carried on with reading through the papers that I had found related to error detection and recovery of SDN. I have also written quick summaries for all the papers that I read through. At the end of the week, I started looking at traffic engineering and how this can tie into error detection and recovery. Thursday I attended the compulsory postgrad workshop.

This week I want to quickly tidy up the summaries that I have so far. I also want to look a bit more into traffic engineering and perhaps other potential enhancements that can be applied to error recovery and detection. I would also like to try and run a few experiments in Mininet with some of the presented systems in the papers I have looked at. This will hopefully help me to gain a better understanding of what has been done so far.

02

Oct

2017

This week I finished the route entry C implementation and ran several tests to make sure everything is working as expected. I then started integrating the new c modules with the python code and tested it to make sure everything is working correctly. At the end of the week, I re-ran the performance tests and collected performance stats to compare the new implementation to the old Python modules.

28

Sep

2017

This week I finished implementing and testing the new prefix module written in C (as a new Python type). After some preliminary testing, it seems that implementing the module in C offers a significant increase in performance and also a decrease in memory usage. Prefixes, however, use far less memory than route entry objects. I then started working on implementing the Route-entry module in C as well to further improve performance and hopefully resolve the memory issues we are having.

20

Sep

2017

This week I finished of modifying the BGP performance testing tool. I ran the test several times with various prefix sizes on Quagga, BIRD and the disaggregator to gather stats and compare performance. The tool samples CPU usage, memory consumption, prefixes processed and time. After cleaning up and processing the results I then looked at ways to improve performance. I focused on memory and CPU profiling the code to see where the bottlenecks are and where we can improve.

Memory usage seems to be quite high due to the prefix and route entry objects, which we have a lot of. After looking into potential solutions I found that there are no ways this can be reduced in python. I then started looking at implementing the prefix module in C and replacing the existing Python-based implementation to reduce memory usage and improve performance.

11

Sep

2017

This week I finished off implementation of the dynamic topology module. Fixed up issues with the OSPF dynamic topology module and with the processing of topology information in the network module. I also performed more tests to make sure that the network changes are received by the disaggregator and interpreted correctly. I have also fixed some bugs relating to the unit test runner and modified the disaggregator to use a logging module, in preparation for performance testing. The log level for the output can now be specified as an argument when running the disaggregator.

At the end of the week, I started to work on performance testing the code. I am currently modifying the testing tool to allow benchmarking of the disaggregator. There are several other BGP implementations that can be benchmarked with the tool. We can use these to compare our results.

04

Sep

2017

Most of this week I spent on getting dynamic topology information from the network. I mostly focused on implementing support for OSPF. I extended the simulation tools to allow starting quagga ospfd router instances and extended the connection tools to work as well. I then created a test OSPF network and spent some time trying to connect to it to receive link state updates. After some experimentation, I managed to integrate a tool that will establish an OSPF connection to a router and receive link state updates, which it stores and processes. Network information is built from the link state database. This info is sent to the disaggregator which will process it and create a topology object from it. When a network change occurs, either due to something expires. a link going down or something new being advertised, the internal topology of the disaggregator will be modified accordingly.

I have also spent some time modifying the configuration file in preparation for support of more protocols to get dynamic topology information of our network. The config file now accepts multiple protocols as well as multiple static files to load topology information from. The dynamic protocol probe tools are automatically started by the network module based on the config file protocol type and configuration attributes.

At the end of the week, I spent some time working on implementing better filtering of prefixes to peers based on the negotiated MP-BGP AFI/SAFI attributes.

28

Aug

2017

This week I spent some time looking at comparing the Python3 and Python2.7 versions of the disaggregator to see which version offers better performance and is more memory efficient. The Python 3 version of the disaggregator uses less memory and also seems to be a bit faster. This is now the versions used in the master branch of the repo.

Most of the week I worked on adding IPv6 support to the disaggregator. I extended the prefix class to support IPv6 prefixes and then extended the BGP prefix parsing to retrieve the advertised and withdrawn IPv6 prefixes. Have also added parsing of the ExaBGP negotiated messages to retrieve the negotiated MP-BGP NLRI families for the disaggregator peers. The code was modified to uses these negotiated families when parsing the update prefixes. This will make it easier to deal with other MP-BGP NLRI families that will be supported later on.

More unit-tests and Mininet unit-test cases were also added to check the new modifications are working. At the end of the week, I also started looking at ways to get the topology information of the network dynamically.

08

Aug

2017

Finished updating the disaggregator and method unit tests to work with Python 3. Most of the week I have also spent on updating the simulation tools to run with Python 3 and have updated to the new ExaBGP (version 4.0.2).

I have also worked on the automatic unit tests which will make sure that the disaggregator behaves accordingly when running.

31

Jul

2017

This week I finished the simulation tools which allow building and simulating network topologies in Mininet. I spent some time working on testing the disaggregator in the simulation framework to make sure everything is working correctly.

While testing, I have found and fixed several bugs and issues. For example, there were some problems with parsing the BGP route updates for communities and also some behavioural problems when parsing the communities from the config file filters. The code has been modified to store and process communities as a list of integer tuples. The config file accepts entry of communities in several different formats. I have also addressed an issue that was preventing updates to be processed from peers that do not generate End-of-RIB markers. The dissaggregator now parses a peers Open message to check if they are going to send EoR markers, if not we will no longer defer the table updates until we see a marker for these peers.

I have also spent some time looking at various BGP performance testing tools and on unit testing the code using a similar approach to Faucet. I have also worked on modifying to code to make it Python 3 compatible. Currently, I am in the processes of further testing the code using Python 3 and addressing some issues that I have found.

24

Jul

2017

Spent some time familiarising myself with the BGP project code base. Looked at how the message queues are used and overall how the application is structured and separated. Set up required VMs for simulation and played around with the app to understand how it works.

Implemented a configuration module and factory which allows configuring the application components from a file. This config file is structured and parsed using YAML. The configuration factory will automatically parse and build the required peer, tables and filter objects and associate them as specified in the config file.

I also started looking at implementing a simulation environment using mininet for the BGP project. I currently have some of my 520 code, which I am going to modify, that builds topologies using mininet and allows simulation of networks.