0
votes

I'm working on a research project on SDX (Software Defined Exchange).Current SDX implementation given here https://github.com/sdn-ixp/sdx only uses a single switch connected to a single controller for packet forwarding.

My research goal is to make this setup scalable. The first thing that comes to mind is obviously making the SDX work over multiple switches thus splitting the flow tables. The approach I've thought about is setting up roughly this topology :

http://i.stack.imgur.com/yXKQp.png

Now , I want to reduce the flow table entries in one switch by distributing them across the three(for this example) switches shown in the image.

Suppose Node A wants to send a packet to Node B . When A first joined the SDX , the controller noted the switch it interfaced with(S1) in this case and the IP prefixes it announces. Suppose B also interfaced with switch S1 . Suppose A specifies a policy of forwarding all traffic originating from a certain IP to B , the controller notes that both AS's are connected to the same switch and hence adds a corresponding entry in switch S1.

What I want is for each switch to have a no-match policy that is if the packet matches no entry then it is forwarded to the next switch for example S1 forwards to S2 if it gets a packet from A that doesn't match any entries in it's flow table. This would happen when suppose A wishes to forward all traffic originating from a certain address to D , the controller knows D is connected to switch S2 so it simply adds the corresponding entry in switch S2 and it knows that any packet not matching in S1 will be forwarded by default to S2.

I want to know how to do this with Open Flow because currently OpenFlow Controllers put rules in EVERY connected switch. In which direction should I go from here ? Should I try to write my own controller ?

Any advice would be appreciated. Thank You

1

1 Answers

0
votes

I think that what you are proposing is not too hard to do, but if you mean to add a default flow to the switches proactively, it is a Bad Idea.

There are essentially two parts to this, making the controller only add flows to the relevant switch, and adding the default flows. Both of these will most likely require you to rewrite some of the logic of the controller apps.

However, what happens to packets that are going to some address that isn't connected to the IX? In the normal setup they go to the controller, which figures out what to do with them. If there is a default flow that sends it to the next switch, you may end up with a case where the packet just keeps floating around your switches.

A better way to do it may be to put flows into S1 that say 'all traffic going to D goes out to the port that connects S2'. This way, if you have genuinely unmatchable packets, they get dealt with.

Having briefly looked at that documentation, you might be able to misuse some of the VNH stuff to do this.