Exemplo n.º 1
0
static void
scan_and_wait(prop_dictionary_t env)
{
	int sroute;

	sroute = prog_socket(PF_ROUTE, SOCK_RAW, 0);
	if (sroute < 0) {
		warn("socket(PF_ROUTE,SOCK_RAW)");
		return;
	}
	/* NB: only root can trigger a scan so ignore errors */
	if (set80211(env, IEEE80211_IOC_SCAN_REQ, 0, 0, NULL) >= 0) {
		char buf[2048];
		struct if_announcemsghdr *ifan;
		struct rt_msghdr *rtm;

		do {
			if (prog_read(sroute, buf, sizeof(buf)) < 0) {
				warn("read(PF_ROUTE)");
				break;
			}
			rtm = (struct rt_msghdr *) buf;
			if (rtm->rtm_version != RTM_VERSION)
				break;
			ifan = (struct if_announcemsghdr *) rtm;
		} while (rtm->rtm_type != RTM_IEEE80211 ||
		    ifan->ifan_what != RTM_IEEE80211_SCAN);
	}
	prog_close(sroute);
}
Exemplo n.º 2
0
static int
getsocket(void)
{
	int s;
	s = prog_socket(PF_ROUTE, SOCK_RAW, 0);
	if (s < 0)
		err(1, "socket");
	return s;
}
Exemplo n.º 3
0
Arquivo: ndp.c Projeto: ryo/netbsd-src
static void
getsocket(void)
{
	if (my_s < 0) {
		my_s = prog_socket(PF_ROUTE, SOCK_RAW, 0);
		if (my_s < 0)
			err(1, "socket");
	}
}
int
getsock(int naf)
{
	static int oaf = -1, s;

	if (oaf == naf || (oaf != -1 && naf == AF_UNSPEC))
		return s;

	if (oaf != -1)
		prog_close(s);

	if (naf == AF_UNSPEC)
		naf = AF_INET;

	s = prog_socket(naf, SOCK_DGRAM, 0);
	if (s == -1)
		oaf = -1;
	else
		oaf = naf;
	return s;
}