-static int
-dp_netdev_execute_actions(struct dp_netdev *dp,
- struct ofpbuf *packet, flow_t *key,
- const union odp_action *actions, int n_actions)
-{
- int i;
- for (i = 0; i < n_actions; i++) {
- const union odp_action *a = &actions[i];
-
- switch (a->type) {
- case ODPAT_OUTPUT:
- dp_netdev_output_port(dp, packet, a->output.port);
- break;
-
- case ODPAT_OUTPUT_GROUP:
- dp_netdev_output_group(dp, a->output_group.group, key->in_port,
- packet);
- break;
-
- case ODPAT_CONTROLLER:
- dp_netdev_output_control(dp, packet, _ODPL_ACTION_NR,
- key->in_port, a->controller.arg);
- break;
-
- case ODPAT_SET_VLAN_VID:
- dp_netdev_modify_vlan_tci(packet, key, ntohs(a->vlan_vid.vlan_vid),
- VLAN_VID_MASK);
- break;
-
- case ODPAT_SET_VLAN_PCP:
- dp_netdev_modify_vlan_tci(packet, key, a->vlan_pcp.vlan_pcp << 13,
- VLAN_PCP_MASK);
- break;
-
- case ODPAT_STRIP_VLAN:
- dp_netdev_strip_vlan(packet, key);
- break;
-
- case ODPAT_SET_DL_SRC:
- dp_netdev_set_dl_src(packet, a->dl_addr.dl_addr);
- break;
-
- case ODPAT_SET_DL_DST:
- dp_netdev_set_dl_dst(packet, a->dl_addr.dl_addr);
- break;
-
- case ODPAT_SET_NW_SRC:
- case ODPAT_SET_NW_DST:
- dp_netdev_set_nw_addr(packet, key, &a->nw_addr);
- break;
-
- case ODPAT_SET_NW_TOS:
- dp_netdev_set_nw_tos(packet, key, &a->nw_tos);
- break;
-
- case ODPAT_SET_TP_SRC:
- case ODPAT_SET_TP_DST:
- dp_netdev_set_tp_port(packet, key, &a->tp_port);
- break;
- }
- }
- return 0;
-}
-
-const struct dpif_class dpif_netdev_class = {
- "netdev",
- dp_netdev_run,
- dp_netdev_wait,
- NULL, /* enumerate */
- dpif_netdev_open,
- dpif_netdev_close,
- NULL, /* get_all_names */
- dpif_netdev_destroy,
- dpif_netdev_get_stats,
- dpif_netdev_get_drop_frags,
- dpif_netdev_set_drop_frags,
- dpif_netdev_port_add,
- dpif_netdev_port_del,
- dpif_netdev_port_query_by_number,
- dpif_netdev_port_query_by_name,
- dpif_netdev_port_list,
- dpif_netdev_port_poll,
- dpif_netdev_port_poll_wait,
- dpif_netdev_port_group_get,
- dpif_netdev_port_group_set,
- dpif_netdev_flow_get,
- dpif_netdev_flow_put,
- dpif_netdev_flow_del,
- dpif_netdev_flow_flush,
- dpif_netdev_flow_list,
- dpif_netdev_execute,
- dpif_netdev_recv_get_mask,
- dpif_netdev_recv_set_mask,
- NULL, /* get_sflow_probability */
- NULL, /* set_sflow_probability */
- dpif_netdev_recv,
- dpif_netdev_recv_wait,
-};