Hi, I am a Network Engineer/C Developer for a small Telco in New Zealand. We are very pro Linux based solutions to problems most telco's would normally throw lots of cash at big brands for.
The specific problem that started me looking to openvswitch for is this: We get customers delivered to us over QinQ, with a single stag/ctag combo representing a single customer. We then want to smartly decide what we do with these customers. For some we will merge into a single split horizon layer2 for Internet access, for some we will bridge two(or more customers (stag/ctag combos)) together for extending LAN's between to locations, for some we might both provide Internet and join multiple customers. Open vswitch seems like a very good starting point for doing this under Linux. Looking at both the kernel data path code, and the user-space switch I can see a couple of things that would need to be addressed for us to archive this. First, the kernel module does not support matching on multiple VLAN tags. I can ignore this issue for the split horizon layer 2 for the Internet and just match on mac address to push_vlan actions mappings, but for joining LAN's where I cannot guarantee the uniqueness of MAC addresses I will need to have the datapath aware of stacked VLAN tags and only match on those. I have heard that multiple people have attempted to solve this, and submitted patches, but nothing has been accepted. Is QinQ something that openvswitch plan to support? If so, is there somebody working on this that I can work with or are there any patches that are good place to start from and perhaps complete? Second, openvswitch is currently a Layer 4 aware switch (from what I have seen from the datapath so far). The kernel will always wonder as deep into the packet as it can making keys, then hash on all of the keys. This means that if I have an IP packet, I cannot switch purely on the mac addresses. Now obviously it is very easy to hack the kernel module to stop at layer 2 for me, but it seems more useful to configure the datapath to stop at an arbitrary layer, perhaps for now layers 2 or 3. Chatting to people on your IRC channel it was suggested that such a patch was too specialized, and perhaps a patch that made all of the protocols selectable would be more appropriate. This doesn't seem like a hard patch, but I would love to hear your opinion. The other harder and slower approach to my problem would be allow partial matches on keys. I haven't thought this idea through, but the problems that arise in the couple of minutes I have spent thinking are, how do you know what keys to do the hash check on, what happens when there is a more specific match, and how do you do this without doing lots of hash lookups. To do it fast would require tree rather than a hash. Ultimately, if we could tell the datapath that we are not interested in higher layers, we can optimize away many trips to user-space for flows we will never want to see and also keep the hashes smaller, and the hash count lower. All making the switching more optimized for this type of use. Has the idea of stopping at earlier layers or protocols ever come up within the team? If we were to work towards implementing something like this would it be in line with the projects goals? Cheers, Chris _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev