X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/dfe42a2505e655ee80e862c72a78a15802a76a71..HEAD:/package/wprobe/src/user/wprobe.h diff --git a/package/wprobe/src/user/wprobe.h b/package/wprobe/src/user/wprobe.h index c0b4902f3..706facc80 100644 --- a/package/wprobe/src/user/wprobe.h +++ b/package/wprobe/src/user/wprobe.h @@ -87,8 +87,19 @@ struct wprobe_link { unsigned char addr[6]; }; +struct wprobe_filter_item { + char name[32]; + uint64_t rx; + uint64_t tx; +}; + +struct wprobe_iface_ops; struct wprobe_iface { + const struct wprobe_iface_ops *ops; + + int sockfd; const char *ifname; + unsigned int genl_family; char addr[6]; struct list_head global_attr; @@ -101,11 +112,23 @@ struct wprobe_iface { int scale_max; int scale_m; int scale_d; + + /* filter */ + void *filter; + + /* filter_len: + * set to -1 to drop the current filter + * automatically reset to 0 after config apply + */ + int filter_len; }; +typedef void (*wprobe_filter_cb)(void *arg, const char *group, struct wprobe_filter_item *items, int n_items); +extern int wprobe_port; + /** * wprobe_update_links: get a list of all link partners - * @ifname: name of the wprobe interface + * @dev: wprobe device structure * @list: linked list for storing link descriptions * * when wprobe_update_links is called multiple times, the linked list @@ -113,9 +136,17 @@ struct wprobe_iface { */ extern int wprobe_update_links(struct wprobe_iface *dev); +/** + * wprobe_dump_filters: dump all layer 2 filter counters + * @dev: wprobe device structure + * @cb: callback (called once per filter group) + * @arg: user argument for the callback + */ +extern int wprobe_dump_filters(struct wprobe_iface *dev, wprobe_filter_cb cb, void *arg); + /** * wprobe_measure: start a measurement request for all global attributes - * @ifname: name of the wprobe interface + * @dev: wprobe device structure * * not all attributes are automatically filled with data, since for some * it may be desirable to control the sampling interval from user space @@ -124,7 +155,7 @@ extern int wprobe_update_links(struct wprobe_iface *dev); extern int wprobe_measure(struct wprobe_iface *dev); /** - * wprobe_get_dev: get device information + * wprobe_get_dev: get a handle to a local wprobe device * @ifname: name of the wprobe interface * * queries the wprobe interface for all attributes @@ -132,6 +163,12 @@ extern int wprobe_measure(struct wprobe_iface *dev); */ extern struct wprobe_iface *wprobe_get_dev(const char *ifname); +/** + * wprobe_get_auto: get a handle to a local or remote wprobe device + * @arg: pointer to the wprobe device, either (local) or : (remote) + */ +extern struct wprobe_iface *wprobe_get_auto(const char *arg, char **err); + /** * wprobe_get_dev: free all device information * @dev: wprobe device structure @@ -156,4 +193,21 @@ extern int wprobe_apply_config(struct wprobe_iface *dev); */ extern int wprobe_request_data(struct wprobe_iface *dev, const unsigned char *addr); +/** + * wprobe_server_init: send a wprobe server init message to a server's client socket + * @socket: socket of the connection to the client + */ +extern int wprobe_server_init(int socket); + +/** + * wprobe_server_handle: read a request from the client socket, process it, send the response + * @socket: socket of the connection to the client + */ +extern int wprobe_server_handle(int socket); + +/** + * wprobe_server_done: release memory allocated for the server connection + */ +extern void wprobe_server_done(void); + #endif