#include "odp-util.h"
#include "ofpbuf.h"
#include "openvswitch/datapath-compat.h"
-#include "openvswitch/tunnel.h"
#include "packets.h"
#include "poll-loop.h"
#include "random.h"
case OVS_VPORT_TYPE_GRE64:
return "gre64";
- case OVS_VPORT_TYPE_CAPWAP:
- return "capwap";
-
case OVS_VPORT_TYPE_VXLAN:
return "vxlan";
+ case OVS_VPORT_TYPE_LISP:
+ return "lisp";
+
case OVS_VPORT_TYPE_UNSPEC:
case __OVS_VPORT_TYPE_MAX:
break;
return OVS_VPORT_TYPE_GRE64;
} else if (strstr(type, "gre")) {
return OVS_VPORT_TYPE_GRE;
- } else if (!strcmp(type, "capwap")) {
- return OVS_VPORT_TYPE_CAPWAP;
} else if (!strcmp(type, "vxlan")) {
return OVS_VPORT_TYPE_VXLAN;
+ } else if (!strcmp(type, "lisp")) {
+ return OVS_VPORT_TYPE_LISP;
} else {
return OVS_VPORT_TYPE_UNSPEC;
}
uint32_t *port_nop)
{
struct dpif_linux *dpif = dpif_linux_cast(dpif_);
+ const struct netdev_tunnel_config *tnl_cfg;
const char *name = netdev_vport_get_dpif_port(netdev);
const char *type = netdev_get_type(netdev);
struct dpif_linux_vport request, reply;
struct nl_sock *sock = NULL;
uint32_t upcall_pid;
struct ofpbuf *buf;
+ uint64_t options_stub[64 / 8];
+ struct ofpbuf options;
int error;
if (dpif->epoll_fd >= 0) {
netdev_linux_ethtool_set_flag(netdev, ETH_FLAG_LRO, "LRO", false);
}
+ tnl_cfg = netdev_get_tunnel_config(netdev);
+ if (tnl_cfg && tnl_cfg->dst_port != 0) {
+ ofpbuf_use_stack(&options, options_stub, sizeof options_stub);
+ nl_msg_put_u16(&options, OVS_TUNNEL_ATTR_DST_PORT,
+ ntohs(tnl_cfg->dst_port));
+ request.options = options.data;
+ request.options_len = options.size;
+ }
+
request.port_no = *port_nop;
upcall_pid = sock ? nl_sock_pid(sock) : 0;
request.upcall_pid = &upcall_pid;
[OVS_PACKET_ATTR_KEY] = { .type = NL_A_NESTED },
/* OVS_PACKET_CMD_ACTION only. */
- [OVS_PACKET_ATTR_USERDATA] = { .type = NL_A_U64, .optional = true },
+ [OVS_PACKET_ATTR_USERDATA] = { .type = NL_A_UNSPEC, .optional = true },
};
struct ovs_header *ovs_header;
upcall->key = CONST_CAST(struct nlattr *,
nl_attr_get(a[OVS_PACKET_ATTR_KEY]));
upcall->key_len = nl_attr_get_size(a[OVS_PACKET_ATTR_KEY]);
- upcall->userdata = (a[OVS_PACKET_ATTR_USERDATA]
- ? nl_attr_get_u64(a[OVS_PACKET_ATTR_USERDATA])
- : 0);
+ upcall->userdata = a[OVS_PACKET_ATTR_USERDATA];
*dp_ifindex = ovs_header->dp_ifindex;
return 0;