? \
(((struct sockaddr_in *)(void *)sa)->sin_addr).s_addr : 0
-static int a_fd = -1;
static int r_fd = -1;
int
-init_socket(void)
+init_sockets(void)
{
- if ((a_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+ if ((socket_afnet = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
return -1;
- set_cloexec(a_fd);
+ set_cloexec(socket_afnet);
if ((r_fd = socket(PF_ROUTE, SOCK_RAW, 0)) == -1)
return -1;
set_cloexec(r_fd);
strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
memset(&nwid, 0, sizeof(nwid));
ifr.ifr_data = (void *)&nwid;
- if (ioctl(a_fd, SIOCG80211NWID, &ifr) == 0) {
+ if (ioctl(socket_afnet, SIOCG80211NWID, &ifr) == 0) {
retval = nwid.i_len;
memcpy(ssid, nwid.i_nwid, nwid.i_len);
ssid[nwid.i_len] = '\0';
ireq.i_type = IEEE80211_IOC_SSID;
ireq.i_val = -1;
ireq.i_data = &nwid;
- if (ioctl(a_fd, SIOCG80211, &ireq) == 0) {
+ if (ioctl(socket_afnet, SIOCG80211, &ireq) == 0) {
retval = ireq.i_len;
memcpy(ssid, nwid, ireq.i_len);
ssid[ireq.i_len] = '\0';
#undef ADDADDR
if (action < 0)
- retval = ioctl(a_fd, SIOCDIFADDR, &ifa);
+ retval = ioctl(socket_afnet, SIOCDIFADDR, &ifa);
else
- retval = ioctl(a_fd, SIOCAIFADDR, &ifa);
+ retval = ioctl(socket_afnet, SIOCAIFADDR, &ifa);
return retval;
}
static char hwaddr_buffer[(HWADDR_LEN * 3) + 1];
+int socket_afnet = -1;
+
int
inet_ntocidr(struct in_addr address)
{
struct interface *
init_interface(const char *ifname)
{
- int s;
struct ifreq ifr;
struct interface *iface = NULL;
memset(&ifr, 0, sizeof(ifr));
strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
-
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- return NULL;
-
- strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
- if (ioctl(s, SIOCGIFFLAGS, &ifr) == -1)
+ if (ioctl(socket_afnet, SIOCGIFFLAGS, &ifr) == -1)
goto eexit;
iface = xzalloc(sizeof(*iface));
iface->metric += 100;
}
- if (ioctl(s, SIOCGIFMTU, &ifr) == -1)
+ if (ioctl(socket_afnet, SIOCGIFMTU, &ifr) == -1)
goto eexit;
/* Ensure that the MTU is big enough for DHCP */
if (ifr.ifr_mtu < MTU_MIN) {
ifr.ifr_mtu = MTU_MIN;
strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
- if (ioctl(s, SIOCSIFMTU, &ifr) == -1)
+ if (ioctl(socket_afnet, SIOCSIFMTU, &ifr) == -1)
goto eexit;
}
free(iface);
iface = NULL;
exit:
- close(s);
return iface;
}
int
carrier_status(struct interface *iface)
{
- int s, ret;
+ int ret;
struct ifreq ifr;
#ifdef SIOCGIFMEDIA
struct ifmediareq ifmr;
char *p;
#endif
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- return -1;
memset(&ifr, 0, sizeof(ifr));
strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
#ifdef __linux__
*p = '\0';
#endif
- if (ioctl(s, SIOCGIFFLAGS, &ifr) == -1) {
- close(s);
+ if (ioctl(socket_afnet, SIOCGIFFLAGS, &ifr) == -1)
return -1;
- }
iface->flags = ifr.ifr_flags;
ret = -1;
#ifdef SIOCGIFMEDIA
memset(&ifmr, 0, sizeof(ifmr));
strlcpy(ifmr.ifm_name, iface->name, sizeof(ifmr.ifm_name));
- if (ioctl(s, SIOCGIFMEDIA, &ifmr) != -1 &&
+ if (ioctl(socket_afnet, SIOCGIFMEDIA, &ifmr) != -1 &&
ifmr.ifm_status & IFM_AVALID)
ret = (ifmr.ifm_status & IFM_ACTIVE) ? 1 : 0;
#endif
- close(s);
if (ret == -1)
ret = (ifr.ifr_flags & IFF_RUNNING) ? 1 : 0;
return ret;
int
up_interface(struct interface *iface)
{
- int s;
struct ifreq ifr;
int retval = -1;
#ifdef __linux__
char *p;
#endif
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- return -1;
memset(&ifr, 0, sizeof(ifr));
strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
#ifdef __linux__
if ((p = strchr(ifr.ifr_name, ':')))
*p = '\0';
#endif
- if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) {
+ if (ioctl(socket_afnet, SIOCGIFFLAGS, &ifr) == 0) {
if ((ifr.ifr_flags & IFF_UP))
retval = 0;
else {
ifr.ifr_flags |= IFF_UP;
- if (ioctl(s, SIOCSIFFLAGS, &ifr) == 0)
+ if (ioctl(socket_afnet, SIOCSIFFLAGS, &ifr) == 0)
retval = 0;
}
iface->flags = ifr.ifr_flags;
}
- close(s);
return retval;
}
if (ifp->hwlen != 0)
memcpy(ifp->hwaddr, sll->sll_addr, ifp->hwlen);
#endif
-
}
if (!(ifp->flags & IFF_POINTOPOINT)) {
{
struct ifreq ifr;
int r;
- int s;
-
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- return -1;
memset(&ifr, 0, sizeof(ifr));
strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
ifr.ifr_mtu = mtu;
- r = ioctl(s, mtu ? SIOCSIFMTU : SIOCGIFMTU, &ifr);
- close(s);
+ r = ioctl(socket_afnet, mtu ? SIOCSIFMTU : SIOCGIFMTU, &ifr);
if (r == -1)
return -1;
return ifr.ifr_mtu;