/*
- * Copyright (c) 2009, 2010, 2011, 2012 Nicira Networks.
+ * 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"
+#include "smap.h"
#ifdef __cplusplus
extern "C" {
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.
void (*destroy)(struct netdev_dev *netdev_dev);
/* Fetches the device 'netdev_dev''s configuration, storing it in 'args'.
- * The caller owns 'args' and pre-initializes it to an empty shash.
+ * The caller owns 'args' and pre-initializes it to an empty smap.
*
* If this netdev class does not have any configuration options, this may
* be a null pointer. */
- int (*get_config)(struct netdev_dev *netdev_dev, struct shash *args);
+ int (*get_config)(struct netdev_dev *netdev_dev, struct smap *args);
/* Changes the device 'netdev_dev''s configuration to 'args'.
*
* If this netdev class does not support configuration, this may be a null
* pointer. */
- int (*set_config)(struct netdev_dev *netdev_dev, const struct shash *args);
+ 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. */
/* Sets 'netdev''s Ethernet address to 'mac' */
int (*set_etheraddr)(struct netdev *netdev, const uint8_t mac[6]);
- /* Retrieves 'netdev''s Ethernet address into 'mac'. */
+ /* Retrieves 'netdev''s Ethernet address into 'mac'.
+ *
+ * This address will be advertised as 'netdev''s MAC address through the
+ * OpenFlow protocol, among other uses. */
int (*get_etheraddr)(const struct netdev *netdev, uint8_t mac[6]);
/* Retrieves 'netdev''s MTU into '*mtup'.
*
* May be NULL if 'netdev' does not support QoS at all. */
int (*get_qos)(const struct netdev *netdev,
- const char **typep, struct shash *details);
+ const char **typep, struct smap *details);
/* Attempts to reconfigure QoS on 'netdev', changing the form of QoS to
* 'type' with details of configuration from 'details'.
*
* May be NULL if 'netdev' does not support QoS at all. */
int (*set_qos)(struct netdev *netdev,
- const char *type, const struct shash *details);
+ const char *type, const struct smap *details);
/* Queries 'netdev' for information about the queue numbered 'queue_id'.
* If successful, adds that information as string key-value pairs to
* vswitchd/vswitch.xml (which is built as ovs-vswitchd.conf.db(8)).
*/
int (*get_queue)(const struct netdev *netdev,
- unsigned int queue_id, struct shash *details);
+ unsigned int queue_id, struct smap *details);
/* Configures the queue numbered 'queue_id' on 'netdev' with the key-value
* string pairs in 'details'. The contents of 'details' should be
*
* May be NULL if 'netdev' does not support QoS at all. */
int (*set_queue)(struct netdev *netdev,
- unsigned int queue_id, const struct shash *details);
+ unsigned int queue_id, const struct smap *details);
/* Attempts to delete the queue numbered 'queue_id' from 'netdev'.
*
*/
int (*dump_queues)(const struct netdev *netdev,
void (*cb)(unsigned int queue_id,
- const struct shash *details,
+ const struct smap *details,
void *aux),
void *aux);
int (*get_next_hop)(const struct in_addr *host, struct in_addr *next_hop,
char **netdev_name);
- /* Retrieves the status of the device.
+ /* Retrieves driver information of the device.
*
- * Populates 'sh' with key-value pairs representing the status of the
- * device. A device's status 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 data of 'sh' are heap allocated strings which the caller is
- * responsible for deallocating.
+ * 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_status)(const struct netdev *netdev, struct shash *sh);
+ 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
extern const struct netdev_class netdev_linux_class;
extern const struct netdev_class netdev_internal_class;
extern const struct netdev_class netdev_tap_class;
+#ifdef __FreeBSD__
+extern const struct netdev_class netdev_bsd_class;
+#endif
#ifdef __cplusplus
}