Ejemplo n.º 1
0
static void
list_scan(prop_dictionary_t env)
{
	u_int8_t buf[64*1024 - 1];
	struct ieee80211req ireq;
	char ssid[IEEE80211_NWID_LEN+1];
	const u_int8_t *cp;
	int len, ssidmax;
	const struct ieee80211req_scan_result *sr;

	memset(&ireq, 0, sizeof(ireq));
	ireq.i_type = IEEE80211_IOC_SCAN_RESULTS;
	ireq.i_data = buf;
	ireq.i_len = sizeof(buf);
	if (direct_ioctl(env, SIOCG80211, &ireq) < 0)
		errx(EXIT_FAILURE, "unable to get scan results");
	len = ireq.i_len;
	if (len < (int)sizeof(*sr))
		return;

	ssidmax = calc_len(buf, len);

	printf("%-*.*s  %-17.17s  %4s %4s  %-7s %3s %4s\n"
		, ssidmax, ssidmax, "SSID"
		, "BSSID"
		, "CHAN"
		, "RATE"
		, "S:N"
		, "INT"
		, "CAPS"
	);
	cp = buf;
	while (len >= (int)sizeof(*sr)) {
		const uint8_t *vp;

		sr = (const struct ieee80211req_scan_result *) cp;
		vp = (const u_int8_t *)(sr+1);
		(void)copy_essid(ssid, sizeof(ssid), vp, sr->isr_ssid_len);
		printf("%-*.*s  %s  %3d  %3dM %3d:%-3d  %3d %-4.4s"
			, ssidmax, ssidmax, ssid
			, ether_ntoa((const struct ether_addr *) sr->isr_bssid)
			, ieee80211_mhz2ieee(sr->isr_freq, sr->isr_flags)
			, getmaxrate(sr->isr_rates, sr->isr_nrates)
			, sr->isr_rssi, sr->isr_noise
			, sr->isr_intval
			, getcaps(sr->isr_capinfo)
		);
		printies(vp + sr->isr_ssid_len, sr->isr_ie_len, 24);
		printf("\n");
		cp += sr->isr_len, len -= sr->isr_len;
	}
}
Ejemplo n.º 2
0
static void
list_scan(const char *ifname)
{
	uint8_t buf[24 * 1024];
	char ssid[14];
	uint8_t *cp;
	int len;

	len = get80211priv(ifname, IEEE80211_IOCTL_SCAN_RESULTS,
		buf, sizeof(buf));
	if (len == -1)
		errx(1, "unable to get scan results");
	if (len < sizeof(struct ieee80211req_scan_result))
		return;

	printf("%-14.14s  %-17.17s  %4s %4s  %-5s %3s %4s\n",
		"SSID",
		"BSSID",
		"CHAN",
		"RATE",
		"S:N",
		"INT",
		"CAPS");
	cp = buf;
	do {
		struct ieee80211req_scan_result *sr;
		uint8_t *vp;

		sr = (struct ieee80211req_scan_result *) cp;
		vp = (u_int8_t *)(sr+1);
		printf("%-14.*s  %s  %3d  %3dM %2d:%-2d  %3d %-4.4s",
			copy_essid(ssid, sizeof(ssid), vp, sr->isr_ssid_len),
			ssid,
			ieee80211_ntoa(sr->isr_bssid),
			ieee80211_mhz2ieee(sr->isr_freq),
			getmaxrate(sr->isr_rates, sr->isr_nrates),
			(int8_t) sr->isr_rssi, sr->isr_noise,
			sr->isr_intval,
			getcaps(sr->isr_capinfo));
		printies(vp + sr->isr_ssid_len, sr->isr_ie_len, 24);
		printf("\n");
		cp += sr->isr_len, len -= sr->isr_len;
	} while (len >= sizeof(struct ieee80211req_scan_result));
}
Ejemplo n.º 3
0
void
getarg(struct move *mm, char ***arg)
{
	char  **s;

	/* process arguments here.  dashes are ignored, nbrw are ignored if
	 * the game is being recovered */

	s = *arg;
	while (*s && s[0][0] == '-') {
		switch (s[0][1]) {

			/* don't ask if rules or instructions needed */
		case 'n':
			if (rflag)
				break;
			aflag = 0;
			args[acnt++] = 'n';
			break;

			/* player is both red and white */
		case 'b':
			if (rflag)
				break;
			pnum = 0;
			aflag = 0;
			args[acnt++] = 'b';
			break;

			/* player is red */
		case 'r':
			if (rflag)
				break;
			pnum = -1;
			aflag = 0;
			args[acnt++] = 'r';
			break;

			/* player is white */
		case 'w':
			if (rflag)
				break;
			pnum = 1;
			aflag = 0;
			args[acnt++] = 'w';
			break;

			/* print board after move according to following
			 * character */
		case 'p':
			if (s[0][2] != 'r' && s[0][2] != 'w' && s[0][2] != 'b')
				break;
			args[acnt++] = 'p';
			args[acnt++] = s[0][2];
			if (s[0][2] == 'r')
				bflag = 1;
			if (s[0][2] == 'w')
				bflag = -1;
			if (s[0][2] == 'b')
				bflag = 0;
			break;

		case 't':
			if (s[0][2] == '\0') {	/* get terminal caps */
				s++;
				tflag = getcaps(*s);
			} else
				tflag = getcaps(&s[0][2]);
			break;

		case 's':
			s++;
			/* recover file */
			if (s[0] == NULL) {
				writel("No save file named\n");
				getout(0);
			} else
				recover(mm, s[0]);
			break;
		}
		s++;
	}
	if (s[0] != 0)
		recover(mm, s[0]);
}
Ejemplo n.º 4
0
int main(int argc UNUSED, char **argv)
{
    int i;

    // revoke setgid privileges
    setregid(getgid(), getgid());

    signal(SIGINT, getout);
    if (tcgetattr(0, &old) == -1)	// get old tty mode
	errexit("teachgammon(gtty)");
    noech = old;
    noech.c_lflag &= ~ECHO;
    bg_raw = noech;
    bg_raw.c_lflag &= ~ICANON; // set up modes
    ospeed = cfgetospeed(&old);	// for termlib
    tflag = getcaps(getenv("TERM"));
    while (*++argv != 0)
	getarg(&argv);
    if (tflag) {
	noech.c_oflag &= ~ONLCR;
	bg_raw.c_oflag &= ~ONLCR;
	clear();
    }
    text(hello);
    text(list);
    i = text(contin);
    if (i == 0)
	i = 2;
    init();
    while (i)
	switch (i) {
	    case 1:
		leave();

	    case 2:
		if ((i = text(intro1)) != 0)
		    break;
		wrboard();
		if ((i = text(intro2)) != 0)
		    break;

	    case 3:
		if ((i = text(moves)) != 0)
		    break;

	    case 4:
		if ((i = text(removepiece)) != 0)
		    break;

	    case 5:
		if ((i = text(hits)) != 0)
		    break;

	    case 6:
		if ((i = text(endgame)) != 0)
		    break;

	    case 7:
		if ((i = text(doubl)) != 0)
		    break;

	    case 8:
		if ((i = text(stragy)) != 0)
		    break;

	    case 9:
		if ((i = text(prog)) != 0)
		    break;

	    case 10:
		if ((i = text(lastch)) != 0)
		    break;
	}
    tutor();
    // NOTREACHED
    return (0);
}
Ejemplo n.º 5
0
short iott_open(io_log_name *dev_name, mval *pp, int fd, mval *mspace, int4 timeout)
{
	unsigned char	ch;
	d_tt_struct	*tt_ptr;
	io_desc		*ioptr;
	int		status;
	int		save_errno;
	int		p_offset;

	error_def(ERR_NOTERMENV);
	error_def(ERR_NOTERMENTRY);
	error_def(ERR_NOTERMINFODB);
	error_def(ERR_TCGETATTR);

	ioptr = dev_name->iod;
	if (ioptr->state == dev_never_opened)
	{
		dev_name->iod->dev_sp = (void *)malloc(sizeof(d_tt_struct) + sizeof(struct termios));
		memset(dev_name->iod->dev_sp, 0, sizeof(d_tt_struct) + sizeof(struct termios));
		tt_ptr = (d_tt_struct *)dev_name->iod->dev_sp;
		tt_ptr->ttio_struct = (struct termios *)((char *)tt_ptr + sizeof(d_tt_struct));
		tt_ptr->in_buf_sz = TTDEF_BUF_SZ;
		tt_ptr->enbld_outofbands.x = 0;
		tt_ptr->term_ctrl &= (~TRM_NOECHO);
		tt_ptr->mask_term.mask[0] = TERM_MSK;
		tt_ptr->ttybuff = (char *)malloc(IOTT_BUFF_LEN);
	}
	tt_ptr = (d_tt_struct *)dev_name->iod->dev_sp;
	p_offset = 0;
	while (*(pp->str.addr + p_offset) != iop_eol)
	{
		if ((ch = *(pp->str.addr + p_offset++)) == iop_exception)
		{
			ioptr->error_handler.len = *(pp->str.addr + p_offset);
			ioptr->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
			s2pool(&ioptr->error_handler);
			break;
		} else  if (ch == iop_canonical)
			tt_ptr->canonical = TRUE;
		else  if (ch == iop_nocanonical)
			tt_ptr->canonical = FALSE;
		p_offset += ((IOP_VAR_SIZE == io_params_size[ch]) ?
			(unsigned char)*(pp->str.addr + p_offset) + 1 : io_params_size[ch]);
	}
	if (ioptr->state != dev_open)
	{
		int	status;
		char	*env_term;

		assert(fd >= 0);
		tt_ptr->fildes = fd;
		status = tcgetattr(tt_ptr->fildes, tt_ptr->ttio_struct);
		if (0 != status)
		{
			save_errno = errno;
			if (gtm_isanlp(tt_ptr->fildes) == 0)
				rts_error(VARLSTCNT(4) ERR_TCGETATTR, 1, tt_ptr->fildes, save_errno);
		}
		if (run_time)
			setterm(ioptr);
		status = getcaps(tt_ptr->fildes);
		if (1 != status)
		{
			if (status == 0)
			{
				env_term = GETENV("TERM");
				if (!env_term)
				{
					rts_error(VARLSTCNT(1) ERR_NOTERMENV);
					env_term = "unknown";
				}
				rts_error(VARLSTCNT(4) ERR_NOTERMENTRY, 2, LEN_AND_STR(env_term));
			} else
				rts_error(VARLSTCNT(1) ERR_NOTERMINFODB);
		}
		ioptr->width = COLUMNS;
		ioptr->length = GTM_LINES;
		ioptr->wrap = (0 == AUTO_RIGHT_MARGIN) ? FALSE : TRUE; /* defensive programming; till we are absolutely, positively
									* certain that there are no uses of wrap == TRUE */
		ioptr->state = dev_open;
		tt_ptr->tbuffp = tt_ptr->ttybuff;	/* Buffer is now empty */
	}
	return TRUE;
}
Ejemplo n.º 6
0
static void
list_scan(AP_IW_CHANSCAN_RESULT_T *cfg, const char *ifname)
{
	uint8_t  buf[48*1024];
	uint8_t  *cp = NULL;
	int      len = 0;
    int      count = 0;  //to count results.
    int      iTemp = 0;
    AP_IW_CHANSCAN_RESULT_ENTRY *entry;
    struct ieee80211req_scan_result *sr;
    uint8_t *vp;

	len = get80211priv(ifname, IEEE80211_IOCTL_SCAN_RESULTS,
			    buf, sizeof(buf));
    
	if (len == -1)
	{
		RTN_LOG("IOCTL error,unable to get scan results");
        return;
	}    
    
	if (len < sizeof(struct ieee80211req_scan_result))
	{
        RTN_LOG("get scan results len %d < struct", len);
        return;
	}
    
	cp = buf;
	do {
		sr = (struct ieee80211req_scan_result *) cp;
		vp = (u_int8_t *)(sr+1);

//        RTN_LOG("Get assignchan=%d, match chan=%d", cfg->assignChan, sr->isr_freq);

        if(cfg->assignChan == 0 || cfg->assignChan == sr->isr_freq)
        {                  
            entry = &cfg->scan_entry[count];        

            //set ssid
            iTemp = copy_essid((char *)entry->ssid, 32, vp, sr->isr_ssid_len);
            entry->ssid[iTemp] = '\0';

            //set bssid
            memcpy(entry->bssid, sr->isr_bssid, 6);
            
            //set chan
            entry->chan = sr->isr_freq;
                   
            //set maxrate
            entry->maxrate =  getmaxrate(sr->isr_rates, sr->isr_nrates);
            
            //set rssi
            entry->rssi = sr->isr_rssi;
            
            //set noise
            entry->noise = sr->isr_noise;

            //set intval
            entry->intval = sr->isr_intval;

            //set caps
            getcaps(sr->isr_capinfo, (char *)entry->caps);

            //set ies,max = 96/4-1=23
            getIEs(vp + sr->isr_ssid_len, sr->isr_ie_len, 23, entry->ieinfo);

            count++;

        }       
        
		cp += sr->isr_len, len -= sr->isr_len;               
	} while ((len >= sizeof(struct ieee80211req_scan_result)) && (count < AP_IW_CHANSCAN_MAX_RESULT_NUM));

    cfg->num = count;
}
Ejemplo n.º 7
0
static void
list_stations(const char *ifname)
{
	uint8_t buf[24*1024];
	struct iwreq iwr;
	uint8_t *cp;
	int s, len;

	s = socket(AF_INET, SOCK_DGRAM, 0);
	if (s < 0)
		err(1, "socket(SOCK_DGRAM)");

	(void) memset(&iwr, 0, sizeof(iwr));
	(void) strncpy(iwr.ifr_name, ifname, sizeof(iwr.ifr_name));
	iwr.u.data.pointer = (void *) buf;
	iwr.u.data.length = sizeof(buf);
	if (ioctl(s, IEEE80211_IOCTL_STA_INFO, &iwr) < 0)
		errx(1, "unable to get station information");
	len = iwr.u.data.length;
	if (len < sizeof(struct ieee80211req_sta_info))
		return;
	close(s);

	printf("%-17.17s %4s %4s %4s %4s %4s %4s %6s %6s %4s %5s %3s %8s %8s\n",
		"ADDR",
		"AID",
		"CHAN",
		"RATE",
		"RSSI",
		"DBM",
		"IDLE",
		"TXSEQ",
		"RXSEQ",
		"CAPS",
		"ACAPS",
		"ERP",
		"STATE",
		"MODE");
	cp = buf;
	do {
		struct ieee80211req_sta_info *si;
		uint8_t *vp;

		si = (struct ieee80211req_sta_info *) cp;
		vp = (u_int8_t *)(si+1);
		printf("%s %4u %4d %3dM %4d %4d %4d %6d %6d %-4.4s %-5.5s %3x %8x %8s",
			ieee80211_ntoa(si->isi_macaddr),
			IEEE80211_AID(si->isi_associd),
			ieee80211_mhz2ieee(si->isi_freq),
			(si->isi_rates[si->isi_txrate] & IEEE80211_RATE_VAL) / 2,
			si->isi_rssi,
			rssi2dbm(si->isi_rssi),
			si->isi_inact,
			si->isi_txseqs[0],
			si->isi_rxseqs[0],
		        getcaps(si->isi_capinfo),
		        getathcaps(si->isi_athflags),
			si->isi_erp,
			si->isi_state,
			getstamode(si->isi_opmode));
		printies(vp, si->isi_ie_len, 24);
		printf("\n");
		if (si->isi_uapsd) {
			printf("                   UAPSD QoSInfo: 0x%02x, ",
				si->isi_uapsd);
			printf("(VO,VI,BE,BK) = (%d,%d,%d,%d), MaxSpLimit = %s\n",
				   WME_UAPSD_AC_ENABLED(WME_AC_VO, si->isi_uapsd) ? 1 : 0,
				   WME_UAPSD_AC_ENABLED(WME_AC_VI, si->isi_uapsd) ? 1 : 0,
				   WME_UAPSD_AC_ENABLED(WME_AC_BE, si->isi_uapsd) ? 1 : 0,
				   WME_UAPSD_AC_ENABLED(WME_AC_BK, si->isi_uapsd) ? 1 : 0,
				   WME_UAPSD_MAXSP(si->isi_uapsd) == 1 ? "2" :
				   WME_UAPSD_MAXSP(si->isi_uapsd) == 2 ? "4" :
				   WME_UAPSD_MAXSP(si->isi_uapsd) == 3 ? "6" : "NoLimit");
		}
		cp += si->isi_len;
		len -= si->isi_len;
	} while (len >= sizeof(struct ieee80211req_sta_info));
}
Ejemplo n.º 8
0
int
main(int argc, char **argv)
{
	int i;

	/* revoke privs */
	setgid(getgid());

	acnt = 1;
	signal(SIGINT, getout);
	if (tcgetattr(0, &tty) == -1)			/* get old tty mode */
		errexit("teachgammon(tcgetattr)");
	old = tty.c_lflag;
	raw = ((noech = old & ~ECHO) & ~ICANON);	/* set up modes */
	ospeed = cfgetospeed(&tty);			/* for termlib */
	tflag = getcaps(getenv("TERM"));
	getarg(argc, argv);
	if (tflag) {
		noech &= ~(ICRNL | OXTABS);
		raw &= ~(ICRNL | OXTABS);
		clear();
	}
	text(hello);
	text(list);
	i = text(contin);
	if (i == 0)
		i = 2;
	init();
	while (i)
		switch (i) {
		case 1:
			leave();

		case 2:
			if ((i = text(intro1)) != 0)
				break;
			wrboard();
			if ((i = text(intro2)) != 0)
				break;

		case 3:
			if ((i = text(moves)) != 0)
				break;

		case 4:
			if ((i = text(remove)) != 0)
				break;

		case 5:
			if ((i = text(hits)) != 0)
				break;

		case 6:
			if ((i = text(endgame)) != 0)
				break;

		case 7:
			if ((i = text(doubl)) != 0)
				break;

		case 8:
			if ((i = text(stragy)) != 0)
				break;

		case 9:
			if ((i = text(prog)) != 0)
				break;

		case 10:
			if ((i = text(lastch)) != 0)
				break;
		}
	tutor();
	/* NOTREACHED */
	return (0);
}