/*
* Wireless Tools
*
- * Jean II - HPLB '99
+ * Jean II - HPLB 97->99 - HPL 99->00
*
* Main code for "iwconfig". This is the generic tool for most
* manipulations...
- * You need to link this code against "iwcommon.c" and "-lm".
+ * You need to link this code against "iwlib.c" and "-lm".
+ *
+ * This file is released under the GPL license.
+ * Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
*/
-#include "iwcommon.h" /* Header */
+#include "iwlib.h" /* Header */
/************************* MISC SUBROUTINES **************************/
fprintf(stderr, "Usage: iwpriv interface [private-command [private-arguments]]\n");
fprintf(stderr, " interface [roam {on|off}]\n");
fprintf(stderr, " interface [port {ad-hoc|managed|N}]\n");
- exit(1);
}
/************************ GENERIC FUNCTIONS *************************/
char * ifname)
{
int k;
- iwprivargs priv[16];
+ iwprivargs priv[32];
int n;
- char * argtype[] = { " ", "byte", "char", "", "int", "float" };
+ char * argtype[] = { " ", "byte", "char", "", "int ", "float" };
/* Read the private ioctls */
- n = get_priv_info(skfd, ifname, priv);
+ n = iw_get_priv_info(skfd, ifname, priv);
/* Is there any ? */
if(n <= 0)
int k;
iwprivargs priv[16];
int number;
+ int temp;
/* Read the private ioctls */
- number = get_priv_info(skfd, ifname, priv);
+ number = iw_get_priv_info(skfd, ifname, priv);
/* Is there any ? */
if(number <= 0)
wrq.u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK;
/* Fetch args */
- for(; i < wrq.u.data.length + 1; i++)
- sscanf(args[i], "%d", (int *)(buffer + i - 1));
+ for(; i < wrq.u.data.length + 1; i++) {
+ sscanf(args[i], "%d", &temp);
+ buffer[i - 1] = (char) temp;
+ }
break;
case IW_PRIV_TYPE_INT:
strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
if((priv[k].set_args & IW_PRIV_SIZE_FIXED) &&
- (byte_size(priv[k].set_args) < IFNAMSIZ))
+ (iw_byte_size(priv[k].set_args) < IFNAMSIZ))
memcpy(wrq.u.name, buffer, IFNAMSIZ);
else
{
printf("%-8.8s %s:", ifname, priv[k].name);
if((priv[k].get_args & IW_PRIV_SIZE_FIXED) &&
- (byte_size(priv[k].get_args) < IFNAMSIZ))
+ (iw_byte_size(priv[k].get_args) < IFNAMSIZ))
{
memcpy(buffer, wrq.u.name, IFNAMSIZ);
n = priv[k].get_args & IW_PRIV_SIZE_MASK;
case IW_PRIV_TYPE_INT:
/* Display args */
for(j = 0; j < n; j++)
- printf("%d ", ((u_int *) buffer)[i]);
+ printf("%d ", ((u_int *) buffer)[j]);
printf("\n");
break;
change roam states */
/* Read the private ioctls */
- number = get_priv_info(skfd, ifname, priv);
+ number = iw_get_priv_info(skfd, ifname, priv);
/* Is there any ? */
if(number <= 0)
}
if(count != 1)
- iw_usage();
+ {
+ iw_usage();
+ return(-1);
+ }
if(!strcasecmp(args[i], "on"))
{
if(ioctl(skfd, priv[k].cmd, &wrq) < 0)
{
fprintf(stderr, "Roaming support is broken.\n");
- exit(0);
+ return(-1);
}
}
- i++;
- return(i);
+ return(0);
}
/*------------------------------------------------------------------*/
char * modes[] = { "invalid", "managed (BSS)", "reserved", "ad-hoc" };
/* Read the private ioctls */
- number = get_priv_info(skfd, ifname, priv);
+ number = iw_get_priv_info(skfd, ifname, priv);
/* Is there any ? */
if(number <= 0)
}
if(count != 1)
- iw_usage();
+ {
+ iw_usage();
+ return(-1);
+ }
/* Read it */
/* As a string... */
else
/* ...or as an integer */
if(sscanf(args[i], "%d", (int *) &ptype) != 1)
- iw_usage();
+ {
+ iw_usage();
+ return(-1);
+ }
k = -1;
while((++k < number) && strcmp(priv[k].name, "sport_type") &&
if(ioctl(skfd, priv[k].cmd, &wrq) < 0)
{
fprintf(stderr, "Invalid port type (or setting not allowed)\n");
- exit(0);
+ return(-1);
}
- i++;
- return(i);
+ return(0);
}
/******************************* MAIN ********************************/
int goterr = 0;
/* Create a channel to the NET kernel. */
- if((skfd = sockets_open()) < 0)
+ if((skfd = iw_sockets_open()) < 0)
{
perror("socket");
- exit(-1);
+ return(-1);
}
/* No argument : show the list of all device + info */
{
print_priv_devices(skfd);
close(skfd);
- exit(0);
+ return(0);
}
/* Special cases take one... */
{
iw_usage();
close(skfd);
- exit(0);
+ return(0);
}
/* The device name must be the first argument */
{
print_priv_info(skfd, argv[1]);
close(skfd);
- exit(0);
+ return(0);
}
/* Special cases take two... */
{
goterr = set_roaming(skfd, argv + 3, argc - 3, argv[1]);
close(skfd);
- exit(0);
+ return(goterr);
}
/* Port type */
{
goterr = port_type(skfd, argv + 3, argc - 3, argv[1]);
close(skfd);
- exit(0);
+ return(goterr);
}
/* Otherwise, it's a private ioctl */
/* Close the socket. */
close(skfd);
- return(1);
+ return(goterr);
}