All:
I have been working on 802.1ad qinq and I have been puzzled by this
construct in odp-util.c
where vlan sets are put in the database with a pop, a set of the tci
into the struct and then a push. I think this is because the push vlan
is the
only way to pass a vlan_tci through the dpif to the linux kernel. This
makes it difficult to implement stacked vlans and I think it is the last
remaining issue.
What is the best way to address this while not breaking existing VLAN
behavior? Should I introduce another action attribute,
OVS_ACTION_ATTR_SET_VLAN or is there a way to utilize the
OVS_ACTION_ATTR_SET?
static void
commit_vlan_action(ovs_be16 vlan_tci, struct flow *base,
struct ofpbuf *odp_actions, struct flow_wildcards *wc)
{
if (base->vlan_tci == vlan_tci) {
return;
}
pop_vlan(base, odp_actions, wc);
if (vlan_tci & htons(VLAN_CFI)) {
struct ovs_action_push_vlan vlan;
vlan.vlan_tpid = htons(ETH_TYPE_VLAN);
vlan.vlan_tci = vlan_tci;
nl_msg_put_unspec(odp_actions, OVS_ACTION_ATTR_PUSH_VLAN,
&vlan, sizeof vlan);
}
base->vlan_tci = vlan_tci;
}
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev