Esempio n. 1
0
int
loaddevconf(Dev *d, int n)
{
	uchar *buf;
	int nr;
	int type;

	if(n >= nelem(d->usb->conf)){
		werrstr("loaddevconf: bug: out of configurations in device");
		fprint(2, "%s: %r\n", argv0);
		return -1;
	}
	buf = emallocz(Maxdevconf, 0);
	type = Rd2h|Rstd|Rdev;
	nr = usbcmd(d, type, Rgetdesc, Dconf<<8|n, 0, buf, Maxdevconf);
	if(nr < Dconflen){
		free(buf);
		return -1;
	}
	if(d->usb->conf[n] == nil)
		d->usb->conf[n] = emallocz(sizeof(Conf), 1);
	nr = parseconf(d->usb, d->usb->conf[n], buf, nr);
	free(buf);
	return nr;
}
Esempio n. 2
0
int
main(int argc, char **argv)
{
	int		opt, status, sock, count;
	char		*conf_filename;
	ipv6das_cmd_t	ipv6das_cmd = IPV6DAS_PRINTPOLICY;
	ip6_asp_t	*policy_table;

	myname = *argv;

	(void) setlocale(LC_ALL, "");

#if	!defined(TEXT_DOMAIN)	/* Should be defined by cc -D */
#define	TEXT_DOMAIN	"SYS_TEST"
#endif

	(void) textdomain(TEXT_DOMAIN);

	while ((opt = getopt(argc, argv, "df:")) != EOF)
		switch (opt) {
		case 'd':
			ipv6das_cmd = IPV6DAS_SETDEFAULT;
			break;
		case 'f':
			conf_filename = optarg;
			ipv6das_cmd = IPV6DAS_SETPOLICY;
			break;
		default:
			usage();
			return (EXIT_FAILURE);
		}
	if (argc > optind) {
		/* shouldn't be any extra args */
		usage();
		return (EXIT_FAILURE);
	}

	/* Open a socket that we can use to send ioctls down to IP. */
	if ((sock = socket(PF_INET6, SOCK_DGRAM, 0)) == -1) {
		perror("socket");
		return (EXIT_FAILURE);
	}

	switch (ipv6das_cmd) {
	case IPV6DAS_SETPOLICY:
		if ((count = parseconf(conf_filename, &policy_table)) <= 0)
			return (EXIT_FAILURE);
		status = setpolicy(sock, policy_table, count);
		free(policy_table);
		break;
	case IPV6DAS_SETDEFAULT:
		status = setpolicy(sock, NULL, 0);
		break;
	case IPV6DAS_PRINTPOLICY:
	default:
		status = printpolicy(sock);
		break;
	}

	(void) close(sock);
	return (status);
}