Use size_t for buffer sizes. Improve error handling in some places.

Remove a __DECONST() that was needed before this interface cleanup.
This commit is contained in:
Hartmut Brandt 2003-07-29 13:37:04 +00:00
parent 21b40f3c1b
commit c7185249d7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=118163
8 changed files with 117 additions and 148 deletions

View File

@ -559,7 +559,8 @@ pvc_add(int argc, char **argv, const struct cmd *cmdp)
const struct traffics *trafp; const struct traffics *trafp;
char *cp; char *cp;
u_long v; u_long v;
int buf_len, s; ssize_t buf_len;
int s;
/* /*
* Initialize opcode and flags * Initialize opcode and flags
@ -577,29 +578,23 @@ pvc_add(int argc, char **argv, const struct cmd *cmdp)
} }
bzero(air.air_int_intf, sizeof(air.air_int_intf)); bzero(air.air_int_intf, sizeof(air.air_int_intf));
strcpy(air.air_int_intf, argv[0]); strcpy(air.air_int_intf, argv[0]);
buf_len = sizeof(struct air_int_rsp);
air.air_opcode = AIOCS_INF_INT; air.air_opcode = AIOCS_INF_INT;
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air, sizeof(struct air_int_rsp));
if (buf_len < 0) { if (buf_len == -1) {
fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
case EOPNOTSUPP: case EOPNOTSUPP:
perror("Internal error"); err(1, "Internal error");
break;
case ENXIO: case ENXIO:
fprintf(stderr, "%s is not an ATM device\n", errx(1, "%s is not an ATM device", argv[0]);
argv[0]);
break;
default: default:
perror("ioctl (AIOCINFO)"); err(1, "ioctl (AIOCINFO)");
break;
} }
exit(1);
} }
int_info = (struct air_int_rsp *)(void *)air.air_buf_addr; int_info = (struct air_int_rsp *)(void *)air.air_buf_addr;
strcpy(apr.aar_pvc_intf, argv[0]); strcpy(apr.aar_pvc_intf, argv[0]);
argc--; argv++; argc--;
argv++;
/* /*
* Validate vpi/vci values * Validate vpi/vci values
@ -769,35 +764,30 @@ pvc_add(int argc, char **argv, const struct cmd *cmdp)
sock_error(errno); sock_error(errno);
} }
if (ioctl(s, AIOCADD, (caddr_t)&apr) < 0) { if (ioctl(s, AIOCADD, (caddr_t)&apr) < 0) {
fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case EPROTONOSUPPORT: case EPROTONOSUPPORT:
case ENOPROTOOPT: case ENOPROTOOPT:
perror("Internal error"); err(1, "Internal error");
break;
case EINVAL: case EINVAL:
fprintf(stderr, "Invalid parameter\n"); errx(1, "Invalid parameter");
break;
case EEXIST: case EEXIST:
fprintf(stderr, "PVC already exists\n"); errx(1, "PVC already exists");
break; break;
case ENETDOWN: case ENETDOWN:
fprintf(stderr, "ATM network is inoperable\n"); errx(1, "ATM network is inoperable");
break; break;
case ENOMEM: case ENOMEM:
fprintf(stderr, "Kernel memory exhausted\n"); errx(1, "Kernel memory exhausted");
break; break;
case EPERM: case EPERM:
fprintf(stderr, "Must be super user to use add subcommand\n"); errx(1, "Must be super user to use add subcommand");
break; break;
case ERANGE: case ERANGE:
fprintf(stderr, "Invalid VPI or VCI value\n"); errx(1, "Invalid VPI or VCI value");
break; break;
default: default:
perror("ioctl (AIOCADD) add PVC"); err(1, "ioctl (AIOCADD) add PVC");
break;
} }
exit(1);
} }
(void)close(s); (void)close(s);
} }

View File

@ -187,7 +187,7 @@ const char * get_adapter_name(const char *);
int get_hex_addr(char *, u_char *, int); int get_hex_addr(char *, u_char *, int);
const char * format_mac_addr(const Mac_addr *); const char * format_mac_addr(const Mac_addr *);
int parse_ip_prefix(const char *, struct in_addr *); int parse_ip_prefix(const char *, struct in_addr *);
int compress_prefix_list(struct in_addr *, int); size_t compress_prefix_list(struct in_addr *, size_t);
void check_netif_name(const char *); void check_netif_name(const char *);
void sock_error(int); void sock_error(int);

View File

@ -52,6 +52,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <err.h>
#include "atm.h" #include "atm.h"
@ -135,9 +136,10 @@ show_eni_stats(intf, argc, argv)
int argc; int argc;
char **argv; char **argv;
{ {
int buf_len, stats_type; int stats_type;
struct atminfreq air; ssize_t buf_len;
struct air_vinfo_rsp *stats; struct atminfreq air;
struct air_vinfo_rsp *stats;
/* /*
* Get statistics type qualifier * Get statistics type qualifier
@ -153,10 +155,10 @@ show_eni_stats(intf, argc, argv)
} else if (!strcasecmp("driver", argv[0])) { } else if (!strcasecmp("driver", argv[0])) {
stats_type = SHOW_DRIVER; stats_type = SHOW_DRIVER;
} else { } else {
fprintf(stderr, "%s: Illegal or unsupported statistics type\n", prog); errx(1, "Illegal or unsupported statistics type");
exit(1);
} }
argc--; argv++; argc--;
argv++;
/* /*
* Get vendor-specific statistics from the kernel * Get vendor-specific statistics from the kernel
@ -165,22 +167,16 @@ show_eni_stats(intf, argc, argv)
air.air_opcode = AIOCS_INF_VST; air.air_opcode = AIOCS_INF_VST;
strcpy(air.air_vinfo_intf, intf); strcpy(air.air_vinfo_intf, intf);
buf_len = do_info_ioctl(&air, sizeof(struct air_vinfo_rsp) + 1024); buf_len = do_info_ioctl(&air, sizeof(struct air_vinfo_rsp) + 1024);
if (buf_len < 0) { if (buf_len == -1) {
fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
case EOPNOTSUPP: case EOPNOTSUPP:
perror("Internal error"); err(1, "Internal error");
break;
case ENXIO: case ENXIO:
fprintf(stderr, "%s is not an ATM device\n", errx(1, "%s is not an ATM device", intf);
intf);
break;
default: default:
perror("ioctl (AIOCINFO)"); err(1, "ioctl (AIOCINFO)");
break;
} }
exit(1);
} }
stats = (struct air_vinfo_rsp *)(void *)air.air_buf_addr; stats = (struct air_vinfo_rsp *)(void *)air.air_buf_addr;

View File

@ -54,6 +54,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <err.h>
#include "atm.h" #include "atm.h"
@ -151,7 +152,8 @@ show_fore200_stats(intf, argc, argv)
int argc; int argc;
char **argv; char **argv;
{ {
int buf_len, stats_type; int stats_type;
ssize_t buf_len;
struct air_cfg_rsp *cfg; struct air_cfg_rsp *cfg;
struct air_vinfo_rsp *stats; struct air_vinfo_rsp *stats;
struct atminfreq air; struct atminfreq air;
@ -174,8 +176,7 @@ show_fore200_stats(intf, argc, argv)
} else if (!strcasecmp("driver", argv[0])) { } else if (!strcasecmp("driver", argv[0])) {
stats_type = SHOW_DRIVER; stats_type = SHOW_DRIVER;
} else { } else {
fprintf(stderr, "%s: Illegal statistics type\n", prog); errx(1, "Illegal statistics type");
exit(1);
} }
argc--; argv++; argc--; argv++;
@ -186,22 +187,16 @@ show_fore200_stats(intf, argc, argv)
air.air_opcode = AIOCS_INF_CFG; air.air_opcode = AIOCS_INF_CFG;
strcpy(air.air_cfg_intf, intf); strcpy(air.air_cfg_intf, intf);
buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp)); buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp));
if (buf_len < 0) { if (buf_len == -1) {
fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
case EOPNOTSUPP: case EOPNOTSUPP:
perror("Internal error"); err(1, "Internal error");
break;
case ENXIO: case ENXIO:
fprintf(stderr, "%s is not an ATM device\n", errx(1, "%s is not an ATM device", intf);
intf);
break;
default: default:
perror("ioctl (AIOCINFO)"); err(1, "ioctl (AIOCINFO)");
break;
} }
exit(1);
} }
cfg = (struct air_cfg_rsp *)(void *)air.air_buf_addr; cfg = (struct air_cfg_rsp *)(void *)air.air_buf_addr;
@ -212,22 +207,16 @@ show_fore200_stats(intf, argc, argv)
air.air_opcode = AIOCS_INF_VST; air.air_opcode = AIOCS_INF_VST;
strcpy(air.air_vinfo_intf, intf); strcpy(air.air_vinfo_intf, intf);
buf_len = do_info_ioctl(&air, sizeof(struct air_vinfo_rsp) + 1024); buf_len = do_info_ioctl(&air, sizeof(struct air_vinfo_rsp) + 1024);
if (buf_len < 0) { if (buf_len == -1) {
fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
case EOPNOTSUPP: case EOPNOTSUPP:
perror("Internal error"); err(1, "Internal error");
break;
case ENXIO: case ENXIO:
fprintf(stderr, "%s is not an ATM device\n", errx(1, "%s is not an ATM device", intf);
intf);
break;
default: default:
perror("ioctl (AIOCINFO)"); err(1, "ioctl (AIOCINFO)");
break;
} }
exit(1);
} }
stats = (struct air_vinfo_rsp *)(void *)air.air_buf_addr; stats = (struct air_vinfo_rsp *)(void *)air.air_buf_addr;

View File

@ -85,7 +85,7 @@ ip_pvcadd(int argc, char **argv, const struct cmd *cmdp,
{ {
char *cp; char *cp;
char nhelp[128]; char nhelp[128];
int netif_no; u_int netif_no;
u_int i, netif_pref_len; u_int i, netif_pref_len;
/* /*
@ -109,30 +109,24 @@ ip_pvcadd(int argc, char **argv, const struct cmd *cmdp,
bzero(app->aar_pvc_intf, sizeof(app->aar_pvc_intf)); bzero(app->aar_pvc_intf, sizeof(app->aar_pvc_intf));
netif_pref_len = strlen(intp->anp_nif_pref); netif_pref_len = strlen(intp->anp_nif_pref);
cp = &argv[0][netif_pref_len]; cp = &argv[0][netif_pref_len];
netif_no = atoi(cp); netif_no = (u_int)strtoul(cp, NULL, 10);
for (i = 0; i < strlen(cp); i++) { for (i = 0; i < strlen(cp); i++) {
if (cp[i] < '0' || cp[i] > '9') { if (cp[i] < '0' || cp[i] > '9') {
netif_no = -1; netif_no = -1;
break; break;
} }
} }
if ((strlen(argv[0]) > sizeof(app->aar_pvc_intf) - 1) || if (strlen(argv[0]) > sizeof(app->aar_pvc_intf) - 1)
(netif_no < 0)) { errx(1, "Illegal network interface name '%s'", argv[0]);
fprintf(stderr, "%s: Illegal network interface name\n",
prog);
exit(1);
}
if (strncasecmp(intp->anp_nif_pref, argv[0], netif_pref_len) || if (strncasecmp(intp->anp_nif_pref, argv[0], netif_pref_len) ||
strlen (argv[0]) <= netif_pref_len || strlen(argv[0]) <= netif_pref_len || netif_no >= intp->anp_nif_cnt)
netif_no > intp->anp_nif_cnt - 1) { errx(1, "network interface %s is not associated with "
fprintf(stderr, "%s: network interface %s is not associated with interface %s\n", "interface %s", argv[0], intp->anp_intf);
prog,
argv[0],
intp->anp_intf);
exit(1);
}
strcpy(app->aar_pvc_intf, argv[0]); strcpy(app->aar_pvc_intf, argv[0]);
argc--; argv++; argc--;
argv++;
/* /*
* Set PVC destination address * Set PVC destination address

View File

@ -79,7 +79,10 @@ __RCSID("@(#) $FreeBSD$");
void void
set_arpserver(int argc, char **argv, const struct cmd *cmdp __unused) set_arpserver(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int i, len, prefix_len = 0, rc, s; int rc, s;
u_int i;
ssize_t len;
size_t prefix_len = 0;
char *intf; char *intf;
Atm_addr server; Atm_addr server;
struct sockaddr_in *lis; struct sockaddr_in *lis;
@ -138,12 +141,11 @@ set_arpserver(int argc, char **argv, const struct cmd *cmdp __unused)
* with the network interface and insert them into the * with the network interface and insert them into the
* list of permitted LIS prefixes. * list of permitted LIS prefixes.
*/ */
len = sizeof(struct air_netif_rsp);
bzero(&air, sizeof(air)); bzero(&air, sizeof(air));
air.air_opcode = AIOCS_INF_NIF; air.air_opcode = AIOCS_INF_NIF;
strcpy(air.air_int_intf, intf); strcpy(air.air_int_intf, intf);
len = do_info_ioctl(&air, len); len = do_info_ioctl(&air, sizeof(struct air_netif_rsp));
if (len < 0) { if (len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -371,7 +373,8 @@ set_netif(int argc, char **argv, const struct cmd *cmdp __unused)
struct atmsetreq anr; struct atmsetreq anr;
char str[16]; char str[16];
char *cp; char *cp;
int nifs, s; int s;
u_long nifs;
/* /*
* Set IOCTL opcode * Set IOCTL opcode
@ -402,8 +405,9 @@ set_netif(int argc, char **argv, const struct cmd *cmdp __unused)
/* /*
* Validate interface count * Validate interface count
*/ */
nifs = (int) strtol(argv[0], &cp, 0); errno = 0;
if ((*cp != '\0') || (nifs < 0) || (nifs > MAX_NIFS)) { nifs = strtoul(argv[0], &cp, 0);
if (errno != 0 || *cp != '\0' || nifs > MAX_NIFS) {
fprintf(stderr, "%s: Invalid interface count\n", prog); fprintf(stderr, "%s: Invalid interface count\n", prog);
exit(1); exit(1);
} }
@ -412,7 +416,7 @@ set_netif(int argc, char **argv, const struct cmd *cmdp __unused)
/* /*
* Make sure the resulting name won't be too long * Make sure the resulting name won't be too long
*/ */
sprintf(str, "%d", nifs - 1); sprintf(str, "%lu", nifs - 1);
if ((strlen(str) + strlen(anr.asr_nif_pref)) > if ((strlen(str) + strlen(anr.asr_nif_pref)) >
sizeof(anr.asr_nif_intf) - 1) { sizeof(anr.asr_nif_intf) - 1) {
fprintf(stderr, "%s: Network interface prefix too long\n", prog); fprintf(stderr, "%s: Network interface prefix too long\n", prog);

View File

@ -86,7 +86,7 @@ static int arp_compare(const void *, const void *);
void void
show_arp(int argc, char **argv, const struct cmd *cmdp __unused) show_arp(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int buf_len, arp_info_len; size_t arp_info_len;
struct atminfreq air; struct atminfreq air;
struct air_arp_rsp *arp_info, *arp_info_base; struct air_arp_rsp *arp_info, *arp_info_base;
struct sockaddr_in *sain; struct sockaddr_in *sain;
@ -116,11 +116,10 @@ show_arp(int argc, char **argv, const struct cmd *cmdp __unused)
* Get ARP information from the kernel * Get ARP information from the kernel
*/ */
bzero(&air, sizeof(air)); bzero(&air, sizeof(air));
buf_len = sizeof(struct air_arp_rsp) * 10;
air.air_opcode = AIOCS_INF_ARP; air.air_opcode = AIOCS_INF_ARP;
air.air_arp_addr = host_addr.sa; air.air_arp_addr = host_addr.sa;
arp_info_len = do_info_ioctl(&air, buf_len); arp_info_len = do_info_ioctl(&air, sizeof(struct air_arp_rsp) * 10);
if (arp_info_len < 0) { if ((ssize_t)arp_info_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -150,7 +149,7 @@ show_arp(int argc, char **argv, const struct cmd *cmdp __unused)
/* /*
* Print the relevant information * Print the relevant information
*/ */
while (arp_info_len > 0) { while (arp_info_len >= sizeof(struct air_arp_rsp)) {
print_arp_info(arp_info); print_arp_info(arp_info);
arp_info++; arp_info++;
arp_info_len -= sizeof(struct air_arp_rsp); arp_info_len -= sizeof(struct air_arp_rsp);
@ -181,7 +180,7 @@ show_arp(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_arpserv(int argc, char **argv, const struct cmd *cmdp __unused) show_arpserv(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int asrv_info_len, buf_len = sizeof(struct air_asrv_rsp) * 3; size_t buf_len, asrv_info_len;
struct atminfreq air; struct atminfreq air;
struct air_asrv_rsp *asrv_info, *asrv_info_base; struct air_asrv_rsp *asrv_info, *asrv_info_base;
@ -203,8 +202,8 @@ show_arpserv(int argc, char **argv, const struct cmd *cmdp __unused)
* Get interface information from the kernel * Get interface information from the kernel
*/ */
air.air_opcode = AIOCS_INF_ASV; air.air_opcode = AIOCS_INF_ASV;
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air, sizeof(struct air_asrv_rsp) * 3);
if (buf_len < 0) { if ((ssize_t)buf_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -227,14 +226,13 @@ show_arpserv(int argc, char **argv, const struct cmd *cmdp __unused)
*/ */
asrv_info_base = asrv_info = asrv_info_base = asrv_info =
(struct air_asrv_rsp *)(void *)air.air_buf_addr; (struct air_asrv_rsp *)(void *)air.air_buf_addr;
for (; (size_t)buf_len >= sizeof(struct air_asrv_rsp); while (buf_len >= sizeof(struct air_asrv_rsp)) {
asrv_info = (struct air_asrv_rsp *)
((u_long)asrv_info + asrv_info_len),
buf_len -= asrv_info_len) {
print_asrv_info(asrv_info); print_asrv_info(asrv_info);
asrv_info_len = sizeof(struct air_asrv_rsp) + asrv_info_len = sizeof(struct air_asrv_rsp) +
asrv_info->asp_nprefix * asrv_info->asp_nprefix * sizeof(struct in_addr) * 2;
sizeof(struct in_addr) * 2; asrv_info = (struct air_asrv_rsp *)(void *)
((char *)asrv_info + asrv_info_len);
buf_len -= asrv_info_len;
} }
free(asrv_info_base); free(asrv_info_base);
} }
@ -258,7 +256,7 @@ show_arpserv(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_config(int argc, char **argv, const struct cmd *cmdp __unused) show_config(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int buf_len = sizeof(struct air_asrv_rsp) * 3; size_t buf_len;
struct atminfreq air; struct atminfreq air;
struct air_cfg_rsp *cfg_info, *cfg_info_base; struct air_cfg_rsp *cfg_info, *cfg_info_base;
@ -280,8 +278,8 @@ show_config(int argc, char **argv, const struct cmd *cmdp __unused)
* Get configuration information from the kernel * Get configuration information from the kernel
*/ */
air.air_opcode = AIOCS_INF_CFG; air.air_opcode = AIOCS_INF_CFG;
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air, sizeof(struct air_asrv_rsp) * 3);
if (buf_len < 0) { if ((ssize_t)buf_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -304,7 +302,7 @@ show_config(int argc, char **argv, const struct cmd *cmdp __unused)
*/ */
cfg_info_base = cfg_info = cfg_info_base = cfg_info =
(struct air_cfg_rsp *)(void *)air.air_buf_addr; (struct air_cfg_rsp *)(void *)air.air_buf_addr;
for (; (size_t)buf_len >= sizeof(struct air_cfg_rsp); cfg_info++, for (; buf_len >= sizeof(struct air_cfg_rsp); cfg_info++,
buf_len -= sizeof(struct air_cfg_rsp)) { buf_len -= sizeof(struct air_cfg_rsp)) {
print_cfg_info(cfg_info); print_cfg_info(cfg_info);
} }
@ -330,7 +328,7 @@ show_config(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_intf(int argc, char **argv, const struct cmd *cmdp __unused) show_intf(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int buf_len = sizeof(struct air_int_rsp) * 3; size_t buf_len;
struct atminfreq air; struct atminfreq air;
struct air_int_rsp *int_info, *int_info_base; struct air_int_rsp *int_info, *int_info_base;
@ -352,8 +350,8 @@ show_intf(int argc, char **argv, const struct cmd *cmdp __unused)
* Get interface information from the kernel * Get interface information from the kernel
*/ */
air.air_opcode = AIOCS_INF_INT; air.air_opcode = AIOCS_INF_INT;
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air, sizeof(struct air_int_rsp) * 3);
if (buf_len < 0) { if ((ssize_t)buf_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -376,7 +374,7 @@ show_intf(int argc, char **argv, const struct cmd *cmdp __unused)
*/ */
int_info_base = int_info = int_info_base = int_info =
(struct air_int_rsp *)(void *)air.air_buf_addr; (struct air_int_rsp *)(void *)air.air_buf_addr;
for (; (size_t)buf_len >= sizeof(struct air_int_rsp); int_info++, for (; buf_len >= sizeof(struct air_int_rsp); int_info++,
buf_len -= sizeof(struct air_int_rsp)) { buf_len -= sizeof(struct air_int_rsp)) {
print_intf_info(int_info); print_intf_info(int_info);
} }
@ -402,7 +400,8 @@ show_intf(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_ip_vcc(int argc, char **argv, const struct cmd *cmdp __unused) show_ip_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int buf_len, ip_info_len, rc; int rc;
size_t ip_info_len;
char *if_name = (char *)0; char *if_name = (char *)0;
struct atminfreq air; struct atminfreq air;
struct air_ip_vcc_rsp *ip_info, *ip_info_base; struct air_ip_vcc_rsp *ip_info, *ip_info_base;
@ -459,11 +458,10 @@ show_ip_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
/* /*
* Get IP map information from the kernel * Get IP map information from the kernel
*/ */
buf_len = sizeof(struct air_ip_vcc_rsp) * 10;
air.air_opcode = AIOCS_INF_IPM; air.air_opcode = AIOCS_INF_IPM;
air.air_ip_addr = host_addr.sa; air.air_ip_addr = host_addr.sa;
ip_info_len = do_info_ioctl(&air, buf_len); ip_info_len = do_info_ioctl(&air, sizeof(struct air_ip_vcc_rsp) * 10);
if (ip_info_len < 0) { if ((ssize_t)ip_info_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -493,7 +491,7 @@ show_ip_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
/* /*
* Print the relevant information * Print the relevant information
*/ */
while (ip_info_len>0) { while (ip_info_len >= sizeof(struct air_ip_vcc_rsp)) {
if (!if_name || !strcmp(if_name, ip_info->aip_intf)) { if (!if_name || !strcmp(if_name, ip_info->aip_intf)) {
print_ip_vcc_info(ip_info); print_ip_vcc_info(ip_info);
} }
@ -505,7 +503,6 @@ show_ip_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
* Release the information from the kernel * Release the information from the kernel
*/ */
free(ip_info_base); free(ip_info_base);
} }
@ -527,7 +524,7 @@ show_ip_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_netif(int argc, char **argv, const struct cmd *cmdp __unused) show_netif(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int buf_len = sizeof(struct air_netif_rsp) * 3; size_t buf_len;
struct atminfreq air; struct atminfreq air;
struct air_netif_rsp *int_info, *int_info_base; struct air_netif_rsp *int_info, *int_info_base;
@ -548,8 +545,8 @@ show_netif(int argc, char **argv, const struct cmd *cmdp __unused)
* Get network interface information from the kernel * Get network interface information from the kernel
*/ */
air.air_opcode = AIOCS_INF_NIF; air.air_opcode = AIOCS_INF_NIF;
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air, sizeof(struct air_netif_rsp) * 3);
if (buf_len < 0) { if ((ssize_t)buf_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -572,7 +569,7 @@ show_netif(int argc, char **argv, const struct cmd *cmdp __unused)
*/ */
int_info_base = int_info = int_info_base = int_info =
(struct air_netif_rsp *) air.air_buf_addr; (struct air_netif_rsp *) air.air_buf_addr;
for (; (size_t)buf_len >= sizeof(struct air_netif_rsp); int_info++, for (; buf_len >= sizeof(struct air_netif_rsp); int_info++,
buf_len -= sizeof(struct air_netif_rsp)) { buf_len -= sizeof(struct air_netif_rsp)) {
print_netif_info(int_info); print_netif_info(int_info);
} }
@ -598,7 +595,7 @@ show_netif(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_intf_stats(int argc, char **argv, const struct cmd *cmdp __unused) show_intf_stats(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int buf_len; size_t buf_len;
char intf[IFNAMSIZ]; char intf[IFNAMSIZ];
struct atminfreq air; struct atminfreq air;
struct air_phy_stat_rsp *pstat_info, *pstat_info_base; struct air_phy_stat_rsp *pstat_info, *pstat_info_base;
@ -626,11 +623,10 @@ show_intf_stats(int argc, char **argv, const struct cmd *cmdp __unused)
/* /*
* Get adapter configuration information * Get adapter configuration information
*/ */
buf_len = sizeof(struct air_cfg_rsp);
air.air_opcode = AIOCS_INF_CFG; air.air_opcode = AIOCS_INF_CFG;
strcpy(air.air_cfg_intf, intf); strcpy(air.air_cfg_intf, intf);
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp));
if (buf_len < 0) { if ((ssize_t)buf_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -670,11 +666,11 @@ show_intf_stats(int argc, char **argv, const struct cmd *cmdp __unused)
/* /*
* Get generic interface statistics * Get generic interface statistics
*/ */
buf_len = sizeof(struct air_phy_stat_rsp) * 3;
air.air_opcode = AIOCS_INF_PIS; air.air_opcode = AIOCS_INF_PIS;
strcpy(air.air_physt_intf, intf); strcpy(air.air_physt_intf, intf);
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air,
if (buf_len < 0) { sizeof(struct air_phy_stat_rsp) * 3);
if ((ssize_t)buf_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -697,7 +693,7 @@ show_intf_stats(int argc, char **argv, const struct cmd *cmdp __unused)
*/ */
pstat_info_base = pstat_info = (struct air_phy_stat_rsp *) pstat_info_base = pstat_info = (struct air_phy_stat_rsp *)
(void *)air.air_buf_addr; (void *)air.air_buf_addr;
for (; (size_t)buf_len >= sizeof(struct air_phy_stat_rsp); for (; buf_len >= sizeof(struct air_phy_stat_rsp);
pstat_info++, pstat_info++,
buf_len-=sizeof(struct air_phy_stat_rsp)) { buf_len-=sizeof(struct air_phy_stat_rsp)) {
print_intf_stats(pstat_info); print_intf_stats(pstat_info);
@ -725,7 +721,7 @@ show_intf_stats(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_vcc_stats(int argc, char **argv, const struct cmd *cmdp __unused) show_vcc_stats(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int vcc_info_len; size_t vcc_info_len;
int vpi = -1, vci = -1; int vpi = -1, vci = -1;
char *cp, *intf = NULL; char *cp, *intf = NULL;
struct air_vcc_rsp *vcc_info, *vcc_info_base; struct air_vcc_rsp *vcc_info, *vcc_info_base;
@ -774,7 +770,7 @@ show_vcc_stats(int argc, char **argv, const struct cmd *cmdp __unused)
vcc_info_len = get_vcc_info(intf, &vcc_info); vcc_info_len = get_vcc_info(intf, &vcc_info);
if (vcc_info_len == 0) if (vcc_info_len == 0)
exit(1); exit(1);
else if (vcc_info_len < 0) { else if ((ssize_t)vcc_info_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -803,7 +799,7 @@ show_vcc_stats(int argc, char **argv, const struct cmd *cmdp __unused)
* Display the VCC statistics * Display the VCC statistics
*/ */
vcc_info_base = vcc_info; vcc_info_base = vcc_info;
for (; (size_t)vcc_info_len >= sizeof(struct air_vcc_rsp); for (; vcc_info_len >= sizeof(struct air_vcc_rsp);
vcc_info_len-=sizeof(struct air_vcc_rsp), vcc_info_len-=sizeof(struct air_vcc_rsp),
vcc_info++) { vcc_info++) {
if (vpi != -1 && vcc_info->avp_vpi != vpi) if (vpi != -1 && vcc_info->avp_vpi != vpi)
@ -834,7 +830,7 @@ show_vcc_stats(int argc, char **argv, const struct cmd *cmdp __unused)
void void
show_vcc(int argc, char **argv, const struct cmd *cmdp __unused) show_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
{ {
int vcc_info_len; size_t vcc_info_len;
int vpi = -1, vci = -1, show_pvc = 0, show_svc = 0; int vpi = -1, vci = -1, show_pvc = 0, show_svc = 0;
char *cp, *intf = NULL; char *cp, *intf = NULL;
struct air_vcc_rsp *vcc_info, *vcc_info_base; struct air_vcc_rsp *vcc_info, *vcc_info_base;
@ -890,7 +886,7 @@ show_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
vcc_info_len = get_vcc_info(intf, &vcc_info); vcc_info_len = get_vcc_info(intf, &vcc_info);
if (vcc_info_len == 0) if (vcc_info_len == 0)
exit(1); exit(1);
else if (vcc_info_len < 0) { else if ((ssize_t)vcc_info_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -919,7 +915,7 @@ show_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
* Display the VCC information * Display the VCC information
*/ */
vcc_info_base = vcc_info; vcc_info_base = vcc_info;
for (; (size_t)vcc_info_len >= sizeof(struct air_vcc_rsp); for (; vcc_info_len >= sizeof(struct air_vcc_rsp);
vcc_info_len-=sizeof(struct air_vcc_rsp), vcc_info_len-=sizeof(struct air_vcc_rsp),
vcc_info++) { vcc_info++) {
if (vpi != -1 && vcc_info->avp_vpi != vpi) if (vpi != -1 && vcc_info->avp_vpi != vpi)
@ -955,7 +951,7 @@ void
show_version(int argc __unused, char **argv __unused, show_version(int argc __unused, char **argv __unused,
const struct cmd *cmdp __unused) const struct cmd *cmdp __unused)
{ {
int buf_len = sizeof(struct air_version_rsp); size_t buf_len;
struct atminfreq air; struct atminfreq air;
struct air_version_rsp *ver_info, *ver_info_base; struct air_version_rsp *ver_info, *ver_info_base;
@ -963,8 +959,8 @@ show_version(int argc __unused, char **argv __unused,
* Get network interface information from the kernel * Get network interface information from the kernel
*/ */
air.air_opcode = AIOCS_INF_VER; air.air_opcode = AIOCS_INF_VER;
buf_len = do_info_ioctl(&air, buf_len); buf_len = do_info_ioctl(&air, sizeof(struct air_version_rsp));
if (buf_len < 0) { if ((ssize_t)buf_len == -1) {
fprintf(stderr, "%s: ", prog); fprintf(stderr, "%s: ", prog);
switch (errno) { switch (errno) {
case ENOPROTOOPT: case ENOPROTOOPT:
@ -986,7 +982,7 @@ show_version(int argc __unused, char **argv __unused,
*/ */
ver_info_base = ver_info = ver_info_base = ver_info =
(struct air_version_rsp *)(void *)air.air_buf_addr; (struct air_version_rsp *)(void *)air.air_buf_addr;
for (; (size_t)buf_len >= sizeof(struct air_version_rsp); ver_info++, for (; buf_len >= sizeof(struct air_version_rsp); ver_info++,
buf_len -= sizeof(struct air_version_rsp)) { buf_len -= sizeof(struct air_version_rsp)) {
print_version_info(ver_info); print_version_info(ver_info);
} }

View File

@ -251,7 +251,7 @@ get_bus_type(int bus)
const char * const char *
get_adapter_name(const char *intf) get_adapter_name(const char *intf)
{ {
int buf_len; size_t buf_len;
struct atminfreq air; struct atminfreq air;
struct air_cfg_rsp *cfg; struct air_cfg_rsp *cfg;
static char name[256]; static char name[256];
@ -268,7 +268,7 @@ get_adapter_name(const char *intf)
air.air_opcode = AIOCS_INF_CFG; air.air_opcode = AIOCS_INF_CFG;
strcpy(air.air_cfg_intf, intf); strcpy(air.air_cfg_intf, intf);
buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp)); buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp));
if ((size_t)buf_len < sizeof(struct air_cfg_rsp)) if (buf_len < sizeof(struct air_cfg_rsp))
return("-"); return("-");
cfg = (struct air_cfg_rsp *)(void *)air.air_buf_addr; cfg = (struct air_cfg_rsp *)(void *)air.air_buf_addr;
@ -440,10 +440,10 @@ parse_ip_prefix(const char *cp, struct in_addr *op)
* length of compressed list * length of compressed list
* *
*/ */
int size_t
compress_prefix_list(struct in_addr *ipp, int ilen) compress_prefix_list(struct in_addr *ipp, size_t ilen)
{ {
int i, j, n; u_int i, j, n;
struct in_addr *ip1, *ip2, *m1, *m2; struct in_addr *ip1, *ip2, *m1, *m2;
/* /*
@ -557,7 +557,7 @@ check_netif_name(const char *nif)
/* /*
* Look up the name in the kernel * Look up the name in the kernel
*/ */
rc = verify_nif_name(__DECONST(char *, nif)); /* XXX */ rc = verify_nif_name(nif);
/* /*
* Check the result * Check the result