X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-provider.h;h=2ef75b30c57dde36e88e6611b8f08ae8003e4793;hb=d2cee5a48ebe850ccb72cd1e860a90e5ec0248fd;hp=093a25dc9f68d8da0f7d006f04330ab630e6b3c7;hpb=7b6b0ef47e398a2fbda48fd385f9781b2df8bebb;p=sliver-openvswitch.git diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h index 093a25dc9..2ef75b30c 100644 --- a/lib/netdev-provider.h +++ b/lib/netdev-provider.h @@ -39,11 +39,9 @@ struct netdev_dev { this device. */ int ref_cnt; /* Times this devices was opened. */ struct shash_node *node; /* Pointer to element in global map. */ - struct shash args; /* Argument list from last config. */ }; void netdev_dev_init(struct netdev_dev *, const char *name, - const struct shash *args, const struct netdev_class *); void netdev_dev_uninit(struct netdev_dev *, bool destroy); const char *netdev_dev_get_type(const struct netdev_dev *); @@ -52,8 +50,6 @@ const char *netdev_dev_get_name(const struct netdev_dev *); struct netdev_dev *netdev_dev_from_name(const char *name); void netdev_dev_get_devices(const struct netdev_class *, struct shash *device_list); -bool netdev_dev_args_equal(const struct netdev_dev *netdev_dev, - const struct shash *args); static inline void netdev_dev_assert_class(const struct netdev_dev *netdev_dev, const struct netdev_class *class_) @@ -116,11 +112,10 @@ struct netdev_class { * needed here. */ void (*wait)(void); - /* Attempts to create a network device named 'name' with initial 'args' in - * 'netdev_class'. On success sets 'netdev_devp' to the newly created - * device. */ + /* Attempts to create a network device named 'name' in 'netdev_class'. On + * success sets 'netdev_devp' to the newly created device. */ int (*create)(const struct netdev_class *netdev_class, const char *name, - const struct shash *args, struct netdev_dev **netdev_devp); + struct netdev_dev **netdev_devp); /* Destroys 'netdev_dev'. * @@ -130,21 +125,18 @@ struct netdev_class { * called. */ void (*destroy)(struct netdev_dev *netdev_dev); - /* Changes the device 'netdev_dev''s configuration to 'args'. + /* Fetches the device 'netdev_dev''s configuration, storing it in 'args'. + * The caller owns 'args' and pre-initializes it to an empty shash. * - * If this netdev class does not support reconfiguring a netdev - * device, this may be a null pointer. - */ - int (*set_config)(struct netdev_dev *netdev_dev, const struct shash *args); + * 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); - /* Returns true if 'args' is equivalent to the "args" field in - * 'netdev_dev', otherwise false. + /* Changes the device 'netdev_dev''s configuration to 'args'. * - * If no special processing needs to be done beyond a simple - * shash comparison, this may be a null pointer. - */ - bool (*config_equal)(const struct netdev_dev *netdev_dev, - const struct shash *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); /* Attempts to open a network device. On success, sets 'netdevp' * to the new network device. */ @@ -152,16 +144,6 @@ struct netdev_class { /* Closes 'netdev'. */ void (*close)(struct netdev *netdev); - - /* Enumerates the names of all network devices of this class. - * - * The caller has already initialized 'all_names' and might already have - * added some names to it. This function should not disturb any existing - * names in 'all_names'. - * - * If this netdev class does not support enumeration, this may be a null - * pointer. */ - int (*enumerate)(struct sset *all_names); /* ## ----------------- ## */ /* ## Receiving Packets ## */ @@ -190,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. * @@ -256,9 +241,17 @@ struct netdev_class { * bytes for Ethernet devices. * * If 'netdev' does not have an MTU (e.g. as some tunnels do not), then - * this function should set '*mtup' to INT_MAX. */ + * this function should return EOPNOTSUPP. This function may be set to + * null if it would always return EOPNOTSUPP. */ int (*get_mtu)(const struct netdev *netdev, int *mtup); + /* Sets 'netdev''s MTU to 'mtu'. + * + * If 'netdev' does not have an MTU (e.g. as some tunnels do not), then + * this function should return EOPNOTSUPP. This function may be set to + * null if it would always return EOPNOTSUPP. */ + int (*set_mtu)(const struct netdev *netdev, int mtu); + /* Returns the ifindex of 'netdev', if successful, as a positive number. * On failure, returns a negative errno value. * @@ -280,6 +273,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 @@ -309,31 +308,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