2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 14:25:26 +00:00

datapath: Change userspace vport interface to use Netlink attributes.

One of the goals for Open vSwitch is to decouple kernel and userspace
software, so that either one can be upgraded or rolled back independent of
the other.  To do this in full generality, it must be possible to add new
features to the kernel vport layer without changing userspace software.
The customary way to do this in the Linux networking stack is to use
Netlink and in particular Netlink attributes.  This commit adopts that
model for the vport layer.  It does not yet actually start using the
Netlink socket layer, which will come later.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
Ben Pfaff
2011-01-26 12:28:59 -08:00
parent 7897d3fa21
commit c19e653509
15 changed files with 1555 additions and 1245 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010 Nicira Networks.
* Copyright (c) 2010, 2011 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,37 @@
#define DPIF_LINUX_H 1
#include <stdbool.h>
#include "openvswitch/datapath-protocol.h"
struct ofpbuf;
struct dpif_linux_vport {
/* ioctl command argument. */
int cmd;
/* odp_vport header. */
uint32_t dp_idx;
uint32_t port_no; /* UINT32_MAX if unknown. */
enum odp_vport_type type;
/* Attributes. */
const char *name; /* ODP_VPORT_ATTR_NAME. */
const struct rtnl_link_stats64 *stats; /* ODP_VPORT_ATTR_STATS. */
const uint8_t *address; /* ODP_VPORT_ATTR_ADDRESS. */
int mtu; /* ODP_VPORT_ATTR_MTU. */
const struct nlattr *options; /* ODP_VPORT_ATTR_OPTIONS. */
size_t options_len;
int ifindex; /* ODP_VPORT_ATTR_IFINDEX. */
int iflink; /* ODP_VPORT_ATTR_IFLINK. */
};
void dpif_linux_vport_init(struct dpif_linux_vport *);
int dpif_linux_vport_transact(const struct dpif_linux_vport *request,
struct dpif_linux_vport *reply,
struct ofpbuf **bufp);
int dpif_linux_vport_get(const char *name, struct dpif_linux_vport *reply,
struct ofpbuf **bufp);
bool dpif_linux_is_internal_device(const char *name);