struct device;
struct device_user;
struct device_hotplug_ops;
+struct interface;
typedef int (*device_state_cb)(struct device *, bool up);
enum {
DEV_ATTR_TYPE,
- DEV_ATTR_IFNAME,
DEV_ATTR_MTU,
+ DEV_ATTR_MTU6,
DEV_ATTR_MACADDR,
DEV_ATTR_TXQUEUELEN,
DEV_ATTR_ENABLED,
DEV_ATTR_PROMISC,
DEV_ATTR_RPFILTER,
DEV_ATTR_ACCEPTLOCAL,
+ DEV_ATTR_IGMPVERSION,
+ DEV_ATTR_MLDVERSION,
+ DEV_ATTR_NEIGHREACHABLETIME,
+ DEV_ATTR_RPS,
+ DEV_ATTR_XPS,
+ DEV_ATTR_DADTRANSMITS,
+ DEV_ATTR_MULTICAST_TO_UNICAST,
+ DEV_ATTR_MULTICAST_ROUTER,
__DEV_ATTR_MAX,
};
struct list_head list;
const char *name;
- bool keep_link_status;
-
const struct uci_blob_param_list *config_params;
struct device *(*create)(const char *name, struct blob_attr *attr);
};
enum {
- DEV_OPT_MTU = (1 << 0),
- DEV_OPT_MACADDR = (1 << 1),
- DEV_OPT_TXQUEUELEN = (1 << 2),
- DEV_OPT_IPV6 = (1 << 3),
- DEV_OPT_PROMISC = (1 << 4),
- DEV_OPT_RPFILTER = (1 << 5),
- DEV_OPT_ACCEPTLOCAL = (1 << 6),
+ DEV_OPT_MTU = (1 << 0),
+ DEV_OPT_MACADDR = (1 << 1),
+ DEV_OPT_TXQUEUELEN = (1 << 2),
+ DEV_OPT_IPV6 = (1 << 3),
+ DEV_OPT_PROMISC = (1 << 4),
+ DEV_OPT_RPFILTER = (1 << 5),
+ DEV_OPT_ACCEPTLOCAL = (1 << 6),
+ DEV_OPT_IGMPVERSION = (1 << 7),
+ DEV_OPT_MLDVERSION = (1 << 8),
+ DEV_OPT_NEIGHREACHABLETIME = (1 << 9),
+ DEV_OPT_RPS = (1 << 10),
+ DEV_OPT_XPS = (1 << 11),
+ DEV_OPT_MTU6 = (1 << 12),
+ DEV_OPT_DADTRANSMITS = (1 << 13),
+ DEV_OPT_MULTICAST_TO_UNICAST = (1 << 14),
+ DEV_OPT_MULTICAST_ROUTER = (1 << 15),
};
/* events broadcasted to all users of a device */
struct device_settings {
unsigned int flags;
+ unsigned int valid_flags;
unsigned int mtu;
+ unsigned int mtu6;
unsigned int txqueuelen;
uint8_t macaddr[6];
bool ipv6;
bool promisc;
unsigned int rpfilter;
bool acceptlocal;
+ unsigned int igmpversion;
+ unsigned int mldversion;
+ unsigned int neigh4reachabletime;
+ unsigned int neigh6reachabletime;
+ bool rps;
+ bool xps;
+ unsigned int dadtransmits;
+ bool multicast_to_unicast;
+ unsigned int multicast_router;
};
/*
struct blob_attr *config;
bool config_pending;
bool sys_present;
+ /* DEV_EVENT_ADD */
bool present;
+ /* DEV_EVENT_UP */
int active;
+ /* DEV_EVENT_LINK_UP */
bool link_active;
bool external;
bool hidden;
bool current_config;
+ bool iface_config;
bool default_config;
bool wireless;
+ bool wireless_ap;
+ bool wireless_isolate;
+
+ struct interface *config_iface;
/* set interface up or down */
device_state_cb set_state;
void device_init_pending(void);
enum dev_change_type
-device_set_config(struct device *dev, const struct device_type *type,
- struct blob_attr *attr);
+device_apply_config(struct device *dev, const struct device_type *type,
+ struct blob_attr *config);
void device_reset_config(void);
void device_reset_old(void);
+void device_set_default_ps(bool state);
void device_init_virtual(struct device *dev, const struct device_type *type, const char *name);
int device_init(struct device *iface, const struct device_type *type, const char *ifname);