uint8_t etheraddr[ETH_ADDR_LEN];
};
-struct netdev_vport {
- struct netdev netdev;
-};
-
struct vport_class {
enum ovs_vport_type type;
struct netdev_class netdev_class;
return netdev_dev_vport_cast(netdev_get_dev(netdev));
}
-static struct netdev_vport *
-netdev_vport_cast(const struct netdev *netdev)
-{
- struct netdev_dev *netdev_dev = netdev_get_dev(netdev);
- assert(is_vport_class(netdev_dev_get_class(netdev_dev)));
- return CONTAINER_OF(netdev, struct netdev_vport, netdev);
-}
-
/* If 'netdev' is a vport netdev, returns an ofpbuf that contains Netlink
* options to include in OVS_VPORT_ATTR_OPTIONS for configuring that vport.
* Otherwise returns NULL. */
}
static int
-netdev_vport_open(struct netdev_dev *netdev_dev_, struct netdev **netdevp)
+netdev_vport_open(struct netdev_dev *netdev_dev, struct netdev **netdevp)
{
- struct netdev_vport *netdev;
-
- netdev = xmalloc(sizeof *netdev);
- netdev_init(&netdev->netdev, netdev_dev_);
-
- *netdevp = &netdev->netdev;
+ *netdevp = xmalloc(sizeof **netdevp);
+ netdev_init(*netdevp, netdev_dev);
return 0;
}
static void
-netdev_vport_close(struct netdev *netdev_)
+netdev_vport_close(struct netdev *netdev)
{
- struct netdev_vport *netdev = netdev_vport_cast(netdev_);
free(netdev);
}
\
netdev_vport_change_seq
+#define TUNNEL_CLASS(NAME, VPORT_TYPE) \
+ { VPORT_TYPE, \
+ { NAME, VPORT_FUNCTIONS(tunnel_get_status) }, \
+ parse_tunnel_config, unparse_tunnel_config }
+
void
netdev_vport_register(void)
{
static const struct vport_class vport_classes[] = {
- { OVS_VPORT_TYPE_GRE,
- { "gre", VPORT_FUNCTIONS(tunnel_get_status) },
- parse_tunnel_config, unparse_tunnel_config },
-
- { OVS_VPORT_TYPE_GRE,
- { "ipsec_gre", VPORT_FUNCTIONS(tunnel_get_status) },
- parse_tunnel_config, unparse_tunnel_config },
-
- { OVS_VPORT_TYPE_GRE64,
- { "gre64", VPORT_FUNCTIONS(tunnel_get_status) },
- parse_tunnel_config, unparse_tunnel_config },
-
- { OVS_VPORT_TYPE_GRE64,
- { "ipsec_gre64", VPORT_FUNCTIONS(tunnel_get_status) },
- parse_tunnel_config, unparse_tunnel_config },
-
- { OVS_VPORT_TYPE_CAPWAP,
- { "capwap", VPORT_FUNCTIONS(tunnel_get_status) },
- parse_tunnel_config, unparse_tunnel_config },
-
- { OVS_VPORT_TYPE_VXLAN,
- { "vxlan", VPORT_FUNCTIONS(tunnel_get_status) },
- parse_tunnel_config, unparse_tunnel_config },
+ TUNNEL_CLASS("gre", OVS_VPORT_TYPE_GRE),
+ TUNNEL_CLASS("ipsec_gre", OVS_VPORT_TYPE_GRE),
+ TUNNEL_CLASS("gre64", OVS_VPORT_TYPE_GRE64),
+ TUNNEL_CLASS("ipsec_gre64", OVS_VPORT_TYPE_GRE64),
+ TUNNEL_CLASS("capwap", OVS_VPORT_TYPE_CAPWAP),
+ TUNNEL_CLASS("vxlan", OVS_VPORT_TYPE_VXLAN),
{ OVS_VPORT_TYPE_PATCH,
{ "patch", VPORT_FUNCTIONS(NULL) },