Looks good. Ethan
On Tue, Nov 15, 2011 at 17:17, Ben Pfaff <b...@nicira.com> wrote: > An upcoming commit will add a new user. > --- > lib/dpif-netdev.c | 20 +------------------- > lib/packets.c | 21 +++++++++++++++++++++ > lib/packets.h | 1 + > 3 files changed, 23 insertions(+), 19 deletions(-) > > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > index bc93a10..afec1a2 100644 > --- a/lib/dpif-netdev.c > +++ b/lib/dpif-netdev.c > @@ -1034,24 +1034,6 @@ dpif_netdev_wait(struct dpif *dpif) > } > > static void > -dp_netdev_pop_vlan(struct ofpbuf *packet) > -{ > - struct vlan_eth_header *veh = packet->l2; > - if (packet->size >= sizeof *veh > - && veh->veth_type == htons(ETH_TYPE_VLAN)) { > - struct eth_header tmp; > - > - memcpy(tmp.eth_dst, veh->veth_dst, ETH_ADDR_LEN); > - memcpy(tmp.eth_src, veh->veth_src, ETH_ADDR_LEN); > - tmp.eth_type = veh->veth_next_type; > - > - ofpbuf_pull(packet, VLAN_HEADER_LEN); > - packet->l2 = (char*)packet->l2 + VLAN_HEADER_LEN; > - memcpy(packet->data, &tmp, sizeof tmp); > - } > -} > - > -static void > dp_netdev_set_dl(struct ofpbuf *packet, const struct ovs_key_ethernet > *eth_key) > { > struct eth_header *eh = packet->l2; > @@ -1317,7 +1299,7 @@ dp_netdev_execute_actions(struct dp_netdev *dp, > break; > > case OVS_ACTION_ATTR_POP_VLAN: > - dp_netdev_pop_vlan(packet); > + eth_pop_vlan(packet); > break; > > case OVS_ACTION_ATTR_SET: > diff --git a/lib/packets.c b/lib/packets.c > index 03f92e3..46a44bd 100644 > --- a/lib/packets.c > +++ b/lib/packets.c > @@ -100,6 +100,27 @@ eth_push_vlan(struct ofpbuf *packet, ovs_be16 tci) > packet->l2 = packet->data; > } > > +/* Removes outermost VLAN header (if any is present) from 'packet'. > + * > + * 'packet->l2' must initially point to 'packet''s Ethernet header. */ > +void > +eth_pop_vlan(struct ofpbuf *packet) > +{ > + struct vlan_eth_header *veh = packet->l2; > + if (packet->size >= sizeof *veh > + && veh->veth_type == htons(ETH_TYPE_VLAN)) { > + struct eth_header tmp; > + > + memcpy(tmp.eth_dst, veh->veth_dst, ETH_ADDR_LEN); > + memcpy(tmp.eth_src, veh->veth_src, ETH_ADDR_LEN); > + tmp.eth_type = veh->veth_next_type; > + > + ofpbuf_pull(packet, VLAN_HEADER_LEN); > + packet->l2 = (char*)packet->l2 + VLAN_HEADER_LEN; > + memcpy(packet->data, &tmp, sizeof tmp); > + } > +} > + > /* Given the IP netmask 'netmask', returns the number of bits of the IP > address > * that it specifies, that is, the number of 1-bits in 'netmask'. 'netmask' > * must be a CIDR netmask (see ip_is_cidr()). */ > diff --git a/lib/packets.h b/lib/packets.h > index d924492..439a7dd 100644 > --- a/lib/packets.h > +++ b/lib/packets.h > @@ -132,6 +132,7 @@ void compose_benign_packet(struct ofpbuf *, const char > *tag, > const uint8_t eth_src[ETH_ADDR_LEN]); > > void eth_push_vlan(struct ofpbuf *, ovs_be16 tci); > +void eth_pop_vlan(struct ofpbuf *); > > /* Example: > * > -- > 1.7.4.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev