diff options
Diffstat (limited to 'net/wimax')
| -rw-r--r-- | net/wimax/op-msg.c | 27 | ||||
| -rw-r--r-- | net/wimax/op-reset.c | 17 | ||||
| -rw-r--r-- | net/wimax/op-rfkill.c | 21 | ||||
| -rw-r--r-- | net/wimax/op-state-get.c | 17 | ||||
| -rw-r--r-- | net/wimax/stack.c | 96 | ||||
| -rw-r--r-- | net/wimax/wimax-internal.h | 26 | 
6 files changed, 64 insertions, 140 deletions
diff --git a/net/wimax/op-msg.c b/net/wimax/op-msg.c index 0694d62e4db..c278b3356f7 100644 --- a/net/wimax/op-msg.c +++ b/net/wimax/op-msg.c @@ -279,7 +279,7 @@ int wimax_msg_send(struct wimax_dev *wimax_dev, struct sk_buff *skb)  	d_printf(1, dev, "CTX: wimax msg, %zu bytes\n", size);  	d_dump(2, dev, msg, size); -	genlmsg_multicast(skb, 0, wimax_gnl_mcg.id, GFP_KERNEL); +	genlmsg_multicast(&wimax_gnl_family, skb, 0, 0, GFP_KERNEL);  	d_printf(1, dev, "CTX: genl multicast done\n");  	return 0;  } @@ -321,17 +321,6 @@ int wimax_msg(struct wimax_dev *wimax_dev, const char *pipe_name,  }  EXPORT_SYMBOL_GPL(wimax_msg); - -static const struct nla_policy wimax_gnl_msg_policy[WIMAX_GNL_ATTR_MAX + 1] = { -	[WIMAX_GNL_MSG_IFIDX] = { -		.type = NLA_U32, -	}, -	[WIMAX_GNL_MSG_DATA] = { -		.type = NLA_UNSPEC,	/* libnl doesn't grok BINARY yet */ -	}, -}; - -  /*   * Relays a message from user space to the driver   * @@ -340,7 +329,6 @@ static const struct nla_policy wimax_gnl_msg_policy[WIMAX_GNL_ATTR_MAX + 1] = {   *   * This call will block while handling/relaying the message.   */ -static  int wimax_gnl_doit_msg_from_user(struct sk_buff *skb, struct genl_info *info)  {  	int result, ifindex; @@ -418,16 +406,3 @@ error_no_wimax_dev:  	return result;  } - -/* - * Generic Netlink glue - */ - -struct genl_ops wimax_gnl_msg_from_user = { -	.cmd = WIMAX_GNL_OP_MSG_FROM_USER, -	.flags = GENL_ADMIN_PERM, -	.policy = wimax_gnl_msg_policy, -	.doit = wimax_gnl_doit_msg_from_user, -	.dumpit = NULL, -}; - diff --git a/net/wimax/op-reset.c b/net/wimax/op-reset.c index 7ceffe39d70..eb4580784d9 100644 --- a/net/wimax/op-reset.c +++ b/net/wimax/op-reset.c @@ -92,13 +92,6 @@ int wimax_reset(struct wimax_dev *wimax_dev)  EXPORT_SYMBOL(wimax_reset); -static const struct nla_policy wimax_gnl_reset_policy[WIMAX_GNL_ATTR_MAX + 1] = { -	[WIMAX_GNL_RESET_IFIDX] = { -		.type = NLA_U32, -	}, -}; - -  /*   * Exporting to user space over generic netlink   * @@ -106,7 +99,6 @@ static const struct nla_policy wimax_gnl_reset_policy[WIMAX_GNL_ATTR_MAX + 1] =   *   * No attributes.   */ -static  int wimax_gnl_doit_reset(struct sk_buff *skb, struct genl_info *info)  {  	int result, ifindex; @@ -130,12 +122,3 @@ error_no_wimax_dev:  	d_fnend(3, NULL, "(skb %p info %p) = %d\n", skb, info, result);  	return result;  } - - -struct genl_ops wimax_gnl_reset = { -	.cmd = WIMAX_GNL_OP_RESET, -	.flags = GENL_ADMIN_PERM, -	.policy = wimax_gnl_reset_policy, -	.doit = wimax_gnl_doit_reset, -	.dumpit = NULL, -}; diff --git a/net/wimax/op-rfkill.c b/net/wimax/op-rfkill.c index 7ab60babdd2..403078d670a 100644 --- a/net/wimax/op-rfkill.c +++ b/net/wimax/op-rfkill.c @@ -411,17 +411,6 @@ void wimax_rfkill_rm(struct wimax_dev *wimax_dev)   * just query).   */ -static const struct nla_policy wimax_gnl_rfkill_policy[WIMAX_GNL_ATTR_MAX + 1] = { -	[WIMAX_GNL_RFKILL_IFIDX] = { -		.type = NLA_U32, -	}, -	[WIMAX_GNL_RFKILL_STATE] = { -		.type = NLA_U32		/* enum wimax_rf_state */ -	}, -}; - - -static  int wimax_gnl_doit_rfkill(struct sk_buff *skb, struct genl_info *info)  {  	int result, ifindex; @@ -457,13 +446,3 @@ error_no_wimax_dev:  	d_fnend(3, NULL, "(skb %p info %p) = %d\n", skb, info, result);  	return result;  } - - -struct genl_ops wimax_gnl_rfkill = { -	.cmd = WIMAX_GNL_OP_RFKILL, -	.flags = GENL_ADMIN_PERM, -	.policy = wimax_gnl_rfkill_policy, -	.doit = wimax_gnl_doit_rfkill, -	.dumpit = NULL, -}; - diff --git a/net/wimax/op-state-get.c b/net/wimax/op-state-get.c index aff8776e2d4..995c08c827b 100644 --- a/net/wimax/op-state-get.c +++ b/net/wimax/op-state-get.c @@ -33,13 +33,6 @@  #include "debug-levels.h" -static const struct nla_policy wimax_gnl_state_get_policy[WIMAX_GNL_ATTR_MAX + 1] = { -	[WIMAX_GNL_STGET_IFIDX] = { -		.type = NLA_U32, -	}, -}; - -  /*   * Exporting to user space over generic netlink   * @@ -48,7 +41,6 @@ static const struct nla_policy wimax_gnl_state_get_policy[WIMAX_GNL_ATTR_MAX + 1   *   * No attributes.   */ -static  int wimax_gnl_doit_state_get(struct sk_buff *skb, struct genl_info *info)  {  	int result, ifindex; @@ -72,12 +64,3 @@ error_no_wimax_dev:  	d_fnend(3, NULL, "(skb %p info %p) = %d\n", skb, info, result);  	return result;  } - - -struct genl_ops wimax_gnl_state_get = { -	.cmd = WIMAX_GNL_OP_STATE_GET, -	.flags = GENL_ADMIN_PERM, -	.policy = wimax_gnl_state_get_policy, -	.doit = wimax_gnl_doit_state_get, -	.dumpit = NULL, -}; diff --git a/net/wimax/stack.c b/net/wimax/stack.c index a6470ac3949..ec8b577db13 100644 --- a/net/wimax/stack.c +++ b/net/wimax/stack.c @@ -116,8 +116,9 @@ struct sk_buff *wimax_gnl_re_state_change_alloc(  		dev_err(dev, "RE_STCH: can't create message\n");  		goto error_new;  	} -	data = genlmsg_put(report_skb, 0, wimax_gnl_mcg.id, &wimax_gnl_family, -			   0, WIMAX_GNL_RE_STATE_CHANGE); +	/* FIXME: sending a group ID as the seq is wrong */ +	data = genlmsg_put(report_skb, 0, wimax_gnl_family.mcgrp_offset, +			   &wimax_gnl_family, 0, WIMAX_GNL_RE_STATE_CHANGE);  	if (data == NULL) {  		dev_err(dev, "RE_STCH: can't put data into message\n");  		goto error_put; @@ -177,7 +178,7 @@ int wimax_gnl_re_state_change_send(  		goto out;  	}  	genlmsg_end(report_skb, header); -	genlmsg_multicast(report_skb, 0, wimax_gnl_mcg.id, GFP_KERNEL); +	genlmsg_multicast(&wimax_gnl_family, report_skb, 0, 0, GFP_KERNEL);  out:  	d_fnend(3, dev, "(wimax_dev %p report_skb %p) = %d\n",  		wimax_dev, report_skb, result); @@ -402,22 +403,44 @@ void wimax_dev_init(struct wimax_dev *wimax_dev)  }  EXPORT_SYMBOL_GPL(wimax_dev_init); -/* - * This extern is declared here because it's easier to keep track -- - * both declarations are a list of the same - */ -extern struct genl_ops -	wimax_gnl_msg_from_user, -	wimax_gnl_reset, -	wimax_gnl_rfkill, -	wimax_gnl_state_get; +static const struct nla_policy wimax_gnl_policy[WIMAX_GNL_ATTR_MAX + 1] = { +	[WIMAX_GNL_RESET_IFIDX] = { .type = NLA_U32, }, +	[WIMAX_GNL_RFKILL_IFIDX] = { .type = NLA_U32, }, +	[WIMAX_GNL_RFKILL_STATE] = { +		.type = NLA_U32		/* enum wimax_rf_state */ +	}, +	[WIMAX_GNL_STGET_IFIDX] = { .type = NLA_U32, }, +	[WIMAX_GNL_MSG_IFIDX] = { .type = NLA_U32, }, +	[WIMAX_GNL_MSG_DATA] = { +		.type = NLA_UNSPEC,	/* libnl doesn't grok BINARY yet */ +	}, +}; -static -struct genl_ops *wimax_gnl_ops[] = { -	&wimax_gnl_msg_from_user, -	&wimax_gnl_reset, -	&wimax_gnl_rfkill, -	&wimax_gnl_state_get, +static const struct genl_ops wimax_gnl_ops[] = { +	{ +		.cmd = WIMAX_GNL_OP_MSG_FROM_USER, +		.flags = GENL_ADMIN_PERM, +		.policy = wimax_gnl_policy, +		.doit = wimax_gnl_doit_msg_from_user, +	}, +	{ +		.cmd = WIMAX_GNL_OP_RESET, +		.flags = GENL_ADMIN_PERM, +		.policy = wimax_gnl_policy, +		.doit = wimax_gnl_doit_reset, +	}, +	{ +		.cmd = WIMAX_GNL_OP_RFKILL, +		.flags = GENL_ADMIN_PERM, +		.policy = wimax_gnl_policy, +		.doit = wimax_gnl_doit_rfkill, +	}, +	{ +		.cmd = WIMAX_GNL_OP_STATE_GET, +		.flags = GENL_ADMIN_PERM, +		.policy = wimax_gnl_policy, +		.doit = wimax_gnl_doit_state_get, +	},  }; @@ -557,8 +580,8 @@ struct genl_family wimax_gnl_family = {  	.maxattr = WIMAX_GNL_ATTR_MAX,  }; -struct genl_multicast_group wimax_gnl_mcg = { -	.name = "msg", +static const struct genl_multicast_group wimax_gnl_mcgrps[] = { +	{ .name = "msg", },  }; @@ -567,7 +590,7 @@ struct genl_multicast_group wimax_gnl_mcg = {  static  int __init wimax_subsys_init(void)  { -	int result, cnt; +	int result;  	d_fnstart(4, NULL, "()\n");  	d_parse_params(D_LEVEL, D_LEVEL_SIZE, wimax_debug_params, @@ -575,38 +598,18 @@ int __init wimax_subsys_init(void)  	snprintf(wimax_gnl_family.name, sizeof(wimax_gnl_family.name),  		 "WiMAX"); -	result = genl_register_family(&wimax_gnl_family); +	result = genl_register_family_with_ops_groups(&wimax_gnl_family, +						      wimax_gnl_ops, +						      wimax_gnl_mcgrps);  	if (unlikely(result < 0)) {  		printk(KERN_ERR "cannot register generic netlink family: %d\n",  		       result);  		goto error_register_family;  	} -	for (cnt = 0; cnt < ARRAY_SIZE(wimax_gnl_ops); cnt++) { -		result = genl_register_ops(&wimax_gnl_family, -					   wimax_gnl_ops[cnt]); -		d_printf(4, NULL, "registering generic netlink op code " -			 "%u: %d\n", wimax_gnl_ops[cnt]->cmd, result); -		if (unlikely(result < 0)) { -			printk(KERN_ERR "cannot register generic netlink op " -			       "code %u: %d\n", -			       wimax_gnl_ops[cnt]->cmd, result); -			goto error_register_ops; -		} -	} - -	result = genl_register_mc_group(&wimax_gnl_family, &wimax_gnl_mcg); -	if (result < 0) -		goto error_mc_group;  	d_fnend(4, NULL, "() = 0\n");  	return 0; -error_mc_group: -error_register_ops: -	for (cnt--; cnt >= 0; cnt--) -		genl_unregister_ops(&wimax_gnl_family, -				    wimax_gnl_ops[cnt]); -	genl_unregister_family(&wimax_gnl_family);  error_register_family:  	d_fnend(4, NULL, "() = %d\n", result);  	return result; @@ -619,12 +622,7 @@ module_init(wimax_subsys_init);  static  void __exit wimax_subsys_exit(void)  { -	int cnt;  	wimax_id_table_release(); -	genl_unregister_mc_group(&wimax_gnl_family, &wimax_gnl_mcg); -	for (cnt = ARRAY_SIZE(wimax_gnl_ops) - 1; cnt >= 0; cnt--) -		genl_unregister_ops(&wimax_gnl_family, -				    wimax_gnl_ops[cnt]);  	genl_unregister_family(&wimax_gnl_family);  }  module_exit(wimax_subsys_exit); diff --git a/net/wimax/wimax-internal.h b/net/wimax/wimax-internal.h index 1e743d21485..b445b82020a 100644 --- a/net/wimax/wimax-internal.h +++ b/net/wimax/wimax-internal.h @@ -63,11 +63,11 @@ void __wimax_state_set(struct wimax_dev *wimax_dev, enum wimax_st state)  {  	wimax_dev->state = state;  } -extern void __wimax_state_change(struct wimax_dev *, enum wimax_st); +void __wimax_state_change(struct wimax_dev *, enum wimax_st);  #ifdef CONFIG_DEBUG_FS -extern int wimax_debugfs_add(struct wimax_dev *); -extern void wimax_debugfs_rm(struct wimax_dev *); +int wimax_debugfs_add(struct wimax_dev *); +void wimax_debugfs_rm(struct wimax_dev *);  #else  static inline int wimax_debugfs_add(struct wimax_dev *wimax_dev)  { @@ -76,16 +76,22 @@ static inline int wimax_debugfs_add(struct wimax_dev *wimax_dev)  static inline void wimax_debugfs_rm(struct wimax_dev *wimax_dev) {}  #endif -extern void wimax_id_table_add(struct wimax_dev *); -extern struct wimax_dev *wimax_dev_get_by_genl_info(struct genl_info *, int); -extern void wimax_id_table_rm(struct wimax_dev *); -extern void wimax_id_table_release(void); +void wimax_id_table_add(struct wimax_dev *); +struct wimax_dev *wimax_dev_get_by_genl_info(struct genl_info *, int); +void wimax_id_table_rm(struct wimax_dev *); +void wimax_id_table_release(void); -extern int wimax_rfkill_add(struct wimax_dev *); -extern void wimax_rfkill_rm(struct wimax_dev *); +int wimax_rfkill_add(struct wimax_dev *); +void wimax_rfkill_rm(struct wimax_dev *); +/* generic netlink */  extern struct genl_family wimax_gnl_family; -extern struct genl_multicast_group wimax_gnl_mcg; + +/* ops */ +int wimax_gnl_doit_msg_from_user(struct sk_buff *skb, struct genl_info *info); +int wimax_gnl_doit_reset(struct sk_buff *skb, struct genl_info *info); +int wimax_gnl_doit_rfkill(struct sk_buff *skb, struct genl_info *info); +int wimax_gnl_doit_state_get(struct sk_buff *skb, struct genl_info *info);  #endif /* #ifdef __KERNEL__ */  #endif /* #ifndef __WIMAX_INTERNAL_H__ */  | 
