/*
- * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/* Generic interface to network devices. */
-#include <assert.h>
-
#include "netdev.h"
#include "list.h"
#include "shash.h"
this device. */
int ref_cnt; /* Times this devices was opened. */
struct shash_node *node; /* Pointer to element in global map. */
+ struct list saved_flags_list; /* Contains "struct netdev_saved_flags". */
};
void netdev_dev_init(struct netdev_dev *, const char *name,
static inline void netdev_dev_assert_class(const struct netdev_dev *netdev_dev,
const struct netdev_class *class_)
{
- assert(netdev_dev->netdev_class == class_);
+ ovs_assert(netdev_dev->netdev_class == class_);
}
/* A instance of an open network device.
struct netdev {
struct netdev_dev *netdev_dev; /* Parent netdev_dev. */
struct list node; /* Element in global list. */
-
- enum netdev_flags save_flags; /* Initial device flags. */
- enum netdev_flags changed_flags; /* Flags that we changed. */
};
void netdev_init(struct netdev *, struct netdev_dev *);
* pointer. */
int (*set_config)(struct netdev_dev *netdev_dev, const struct smap *args);
+ /* Returns the tunnel configuration of 'netdev_dev'. If 'netdev_dev' is
+ * not a tunnel, returns null.
+ *
+ * If this function would always return null, it may be null instead. */
+ const struct netdev_tunnel_config *
+ (*get_tunnel_config)(const struct netdev_dev *netdev_dev);
+
/* Attempts to open a network device. On success, sets 'netdevp'
* to the new network device. */
int (*open)(struct netdev_dev *netdev_dev, struct netdev **netdevp);
/* Retrieves driver information of the device.
*
- * Populates 'sh' with key-value pairs representing the status of the
- * device. Driver info is a set of key-value string pairs
- * representing netdev type specific information. For more information see
+ * Populates 'smap' with key-value pairs representing the status of the
+ * device. 'smap' is a set of key-value string pairs representing netdev
+ * type specific information. For more information see
* ovs-vswitchd.conf.db(5).
*
* The caller is responsible for destroying 'smap' and its data.
*
* This function may be set to null if it would always return EOPNOTSUPP
* anyhow. */
- int (*get_drv_info)(const struct netdev *netdev, struct smap *smap);
+ int (*get_status)(const struct netdev *netdev, struct smap *smap);
/* Looks up the ARP table entry for 'ip' on 'netdev' and stores the
* corresponding MAC address in 'mac'. A return value of ENXIO, in
int (*arp_lookup)(const struct netdev *netdev, ovs_be32 ip,
uint8_t mac[6]);
- /* Retrieves the current set of flags on 'netdev' into '*old_flags'.
- * Then, turns off the flags that are set to 1 in 'off' and turns on the
- * flags that are set to 1 in 'on'. (No bit will be set to 1 in both 'off'
- * and 'on'; that is, off & on == 0.)
+ /* Retrieves the current set of flags on 'dev' into '*old_flags'. Then,
+ * turns off the flags that are set to 1 in 'off' and turns on the flags
+ * that are set to 1 in 'on'. (No bit will be set to 1 in both 'off' and
+ * 'on'; that is, off & on == 0.)
*
* This function may be invoked from a signal handler. Therefore, it
* should not do anything that is not signal-safe (such as logging). */
- int (*update_flags)(struct netdev *netdev, enum netdev_flags off,
+ int (*update_flags)(struct netdev_dev *dev, enum netdev_flags off,
enum netdev_flags on, enum netdev_flags *old_flags);
/* Returns a sequence number which indicates changes in one of 'netdev''s