* derivatives without specific, written prior permission.
*/
+#include <config.h>
#include "vconn.h"
#include <arpa/inet.h>
#include <assert.h>
#include "socket-util.h"
#include "util.h"
#include "openflow.h"
+#include "vconn-provider.h"
#include "vlog.h"
#define THIS_MODULE VLM_VCONN_NETLINK
static struct netlink_vconn *
netlink_vconn_cast(struct vconn *vconn)
{
- assert(vconn->class == &netlink_vconn_class);
+ vconn_assert_class(vconn, &netlink_vconn_class);
return CONTAINER_OF(vconn, struct netlink_vconn, vconn);
}
{
struct netlink_vconn *netlink;
int dp_idx;
+ int subscribe;
int retval;
- if (sscanf(suffix, "%d", &dp_idx) != 1) {
- fatal(0, "%s: bad peer name format", name);
+ subscribe = 1;
+ if (sscanf(suffix, "%d:%d", &dp_idx, &subscribe) < 1) {
+ error(0, "%s: syntax error", name);
+ return EAFNOSUPPORT;
}
netlink = xmalloc(sizeof *netlink);
- netlink->vconn.class = &netlink_vconn_class;
- netlink->vconn.connect_status = 0;
- retval = dpif_open(dp_idx, true, &netlink->dp);
+ vconn_init(&netlink->vconn, &netlink_vconn_class, 0, 0, name);
+ retval = dpif_open(dp_idx, subscribe, &netlink->dp);
if (retval) {
free(netlink);
*vconnp = NULL;