2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-30 22:05:19 +00:00

packets: New function eth_set_vlan_tci(), from dpif-netdev.

This will soon be used in the upcoming bond library.
This commit is contained in:
Ben Pfaff
2011-03-29 09:27:47 -07:00
parent 2c5f293cc8
commit 7c66b273a2
3 changed files with 33 additions and 32 deletions

View File

@@ -1136,36 +1136,6 @@ dp_netdev_wait(void)
}
/* Modify the TCI field of 'packet'. If a VLAN tag is present, its TCI field
* is replaced by 'tci'. If a VLAN tag is not present, one is added with the
* TCI field set to 'tci'.
*/
static void
dp_netdev_set_dl_tci(struct ofpbuf *packet, uint16_t tci)
{
struct vlan_eth_header *veh;
struct eth_header *eh;
eh = packet->l2;
if (packet->size >= sizeof(struct vlan_eth_header)
&& eh->eth_type == htons(ETH_TYPE_VLAN)) {
veh = packet->l2;
veh->veth_tci = tci;
} else {
/* Insert new 802.1Q header. */
struct vlan_eth_header tmp;
memcpy(tmp.veth_dst, eh->eth_dst, ETH_ADDR_LEN);
memcpy(tmp.veth_src, eh->eth_src, ETH_ADDR_LEN);
tmp.veth_type = htons(ETH_TYPE_VLAN);
tmp.veth_tci = tci;
tmp.veth_next_type = eh->eth_type;
veh = ofpbuf_push_uninit(packet, VLAN_HEADER_LEN);
memcpy(veh, &tmp, sizeof tmp);
packet->l2 = (char*)packet->l2 - VLAN_HEADER_LEN;
}
}
static void
dp_netdev_strip_vlan(struct ofpbuf *packet)
{
@@ -1368,7 +1338,7 @@ dp_netdev_execute_actions(struct dp_netdev *dp,
break;
case ODP_ACTION_ATTR_SET_DL_TCI:
dp_netdev_set_dl_tci(packet, nl_attr_get_be16(a));
eth_set_vlan_tci(packet, nl_attr_get_be16(a));
break;
case ODP_ACTION_ATTR_STRIP_VLAN: