unsigned char addr[6];
};
-/**
- * wprobe_init: initialize internal data structures and connect to the wprobe netlink api
- */
-extern int wprobe_init(void);
+struct wprobe_iface {
+ const char *ifname;
+ char addr[6];
-/**
- * wprobe_free: free all internally allocated data structures
- */
-extern void wprobe_free(void);
+ struct list_head global_attr;
+ struct list_head link_attr;
+ struct list_head links;
+
+ /* config */
+ int interval;
+ int scale_min;
+ int scale_max;
+ int scale_m;
+ int scale_d;
+};
/**
* wprobe_update_links: get a list of all link partners
* when wprobe_update_links is called multiple times, the linked list
* is updated with new link partners, old entries are automatically expired
*/
-extern int wprobe_update_links(const char *ifname, struct list_head *list);
+extern int wprobe_update_links(struct wprobe_iface *dev);
/**
* wprobe_measure: start a measurement request for all global attributes
* it may be desirable to control the sampling interval from user space
* you can use this function to do that.
*/
-extern void wprobe_measure(const char *ifname);
+extern int wprobe_measure(struct wprobe_iface *dev);
/**
- * wprobe_dump_attributes: create a linked list of available attributes
+ * wprobe_get_dev: get device information
* @ifname: name of the wprobe interface
- * @link: false: get the list of global attributes; true: get the list of per-link attributes
- * @list: linked list to store the attributes in
- * @addr: buffer to store the interface's mac address in (optional)
*
- * attributes must be freed by the caller
+ * queries the wprobe interface for all attributes
+ * must be freed with wprobe_free_dev
+ */
+extern struct wprobe_iface *wprobe_get_dev(const char *ifname);
+
+/**
+ * wprobe_get_dev: free all device information
+ * @dev: wprobe device structure
+ */
+extern void wprobe_free_dev(struct wprobe_iface *dev);
+
+/**
+ * wprobe_apply_config: apply configuration data
+ * @dev: wprobe device structure
+ *
+ * uploads all configuration values from @dev that are not set to -1
*/
-extern int wprobe_dump_attributes(const char *ifname, bool link, struct list_head *list, char *addr);
+extern int wprobe_apply_config(struct wprobe_iface *dev);
/**
* wprobe_request_data: request new sampling values for the given list of attributes
- * @ifname: name of the wprobe interface
- * @attrs: attribute list
+ * @dev: wprobe device structure
* @addr: (optional) mac address of the link partner
- * @scale: scale down values by a factor (scale < 0: reset statistics entirely)
*
- * if addr is unset, attrs must point to the list of global attributes,
- * if addr is set, attrs must point to the list of per-link attributes
+ * if addr is unset, global values are stored in the global attributes list
+ * if addr is set, per-link values for the given address are stored in the link attributes list
*/
-extern int wprobe_request_data(const char *ifname, struct list_head *attrs, const unsigned char *addr, int scale);
+extern int wprobe_request_data(struct wprobe_iface *dev, const unsigned char *addr);
#endif