struct ofpbuf *, struct flow *,
const struct nlattr *actions,
size_t actions_len);
+static void dp_netdev_port_input(struct dp_netdev *dp,
+ struct dp_netdev_port *port,
+ struct ofpbuf *packet, uint32_t skb_priority,
+ uint32_t skb_mark, const struct flow_tnl *tnl);
static struct dpif_netdev *
dpif_netdev_cast(const struct dpif *dpif)
uint32_t *port_nop)
{
struct dp_netdev *dp = get_dp_netdev(dpif);
+ char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
+ const char *dpif_port;
int port_no;
+ dpif_port = netdev_vport_get_dpif_port(netdev, namebuf, sizeof namebuf);
if (*port_nop != UINT32_MAX) {
if (*port_nop >= MAX_PORTS) {
return EFBIG;
}
port_no = *port_nop;
} else {
- port_no = choose_port(dp, netdev_vport_get_dpif_port(netdev));
+ port_no = choose_port(dp, dpif_port);
}
if (port_no >= 0) {
*port_nop = port_no;
- return do_add_port(dp, netdev_vport_get_dpif_port(netdev),
- netdev_get_type(netdev), port_no);
+ return do_add_port(dp, dpif_port, netdev_get_type(netdev), port_no);
}
return EFBIG;
}
struct dp_netdev_port *port;
LIST_FOR_EACH (port, node, &dp->port_list) {
- if (!strcmp(netdev_vport_get_dpif_port(port->netdev), devname)) {
+ if (!strcmp(netdev_get_name(port->netdev), devname)) {
*portp = port;
return 0;
}
answer_port_query(const struct dp_netdev_port *port,
struct dpif_port *dpif_port)
{
- dpif_port->name = xstrdup(netdev_vport_get_dpif_port(port->netdev));
+ dpif_port->name = xstrdup(netdev_get_name(port->netdev));
dpif_port->type = xstrdup(port->type);
dpif_port->port_no = port->port_no;
}
struct dp_netdev_port *port = dp->ports[port_no];
if (port) {
free(state->name);
- state->name = xstrdup(netdev_vport_get_dpif_port(port->netdev));
+ state->name = xstrdup(netdev_get_name(port->netdev));
dpif_port->name = state->name;
dpif_port->type = port->type;
dpif_port->port_no = port->port_no;
static void
dp_netdev_port_input(struct dp_netdev *dp, struct dp_netdev_port *port,
- struct ofpbuf *packet)
+ struct ofpbuf *packet, uint32_t skb_priority,
+ uint32_t skb_mark, const struct flow_tnl *tnl)
{
struct dp_netdev_flow *flow;
struct flow key;
if (packet->size < ETH_HEADER_LEN) {
return;
}
- flow_extract(packet, 0, 0, NULL, port->port_no, &key);
+ flow_extract(packet, skb_priority, skb_mark, tnl, port->port_no, &key);
flow = dp_netdev_lookup_flow(dp, &key);
if (flow) {
dp_netdev_flow_used(flow, packet);
error = port->rx ? netdev_rx_recv(port->rx, &packet) : EOPNOTSUPP;
if (!error) {
- dp_netdev_port_input(dp, port, &packet);
+ dp_netdev_port_input(dp, port, &packet, 0, 0, NULL);
} else if (error != EAGAIN && error != EOPNOTSUPP) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
+
VLOG_ERR_RL(&rl, "error receiving data from %s: %s",
- netdev_vport_get_dpif_port(port->netdev),
- strerror(error));
+ netdev_get_name(port->netdev), strerror(error));
}
}
ofpbuf_uninit(&packet);