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