X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-provider.h;h=080b76a6840b71eb3ee32e3965c0056e901e42cf;hb=e0edde6fee279cdbbf3c179f5f50adaf0c7c7f1e;hp=06312293fe95f461a9d540284d7428743e71fa67;hpb=ee9bed06cd2794ced29190b6c6539993159d76f5;p=sliver-openvswitch.git diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h index 06312293f..080b76a68 100644 --- a/lib/netdev-provider.h +++ b/lib/netdev-provider.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011 Nicira Networks. + * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -172,6 +172,9 @@ struct netdev_class { * packet, otherwise a negative errno value. Returns -EAGAIN immediately * if no packet is ready to be received. * + * Returns -EMSGSIZE, and discards the packet, if the received packet is + * longer than 'size' bytes. + * * This function can only be expected to return a packet if ->listen() has * been called successfully. * @@ -228,7 +231,10 @@ struct netdev_class { /* 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'. @@ -270,6 +276,12 @@ struct netdev_class { */ int (*get_carrier)(const struct netdev *netdev, bool *carrier); + /* Returns the number of times 'netdev''s carrier has changed since being + * initialized. + * + * If null, callers will assume the number of carrier resets is zero. */ + long long int (*get_carrier_resets)(const struct netdev *netdev); + /* Forces ->get_carrier() to poll 'netdev''s MII registers for link status * instead of checking 'netdev''s carrier. 'netdev''s MII registers will * be polled once ever 'interval' milliseconds. If 'netdev' does not @@ -299,31 +311,23 @@ struct netdev_class { /* Stores the features supported by 'netdev' into each of '*current', * '*advertised', '*supported', and '*peer'. Each value is a bitmap of - * "enum ofp_port_features" bits, in host byte order. + * NETDEV_F_* bits. * * This function may be set to null if it would always return EOPNOTSUPP. */ int (*get_features)(const struct netdev *netdev, - uint32_t *current, uint32_t *advertised, - uint32_t *supported, uint32_t *peer); + enum netdev_features *current, + enum netdev_features *advertised, + enum netdev_features *supported, + enum netdev_features *peer); /* Set the features advertised by 'netdev' to 'advertise', which is a - * bitmap of "enum ofp_port_features" bits, in host byte order. + * set of NETDEV_F_* bits. * * This function may be set to null for a network device that does not * support configuring advertisements. */ - int (*set_advertisements)(struct netdev *netdev, uint32_t advertise); - - /* If 'netdev' is a VLAN network device (e.g. one created with vconfig(8)), - * sets '*vlan_vid' to the VLAN VID associated with that device and returns - * 0. - * - * Returns ENOENT if 'netdev' is a network device that is not a - * VLAN device. - * - * This function should be set to null if it doesn't make any sense for - * your network device (it probably doesn't). */ - int (*get_vlan_vid)(const struct netdev *netdev, int *vlan_vid); + int (*set_advertisements)(struct netdev *netdev, + enum netdev_features advertise); /* Attempts to set input rate limiting (policing) policy, such that up to * 'kbits_rate' kbps of traffic is accepted, with a maximum accumulative @@ -463,7 +467,12 @@ struct netdev_class { * of iteration is unspecified, but (when successful) each queue is visited * exactly once. * - * 'cb' will not modify or free the 'details' argument passed in. */ + * 'cb' will not modify or free the 'details' argument passed in. It may + * delete or modify the queue passed in as its 'queue_id' argument. It may + * modify but will not delete any other queue within 'netdev'. If 'cb' + * adds new queues, then ->dump_queues is allowed to visit some queues + * twice or not at all. + */ int (*dump_queues)(const struct netdev *netdev, void (*cb)(unsigned int queue_id, const struct shash *details, @@ -534,10 +543,10 @@ struct netdev_class { 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 + * device. Driver info is a set of key-value string pairs * representing netdev type specific information. For more information see * ovs-vswitchd.conf.db(5). * @@ -546,7 +555,7 @@ struct netdev_class { * * 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_drv_info)(const struct netdev *netdev, struct shash *sh); /* Looks up the ARP table entry for 'ip' on 'netdev' and stores the * corresponding MAC address in 'mac'. A return value of ENXIO, in