Implement complex_vlan driver

We really ought to standardize on what this sort of variable should be called -- I've been using `ret`, but I think I've seen `result` as well.