-
-int
-dpif_linux_vport_send(int dp_ifindex, uint32_t port_no,
- const void *data, size_t size)
-{
- struct ofpbuf actions, key, packet;
- struct odputil_keybuf keybuf;
- struct flow flow;
- uint64_t action;
-
- ofpbuf_use_const(&packet, data, size);
- flow_extract(&packet, 0, htonll(0), 0, &flow);
-
- ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
- odp_flow_key_from_flow(&key, &flow);
-
- ofpbuf_use_stack(&actions, &action, sizeof action);
- nl_msg_put_u32(&actions, OVS_ACTION_ATTR_OUTPUT, port_no);
-
- return dpif_linux_execute__(dp_ifindex, key.data, key.size,
- actions.data, actions.size, &packet);
-}
-
-static bool
-dpif_linux_nln_parse(struct ofpbuf *buf, void *vport_)
-{
- struct dpif_linux_vport *vport = vport_;
- return dpif_linux_vport_from_ofpbuf(vport, buf) == 0;
-}
-
-static void
-dpif_linux_port_changed(const void *vport_, void *dpif_)
-{
- const struct dpif_linux_vport *vport = vport_;
- struct dpif_linux *dpif = dpif_;
-
- if (vport) {
- if (vport->dp_ifindex == dpif->dp_ifindex
- && (vport->cmd == OVS_VPORT_CMD_NEW
- || vport->cmd == OVS_VPORT_CMD_DEL
- || vport->cmd == OVS_VPORT_CMD_SET)) {
- VLOG_DBG("port_changed: dpif:%s vport:%s cmd:%"PRIu8,
- dpif->dpif.full_name, vport->name, vport->cmd);
- sset_add(&dpif->changed_ports, vport->name);
- }
- } else {
- dpif->change_error = true;
- }
-}