#include <net/checksum.h>
#include <net/dsfield.h>
-#include "actions.h"
#include "checksum.h"
#include "datapath.h"
#include "vlan.h"
return 0;
}
-static int push_vlan(struct sk_buff *skb, const struct ovs_key_8021q *q_key)
+static int push_vlan(struct sk_buff *skb, const struct ovs_action_push_vlan *vlan)
{
if (unlikely(vlan_tx_tag_present(skb))) {
u16 current_tag;
+ ETH_HLEN, VLAN_HLEN, 0));
}
- __vlan_hwaccel_put_tag(skb, ntohs(q_key->q_tci));
+ __vlan_hwaccel_put_tag(skb, ntohs(vlan->vlan_tci));
return 0;
}
if (unlikely(err))
return err;
- memcpy(eth_hdr(skb)->h_source, eth_key->eth_src, ETH_HLEN);
- memcpy(eth_hdr(skb)->h_dest, eth_key->eth_dst, ETH_HLEN);
+ memcpy(eth_hdr(skb)->h_source, eth_key->eth_src, ETH_ALEN);
+ memcpy(eth_hdr(skb)->h_dest, eth_key->eth_dst, ETH_ALEN);
return 0;
}
output_userspace(dp, skb, a);
break;
- case OVS_ACTION_ATTR_PUSH:
- /* Only supported push action is on vlan tag. */
- err = push_vlan(skb, nla_data(nla_data(a)));
+ case OVS_ACTION_ATTR_PUSH_VLAN:
+ err = push_vlan(skb, nla_data(a));
if (unlikely(err)) /* skb already freed. */
return err;
break;
- case OVS_ACTION_ATTR_POP:
- /* Only supported pop action is on vlan tag. */
+ case OVS_ACTION_ATTR_POP_VLAN:
err = pop_vlan(skb);
break;