[PATCH] libertas: split wext for eth and msh

Dan Williams dcbw at redhat.com
Sun Apr 29 16:47:30 EDT 2007


On Fri, 2007-04-27 at 18:03 -0700, Luis Carlos Cobo Rus wrote:
> Separate wireless handlers of mshX and ethX. ethX remains as before.
> 
> For mshX, it has been disabled set/get essid, wap and set mode. Get mode always
> returns "Repeater" and by now we use the Nickname to show if the mesh is active
> ("Mesh") or not (empty). The rest remains as before.

Tabs got replaced with spaces...  please resend

Dan

> ---
>  drivers/net/wireless/libertas/main.c    |    2 +-
>  drivers/net/wireless/libertas/wext.c    |  104 +++++++++++++++++++++++++++++++
>  drivers/net/wireless/libertas/wext.h    |    1 +
>  3 files changed, 106 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/wireless/libertas/main.c
> b/drivers/net/wireless/libertas/main.c
> index 4d9d54d..3bc9cb7 100644
> --- a/drivers/net/wireless/libertas/main.c
> +++ b/drivers/net/wireless/libertas/main.c
> @@ -916,7 +916,7 @@ int libertas_add_mesh(wlan_private *priv, struct
> device *dev)
>  	SET_NETDEV_DEV(priv->mesh_dev, dev);
> 
>  #ifdef	WIRELESS_EXT
> -	mesh_dev->wireless_handlers = (struct iw_handler_def *)&libertas_handler_def;
> +	mesh_dev->wireless_handlers = (struct iw_handler_def *)&mesh_handler_def;
>  #endif
>  #define NETIF_F_DYNALLOC 16
> 
> diff --git a/drivers/net/wireless/libertas/wext.c
> b/drivers/net/wireless/libertas/wext.c
> index fc84c85..4f3e99e 100644
> --- a/drivers/net/wireless/libertas/wext.c
> +++ b/drivers/net/wireless/libertas/wext.c
> @@ -373,6 +373,30 @@ static int wlan_get_nick(struct net_device *dev,
> struct iw_request_info *info,
>  	return 0;
>  }
> 
> +static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info,
> +			 struct iw_point *dwrq, char *extra)
> +{
> +	wlan_private *priv = dev->priv;
> +	wlan_adapter *adapter = priv->adapter;
> +
> +	lbs_deb_enter(LBS_DEB_WEXT);
> +
> +	/* Use nickname to indicate that mesh is on */
> +
> +	if (adapter->connect_status == libertas_connected) {
> +		strncpy(extra, "Mesh", 12);
> +		extra[12] = '\0';
> +		dwrq->length = strlen(extra) + 1;
> +	}
> +
> +	else {
> +		extra[0] = '\0';
> +		dwrq->length = 1 ;
> +	}
> +
> +	lbs_deb_leave(LBS_DEB_WEXT);
> +	return 0;
> +}
>  static int wlan_set_rts(struct net_device *dev, struct iw_request_info *info,
>  			struct iw_param *vwrq, char *extra)
>  {
> @@ -493,6 +517,18 @@ static int wlan_get_mode(struct net_device *dev,
>  	return 0;
>  }
> 
> +static int mesh_wlan_get_mode(struct net_device *dev,
> +		              struct iw_request_info *info, u32 * uwrq,
> +			      char *extra)
> +{
> +	lbs_deb_enter(LBS_DEB_WEXT);
> +
> +	*uwrq = IW_MODE_REPEAT ;
> +
> +	lbs_deb_leave(LBS_DEB_WEXT);
> +	return 0;
> +}
> +
>  static int wlan_get_txpow(struct net_device *dev,
>  			  struct iw_request_info *info,
>  			  struct iw_param *vwrq, char *extra)
> @@ -2622,6 +2658,63 @@ static const iw_handler wlan_handler[] = {
>  	(iw_handler) NULL,		/* SIOCSIWPMKSA */
>  };
> 
> +static const iw_handler mesh_wlan_handler[] = {
> +	(iw_handler) NULL,	/* SIOCSIWCOMMIT */
> +	(iw_handler) wlan_get_name,	/* SIOCGIWNAME */
> +	(iw_handler) NULL,	/* SIOCSIWNWID */
> +	(iw_handler) NULL,	/* SIOCGIWNWID */
> +	(iw_handler) wlan_set_freq,	/* SIOCSIWFREQ */
> +	(iw_handler) wlan_get_freq,	/* SIOCGIWFREQ */
> +	(iw_handler) NULL,		/* SIOCSIWMODE */
> +	(iw_handler) mesh_wlan_get_mode,	/* SIOCGIWMODE */
> +	(iw_handler) NULL,	/* SIOCSIWSENS */
> +	(iw_handler) NULL,	/* SIOCGIWSENS */
> +	(iw_handler) NULL,	/* SIOCSIWRANGE */
> +	(iw_handler) wlan_get_range,	/* SIOCGIWRANGE */
> +	(iw_handler) NULL,	/* SIOCSIWPRIV */
> +	(iw_handler) NULL,	/* SIOCGIWPRIV */
> +	(iw_handler) NULL,	/* SIOCSIWSTATS */
> +	(iw_handler) NULL,	/* SIOCGIWSTATS */
> +	iw_handler_set_spy,	/* SIOCSIWSPY */
> +	iw_handler_get_spy,	/* SIOCGIWSPY */
> +	iw_handler_set_thrspy,	/* SIOCSIWTHRSPY */
> +	iw_handler_get_thrspy,	/* SIOCGIWTHRSPY */
> +	(iw_handler) NULL,	/* SIOCSIWAP */
> +	(iw_handler) NULL,	/* SIOCGIWAP */
> +	(iw_handler) NULL,	/* SIOCSIWMLME */
> +	(iw_handler) NULL,	/* SIOCGIWAPLIST - deprecated */
> +	(iw_handler) libertas_set_scan,	/* SIOCSIWSCAN */
> +	(iw_handler) libertas_get_scan,	/* SIOCGIWSCAN */
> +	(iw_handler) NULL,		/* SIOCSIWESSID */
> +	(iw_handler) NULL,		/* SIOCGIWESSID */
> +	(iw_handler) NULL,		/* SIOCSIWNICKN */
> +	(iw_handler) mesh_get_nick,	/* SIOCGIWNICKN */
> +	(iw_handler) NULL,	/* -- hole -- */
> +	(iw_handler) NULL,	/* -- hole -- */
> +	(iw_handler) wlan_set_rate,	/* SIOCSIWRATE */
> +	(iw_handler) wlan_get_rate,	/* SIOCGIWRATE */
> +	(iw_handler) wlan_set_rts,	/* SIOCSIWRTS */
> +	(iw_handler) wlan_get_rts,	/* SIOCGIWRTS */
> +	(iw_handler) wlan_set_frag,	/* SIOCSIWFRAG */
> +	(iw_handler) wlan_get_frag,	/* SIOCGIWFRAG */
> +	(iw_handler) wlan_set_txpow,	/* SIOCSIWTXPOW */
> +	(iw_handler) wlan_get_txpow,	/* SIOCGIWTXPOW */
> +	(iw_handler) wlan_set_retry,	/* SIOCSIWRETRY */
> +	(iw_handler) wlan_get_retry,	/* SIOCGIWRETRY */
> +	(iw_handler) wlan_set_encode,	/* SIOCSIWENCODE */
> +	(iw_handler) wlan_get_encode,	/* SIOCGIWENCODE */
> +	(iw_handler) wlan_set_power,	/* SIOCSIWPOWER */
> +	(iw_handler) wlan_get_power,	/* SIOCGIWPOWER */
> +	(iw_handler) NULL,	/* -- hole -- */
> +	(iw_handler) NULL,	/* -- hole -- */
> +	(iw_handler) wlan_set_genie,	/* SIOCSIWGENIE */
> +	(iw_handler) wlan_get_genie,	/* SIOCGIWGENIE */
> +	(iw_handler) wlan_set_auth,	/* SIOCSIWAUTH */
> +	(iw_handler) wlan_get_auth,	/* SIOCGIWAUTH */
> +	(iw_handler) wlan_set_encodeext,/* SIOCSIWENCODEEXT */
> +	(iw_handler) wlan_get_encodeext,/* SIOCGIWENCODEEXT */
> +	(iw_handler) NULL,		/* SIOCSIWPMKSA */
> +};
>  struct iw_handler_def libertas_handler_def = {
>  	.num_standard	= sizeof(wlan_handler) / sizeof(iw_handler),
>  	.num_private	= sizeof(wlan_private_handler) / sizeof(iw_handler),
> @@ -2632,3 +2725,14 @@ struct iw_handler_def libertas_handler_def = {
>  	.private_args	= (struct iw_priv_args *)wlan_private_args,
>  	.get_wireless_stats = wlan_get_wireless_stats,
>  };
> +
> +struct iw_handler_def mesh_handler_def = {
> +	.num_standard	= sizeof(mesh_wlan_handler) / sizeof(iw_handler),
> +	.num_private	= sizeof(wlan_private_handler) / sizeof(iw_handler),
> +	.num_private_args = sizeof(wlan_private_args) /
> +		sizeof(struct iw_priv_args),
> +	.standard	= (iw_handler *) mesh_wlan_handler,
> +	.private	= (iw_handler *) wlan_private_handler,
> +	.private_args	= (struct iw_priv_args *)wlan_private_args,
> +	.get_wireless_stats = wlan_get_wireless_stats,
> +};
> diff --git a/drivers/net/wireless/libertas/wext.h
> b/drivers/net/wireless/libertas/wext.h
> index f786586..fdac44a 100644
> --- a/drivers/net/wireless/libertas/wext.h
> +++ b/drivers/net/wireless/libertas/wext.h
> @@ -143,6 +143,7 @@ struct wlan_ioctl_regrdwr {
>  };
> 
>  extern struct iw_handler_def libertas_handler_def;
> +extern struct iw_handler_def mesh_handler_def;
>  int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int i);
>  int wlan_radio_ioctl(wlan_private * priv, u8 option);
> 
> -- 
> 1.4.4.2
> 




More information about the libertas-dev mailing list