p = dp_netdev_lookup_port(dp, portno);
if (p) {
struct dp_packet_batch tnl_pkt;
- int err;
+ int i;
if (!may_steal) {
dp_packet_batch_clone(&tnl_pkt, packets_);
packets_ = &tnl_pkt;
}
- err = netdev_pop_header(p->netdev, packets_);
+ netdev_pop_header(p->netdev, packets_);
if (!packets_->count) {
return;
}
- if (!err) {
- int i;
- for (i = 0; i < packets_->count; i++) {
- packets_->packets[i]->md.in_port.odp_port = portno;
- }
-
- (*depth)++;
- dp_netdev_recirculate(pmd, packets_);
- (*depth)--;
- } else {
- dp_packet_delete_batch(&tnl_pkt, !may_steal);
+ for (i = 0; i < packets_->count; i++) {
+ packets_->packets[i]->md.in_port.odp_port = portno;
}
+
+ (*depth)++;
+ dp_netdev_recirculate(pmd, packets_);
+ (*depth)--;
return;
}
}
return error;
}
-int
+void
netdev_pop_header(struct netdev *netdev, struct dp_packet_batch *batch)
{
int i, n_cnt = 0;
struct dp_packet **buffers = batch->packets;
if (!netdev->netdev_class->pop_header) {
- return EOPNOTSUPP;
+ dp_packet_delete_batch(batch, true);
+ batch->count = 0;
+ return;
}
for (i = 0; i < batch->count; i++) {
}
}
batch->count = n_cnt;
- return 0;
}
int
int netdev_push_header(const struct netdev *netdev,
struct dp_packet_batch *,
const struct ovs_action_push_tnl *data);
-int netdev_pop_header(struct netdev *netdev, struct dp_packet_batch *);
+void netdev_pop_header(struct netdev *netdev, struct dp_packet_batch *);
/* Hardware address. */
int netdev_set_etheraddr(struct netdev *, const struct eth_addr mac);