swlib.h

来自「switch config tool for configuring kerne」· C头文件 代码 · 共 214 行

H
214
字号
/* * swlib.h: Switch configuration API (user space part) * * Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * version 2.1 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *Usage of the library functions:  The main datastructure for a switch is the struct switch_device  To get started, you first need to use switch_connect() to probe  for switches and allocate an instance of this struct.  There are two possible usage modes:    dev = switch_connect("eth0");      - this call will look for a switch registered for the linux device  	  "eth0" and only allocate a switch_device for this particular switch.    dev = switch_connect(NULL)      - this will return one switch_device struct for each available  	  switch. The switch_device structs are chained with by ->next pointer  Then to query a switch for all available attributes, use:    swlib_scan(dev);  All allocated datastructures for the switch_device struct can be freed with    swlib_free(dev);  or    swlib_free_all(dev);  The latter traverses a whole chain of switch_device structs and frees them all  Switch attributes (struct switch_attr) are divided into three groups:    dev->ops:      - global settings    dev->port_ops:      - per-port settings    dev->vlan_ops:      - per-vlan settings  switch_lookup_attr() is a small helper function to locate attributes  by name.  switch_set_attr() and switch_get_attr() can alter or request the values  of attributes.Usage of the switch_attr struct:  ->atype: attribute group, one of:    - SWLIB_ATTR_GROUP_GLOBAL    - SWLIB_ATTR_GROUP_VLAN    - SWLIB_ATTR_GROUP_PORT  ->id: identifier for the attribute  ->type: data type, one of:    - SWITCH_TYPE_INT    - SWITCH_TYPE_STRING    - SWITCH_TYPE_PORT  ->name: short name of the attribute  ->description: longer description  ->next: pointer to the next attribute of the current groupUsage of the switch_val struct:  When setting attributes, following members of the struct switch_val need  to be set up:    ->len (for attr->type == SWITCH_TYPE_PORT)    ->port_vlan:      - port number (for attr->atype == SWLIB_ATTR_GROUP_PORT), or:      - vlan number (for attr->atype == SWLIB_ATTR_GROUP_VLAN)    ->value.i (for attr->type == SWITCH_TYPE_INT)    ->value.s (for attr->type == SWITCH_TYPE_STRING)      - owned by the caller, not stored in the library internally    ->value.ports (for attr->type == SWITCH_TYPE_PORT)      - must point to an array of at lest val->len * sizeof(struct switch_port)  When getting string attributes, val->value.s must be freed by the caller  When getting port list attributes, an internal static buffer is used,  which changes from call to call. */#ifndef __SWLIB_H#define __SWLIB_Henum swlib_attr_group {	SWLIB_ATTR_GROUP_GLOBAL,	SWLIB_ATTR_GROUP_VLAN,	SWLIB_ATTR_GROUP_PORT,};enum swlib_port_flags {	SWLIB_PORT_FLAG_TAGGED = (1 << 0),};struct switch_dev;struct switch_attr;struct switch_port;struct switch_val;struct switch_dev {	int id;	const char *name;	const char *dev_name;	int ports;	int vlans;	struct switch_attr *ops;	struct switch_attr *port_ops;	struct switch_attr *vlan_ops;	struct switch_dev *next;	void *priv;};struct switch_val {	struct switch_attr *attr;	int len;	int err;	int port_vlan;	union {		const char *s;		int i;		struct switch_port *ports;	} value;};struct switch_attr {	struct switch_dev *dev;	int atype;	int id;	int type;	const char *name;	const char *description;	struct switch_attr *next;};struct switch_port {	unsigned int id;	unsigned int flags;};/** * swlib_connect: connect to the switch through netlink * @name: name of the ethernet interface, * * if name is NULL, it connect and builds a chain of all switches */struct switch_dev *swlib_connect(const char *name);/** * swlib_free: free all dynamically allocated data for the switch connection * @dev: switch device struct * * all members of a switch device chain (generated by swlib_connect(NULL)) * must be freed individually */void swlib_free(struct switch_dev *dev);/** * swlib_free_all: run swlib_free on all devices in the chain * @dev: switch device struct */void swlib_free_all(struct switch_dev *dev);/** * swlib_scan: probe the switch driver for available commands/attributes * @dev: switch device struct */int swlib_scan(struct switch_dev *dev);/** * swlib_lookup_attr: look up a switch attribute * @dev: switch device struct * @type: global, port or vlan * @name: name of the attribute */struct switch_attr *swlib_lookup_attr(struct switch_dev *dev,		enum swlib_attr_group atype, const char *name);/** * swlib_set_attr: set the value for an attribute * @dev: switch device struct * @attr: switch attribute struct * @val: attribute value pointer * returns 0 on success */int swlib_set_attr(struct switch_dev *dev, struct switch_attr *attr,		struct switch_val *val);/** * swlib_get_attr: get the value for an attribute * @dev: switch device struct * @attr: switch attribute struct * @val: attribute value pointer * returns 0 on success * for string attributes, the result string must be freed by the caller */int swlib_get_attr(struct switch_dev *dev, struct switch_attr *attr,		struct switch_val *val);#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?