Beispiel #1
0
struct sockaddr_in AddressForInterfaceIndex( int interfaceIndex ) {
	struct sockaddr_in addr;

	memset( &addr, 0, sizeof( addr ) );
	addr.sin_len = sizeof( addr );
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = INADDR_ANY;

	if ( interfaceIndex == 0 ) {
		return addr;
	}
		
	struct if_nameindex *ifnames = if_nameindex();
	if ( !ifnames ) {
		perror( "if_ameindex()" );
		return addr;
	}
	for ( int i = 0 ; ifnames[i].if_index != 0 ; i++ ) {
		if ( ifnames[i].if_index == interfaceIndex ) {
			addr = AddressForInterfaceName( ifnames[i].if_name );
			if_freenameindex( ifnames );
			return addr;
		}
	}	
	printf( "AddressForInterfaceIndex( %i ): Couldn't find interface\n", interfaceIndex );
	if_freenameindex( ifnames );
	return addr;
}
Beispiel #2
0
int main( void )
{
    struct if_nameindex *nis;
    char ifname[ IFNAMSIZ ];
    int i;

    nis = if_nameindex();

    if( nis )
    {
        printf("----- List of interfaces -----\n");
        for( i = 0; nis[ i ].if_index != 0; i++ )
            printf("Index %d = [%s]\n", nis[ i ].if_index, nis[ i ].if_name );

        printf("----- End of list -----\n");
        if_freenameindex( nis );

    }
    else
        perror("if_nameindex()");

    i = if_nametoindex("lan0");
    printf("Index of lan0 = %d\n", i );
    printf("name of index %d = [%s]\n", i, if_indextoname( i, ifname ));

    i = if_nametoindex("lo");
    printf("Index of lo = %d\n", i );
    printf("name of index %d = [%s]\n", i, if_indextoname( i, ifname ));

    return 0;
}
Beispiel #3
0
/*
 * read the config file
 */
int
qcmd_config(void)
{
	FILE	*fp;
	int	rval;

	if (if_namelist != NULL)
		if_freenameindex(if_namelist);
	if_namelist = if_nameindex();
	curifname[0] = '\0';

	LOG(LOG_INFO, 0, "ALTQ config file is %s", altqconfigfile);

	fp = fopen(altqconfigfile, "r");
	if (fp == NULL) {
		LOG(LOG_ERR, errno, "can't open %s", altqconfigfile, 0);
		return (QOPERR_INVAL);
	}
	line_no = 0;
	rval = 1;
	while (rval)
		rval = do_command(fp);

	if (!feof(fp)) {
		LOG(LOG_ERR, 0, "Error in %s, line %d.  config failed.",
		    altqconfigfile, line_no);
		(void) qcmd_destroyall();
		rval = QOPERR_INVAL;
	} else
		rval = 0;

	(void)fclose(fp);
	line_no = 0;
	return (rval);
}
Beispiel #4
0
InterfaceIndexTable *getInterfaceIndexTable(void)
{
  DWORD numInterfaces;
  InterfaceIndexTable *ret;
  struct if_nameindex *indexes = if_nameindex();

  if (indexes) {
    struct if_nameindex *p;
    DWORD size = sizeof(InterfaceIndexTable);

    for (p = indexes, numInterfaces = 0; p && p->if_name; p++)
      numInterfaces++;
    if (numInterfaces > 1)
      size += (numInterfaces - 1) * sizeof(DWORD);
    ret = HeapAlloc(GetProcessHeap(), 0, size);
    if (ret) {
      ret->numIndexes = 0;
      for (p = indexes; p && p->if_name; p++)
        ret->indexes[ret->numIndexes++] = p->if_index;
    }
    if_freenameindex(indexes);
  }
  else
    ret = NULL;
  return ret;
}
Beispiel #5
0
int checkinterface(netdata* data)
{
	int interfacefound = FALSE;
	unsigned int i;
	struct if_nameindex *ifs;

#ifdef DEBUG
    fprintf( stderr, "Checking the interface '%s' now ...\n", data->ifdata.if_name );
#endif

    
	if ((ifs = if_nameindex()) == NULL)
		return FALSE;

	for (i = 0; ifs[i].if_index; i++)
	{
		if (strcmp(ifs[i].if_name, data->ifdata.if_name) == 0)
		{
			interfacefound = TRUE;
			break;
		}
	}
    
    /* free the nameindex structure */
    if_freenameindex(ifs);
    
    /* check if the /proc/net/dev exists */
    if (access(PATH_NET_DEV, R_OK) != 0)
    {
        data->errorcode = PROC_DEVICE_NOT_FOUND;
        return FALSE;
    }

	return interfacefound;
}
Beispiel #6
0
int	NET_IF_DISCOVERY(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
	struct if_nameindex	*ni;
	struct zbx_json		j;
	int			i;

	zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN);

	zbx_json_addarray(&j, ZBX_PROTO_TAG_DATA);

	for (ni = if_nameindex(), i = 0; 0 != ni[i].if_index; i++)
	{
		zbx_json_addobject(&j, NULL);
		zbx_json_addstring(&j, "{#IFNAME}", ni[i].if_name, ZBX_JSON_TYPE_STRING);
		zbx_json_close(&j);
	}

	if_freenameindex(ni);

	zbx_json_close(&j);

	SET_STR_RESULT(result, strdup(j.buffer));

	zbx_json_free(&j);

	return SYSINFO_RET_OK;
}
Beispiel #7
0
extern char* get_ip()
{

int fd;
struct if_nameindex *curif, *ifs;
struct ifreq req;
char ip[16];
if((fd = socket(PF_INET, SOCK_DGRAM, 0)) != -1) {
ifs = if_nameindex();
if(ifs) {
for(curif = ifs; curif && curif->if_name; curif++) {
strncpy(req.ifr_name, curif->if_name, IFNAMSIZ);
req.ifr_name[IFNAMSIZ] = 0;
if (ioctl(fd, SIOCGIFADDR, &req) >= 0 && !strcmp(curif->if_name,"eth2")){
sprintf(ip,"%s",inet_ntoa(((struct sockaddr_in*) &req.ifr_addr)->sin_addr));
}
}
if_freenameindex(ifs);
if(close(fd)!=0)
perror("close");
} else
perror("if_nameindex");
} else
perror("socket");
return ip;
}
Beispiel #8
0
int	NET_IF_DISCOVERY(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	struct if_nameindex	*ni;
	struct zbx_json		j;
	int			i;

	if (NULL == (ni = if_nameindex()))
	{
		SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot obtain system information: %s", zbx_strerror(errno)));
		return SYSINFO_RET_FAIL;
	}

	zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN);

	zbx_json_addarray(&j, ZBX_PROTO_TAG_DATA);

	for (i = 0; 0 != ni[i].if_index; i++)
	{
		zbx_json_addobject(&j, NULL);
		zbx_json_addstring(&j, "{#IFNAME}", ni[i].if_name, ZBX_JSON_TYPE_STRING);
		zbx_json_close(&j);
	}

	if_freenameindex(ni);

	zbx_json_close(&j);

	SET_STR_RESULT(result, strdup(j.buffer));

	zbx_json_free(&j);

	return SYSINFO_RET_OK;
}
Beispiel #9
0
/*
 * see if ("option routers %s;\n",dst) is preset in any possible dhclient
 * lease file
 */
int dhclient_isenabled(char *dst)
{
	int gatewayfound = 0;
	struct stat enst;
	struct if_nameindex *ifn_list, *ifnp;
	char ortext[128];
	char leasefile[sizeof(LEASEPREFIX)+IFNAMSIZ+1];

	if ((ifn_list = if_nameindex()) == NULL) {
		printf("%% dhclient_isenabled: if_nameindex failed\n");
		return 0;
	}

	snprintf(ortext, sizeof(ortext), "  option routers %s;\n", dst);

	for (ifnp = ifn_list; ifnp->if_name != NULL; ifnp++) {
		snprintf(leasefile, sizeof(leasefile), "%s.%s", LEASEPREFIX,
		    ifnp->if_name);
		if (stat(leasefile, &enst) == 0 && S_ISREG(enst.st_mode))
			if(scantext(leasefile, ortext)) {
				gatewayfound = 1;
				break;
			}
	}

	if_freenameindex(ifn_list);

	return (gatewayfound);
}
Beispiel #10
0
/**
 * net_get_netdev_from_hwaddress - given a hwaddress return the ethX
 * @hwaddress: hw address no larger than ISCSI_HWADDRESS_BUF_SIZE
 * @netdev: buffer of IFNAMSIZ size that will hold the ethX
 *
 * Does not support interfaces like a bond or alias because
 * multiple interfaces will have the same hwaddress.
 */
int net_get_netdev_from_hwaddress(char *hwaddress, char *netdev)
{
	struct if_nameindex *ifni;
	struct ifreq if_hwaddr;
	int found = 0, sockfd, i = 0;
	unsigned char *hwaddr;
	char tmp_hwaddress[ISCSI_HWADDRESS_BUF_SIZE];

	ifni = if_nameindex();
	if (ifni == NULL) {
		log_error("Could not match hwaddress %s to netdev. "
			  "getifaddrs failed %d", hwaddress, errno);
		return errno;
	}

	/* Open a basic socket. */
	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if (sockfd < 0) {
		log_error("Could not open socket for ioctl.");
		goto free_ifni;
	}

	for (i = 0; ifni[i].if_index && ifni[i].if_name; i++) {
		struct if_nameindex *n = &ifni[i];

		strlcpy(if_hwaddr.ifr_name, n->if_name, IFNAMSIZ);
		if (ioctl(sockfd, SIOCGIFHWADDR, &if_hwaddr) < 0) {
			log_error("Could not match %s to netdevice.",
				  hwaddress);
			continue;
		}

		/* check for ARPHRD_ETHER (ethernet) */
		if (if_hwaddr.ifr_hwaddr.sa_family != 1)
			continue;
		hwaddr = (unsigned char *)if_hwaddr.ifr_hwaddr.sa_data;

		memset(tmp_hwaddress, 0, ISCSI_HWADDRESS_BUF_SIZE);
		/* TODO should look and covert so we do not need tmp buf */
		sprintf(tmp_hwaddress, "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
			hwaddr[0], hwaddr[1], hwaddr[2], hwaddr[3],
			hwaddr[4], hwaddr[5]);
		log_debug(4, "Found hardware address %s", tmp_hwaddress);
		if (!strcasecmp(tmp_hwaddress, hwaddress)) {
			log_debug(4, "Matches %s to %s", hwaddress,
				  n->if_name);
			memset(netdev, 0, IFNAMSIZ); 
			strlcpy(netdev, n->if_name, IFNAMSIZ);
			found = 1;
			break;
		}
	}

	close(sockfd);
free_ifni:
	if_freenameindex(ifni);
	if (!found)
		return ENODEV;
	return 0;
}
Beispiel #11
0
int if_global_nameindex(lua_State *L)
{
  struct if_nameindex *ni, *oni;
  int i = 1;
  oni = ni = if_nameindex();
  lua_newtable(L);
  while (ni && ni->if_index && *(ni->if_name))
    {
      /* at result[i], we store.. */
      lua_pushnumber(L, i);

      /* new table with two items - index, name*/
      lua_newtable(L);
      lua_pushstring(L, "index");
      lua_pushnumber(L, ni->if_index);
      lua_settable(L, -3);

      lua_pushstring(L, "name");
      lua_pushstring(L, ni->if_name);
      lua_settable(L, -3);

      /* Then, actually store it */
      lua_settable(L, -3);

      i++;
      ni++;
    }
  if_freenameindex(oni);
  return 1;
}
Beispiel #12
0
unsigned char
complete_ifname(char *word, int list, EditLine *el)
{
	StringList *words;
	size_t wordlen;
	unsigned char rv;   

	words = sl_init();
	wordlen = strlen(word);

	struct if_nameindex *ifn_list, *ifnp;

	if ((ifn_list = if_nameindex()) == NULL)
		return 0;

	for (ifnp = ifn_list; ifnp->if_name != NULL; ifnp++) {
                if (wordlen > strlen(ifnp->if_name))
                        continue;
                if (strncmp(word, ifnp->if_name, wordlen) == 0)
                        sl_add(words, ifnp->if_name);
        }

        rv = complete_ambiguous(word, list, words, el);
	if_freenameindex(ifn_list);
        sl_free(words, 0);
        return (rv);
}
Beispiel #13
0
InterfaceIndexTable *getNonLoopbackInterfaceIndexTable(void)
{
  DWORD numInterfaces;
  InterfaceIndexTable *ret;
  int fd = socket(PF_INET, SOCK_DGRAM, 0);

  if (fd != -1) {
    struct if_nameindex *indexes = if_nameindex();

    if (indexes) {
      struct if_nameindex *p;
      DWORD size = sizeof(InterfaceIndexTable);

      for (p = indexes, numInterfaces = 0; p && p->if_name; p++)
        if (!isLoopbackInterface(fd, p->if_name))
          numInterfaces++;
      if (numInterfaces > 1)
        size += (numInterfaces - 1) * sizeof(DWORD);
      ret = HeapAlloc(GetProcessHeap(), 0, size);
      if (ret) {
        ret->numIndexes = 0;
        for (p = indexes; p && p->if_name; p++)
          if (!isLoopbackInterface(fd, p->if_name))
            ret->indexes[ret->numIndexes++] = p->if_index;
      }
      if_freenameindex(indexes);
    }
    else
      ret = NULL;
    close(fd);
  }
  else
    ret = NULL;
  return ret;
}
Beispiel #14
0
static int name_to_index(const char *ifname)
{
  struct if_nameindex *ini;
  int ifindex = -1;
  int i;

  if (!ifname)
    return -1;

  ini = if_nameindex();
  if (!ini) {
    int err = errno;
    fprintf(stderr,
	    "%s: interface=%s: failure solving index: errno=%d: %s\n",
	    prog_name, ifname, err, strerror(err));
    errno = err;
    return -1;
  }

  for (i = 0; ini[i].if_index; ++i) {
    if (!strcmp(ini[i].if_name, ifname)) {
      ifindex = ini[i].if_index;
      break;
    }
  }

  if_freenameindex(ini);

  return ifindex;
}
Beispiel #15
0
string GetMacAddress() {
  int fd; // Socket descriptor
  struct ifreq sIfReq; // Interface request
  struct if_nameindex *pIfList; // Ptr to interface name index
  struct if_nameindex *pListSave; // Ptr to interface name index
  //// Initialize this function
  pIfList = (struct if_nameindex *)NULL;
  pListSave = (struct if_nameindex *)NULL;
  // Create a socket that we can use for all of our ioctls
  fd = socket( PF_INET, SOCK_STREAM, 0 );
  if ( fd < 0 ) {
    // Socket creation failed, this is a fatal error
    LOG(WARNING) << "Create socket fail";
    return "";
  }
  // Obtain a list of dynamically allocated structures
  pIfList = pListSave = if_nameindex();
  //
  // Walk thru the array returned and query for each interface's
  // address
  //
  for (pIfList; *(char *)pIfList != 0; pIfList++ ) {
    strncpy( sIfReq.ifr_name, pIfList->if_name, IF_NAMESIZE );
    // Get the MAC address for this interface
    if (ioctl(fd, SIOCGIFHWADDR, &sIfReq) != 0) {
      // We failed to get the MAC address for the interface
      LOG(WARNING) << pIfList->if_name << " Ioctl fail:" << strerror(errno);
      continue;
    }
    uint8 *mac_addr = reinterpret_cast<uint8*>(sIfReq.ifr_ifru.ifru_hwaddr.sa_data);
    if (mac_addr[0] == 0 && mac_addr[1] == 0 && mac_addr[2] == 0 &&
        mac_addr[3] == 0 && mac_addr[4] == 0 && mac_addr[5] == 0) {
      VLOG(2) << pIfList->if_name << " haven't mac address";
      continue;
    }
    string str_mac_address = StringPrintf("%02x:%02x:%02x:%02x:%02x:%02x",
                  mac_addr[0], mac_addr[1], mac_addr[2],
                  mac_addr[3], mac_addr[4], mac_addr[5]);
    VLOG(2) << pIfList->if_name << " mac address : " << str_mac_address;
    if_freenameindex(pListSave);
    close(fd);
    return str_mac_address;
  }
  if_freenameindex(pListSave);
  close(fd);
  return "";
}
std::vector<std::string> get_mac_addresses() {
    int mib[6];

    std::vector<std::string> result;

    mib[0] = CTL_NET;
    mib[1] = AF_ROUTE;
    mib[2] = 0;
    mib[3] = AF_LINK;
    mib[4] = NET_RT_IFLIST;

    auto indices = if_nameindex();

    std::unique_ptr<char> buf;
    size_t buf_size = 0;

    for (auto i = indices; !(i->if_index == 0 && i->if_name == nullptr); ++i) {
        mib[5] = static_cast<int>(i->if_index);

        size_t len;
        if (sysctl(mib, 6, nullptr, &len, nullptr, 0) < 0) {
            perror("sysctl 1 error");
            exit(3);
        }

        if (buf_size < len) {
            buf.reset(new char[len]);
            buf_size = len;
        }

        if (sysctl(mib, 6, buf.get(), &len, nullptr, 0) < 0) {
            perror("sysctl 2 error");
            exit(5);
        }

        auto ifm = reinterpret_cast<if_msghdr*>(buf.get());
        auto sdl = reinterpret_cast<sockaddr_dl*>(ifm + 1);
        auto ptr = reinterpret_cast<unsigned char*>(LLADDR(sdl));

        auto uctoi = [](unsigned char c) -> unsigned {
            return static_cast<unsigned char>(c);
        };

        std::ostringstream oss;
        oss << std::hex;
        oss.fill('0');
        oss.width(2);
        oss << uctoi(*ptr++);
        for (auto j = 0; j < 5; ++j) {
            oss << ":";
            oss.width(2);
            oss << uctoi(*ptr++);
        }
        auto addr = oss.str();
        if (addr != "00:00:00:00:00:00") result.push_back(std::move(addr));
    }
    if_freenameindex(indices);
    return result;
}
Beispiel #17
0
char* getIP(char* interface) {
	char* ip; // Chaîne de retour
	ip = (char*)malloc(16 * sizeof(char));
	int descSock;
	struct ifreq devea;
	struct sockaddr_in *sa;
	//récupération d'un pointeur sur toutes les cartes disponible;
	struct if_nameindex *nameindex = if_nameindex();
	if(nameindex == NULL){
		perror("if_nameindex ");
		exit(errno);
	}
	int i = 0;
	while(1){
		if(nameindex[i].if_name == NULL) break;//il n'y a plus de cates on sort
		//Copie du nom dans la structure ifreq et au passage on prépare l'index pour la prochaine carte
		strcpy(devea.ifr_name, nameindex[i++].if_name);
		//Affichage de celui-ci
		if (strcmp(devea.ifr_name, interface) == 0) {
			//on ouvre un socket pour chacune des cartes que l'on closera après
			descSock = socket(AF_INET, SOCK_DGRAM, 0);
			if (descSock < 0){
				perror("socket ");
				//On relache le pointeur dynamiquement alloue par if_nameindex
				if_freenameindex(nameindex);
				exit(errno);
			}
			//Récupération de l'adresse ip
			if (ioctl(descSock,SIOCGIFADDR, &devea) < 0) {
				printf("ERROR MAYBE NOT STARTED ?\n");
				exit(1);
			} else {
				//Récupère la structure sockaddr_in contenue dans ifreq
				sa = (struct sockaddr_in *)&devea.ifr_ifru.ifru_addr;
				//Convertion en ascii et copie dans la chaîne de retour
				strcpy(ip, inet_ntoa(sa->sin_addr));
			}
			//Ferme le socket pour passer au prochain
			close(descSock);
		}
	}
	//Relache le pointeur dynamiquement alloue par if_nameindex
	if_freenameindex(nameindex);
	return ip;
	
}
Beispiel #18
0
int InterfaceIndexForName( const char *ifname ) {
	struct if_nameindex *ifnames = if_nameindex();
	if ( !ifnames ) {
		perror( "if_nameindex()" );
		return 0;
	}
	for ( int i = 0 ; ifnames[i].if_index != 0 ; i++ ) {
		if ( !strcmp( ifname, ifnames[i].if_name ) ) {
			int	index = ifnames[i].if_index;
			if_freenameindex( ifnames );
			return index;
		}
	}	
	printf( "InterfaceIndexForName( %s ): Couldn't find interface\n", ifname );
	if_freenameindex( ifnames );
	return 0;
}
TInt CTestIfioctls::TestIfNameIndex()
	{
	TInt ret = KErrNone;
	struct if_nameindex *ifname;
	ifname = if_nameindex();
	if_freenameindex(ifname);
	return ret;
	}	
Beispiel #20
0
void testValues() {
    f = 2;
    struct if_nameindex * ni = if_nameindex();
    if (ni == NULL) {return;}

    if_freenameindex(ni);
    
    //@ assert f == 2;
    //@ assert vacuous: \false;
}
Beispiel #21
0
ointerfaces::ointerfaces ()

{

#if defined (WINPCAP) 

	char buffer [PCAP_ERRBUF_SIZE];
	pcap_if_t * devices = (pcap_if_t *) (0);
	pcap_if_t * device;
	this->mindex = 0;
	this->mcount = 0;
	if (pcap_findalldevs (& devices, buffer) != -1)
	{
		for (device = devices; device; device = device->next)
		{
			this->mcount++;
		}
		this->mtable = new ointerface * [this->mcount];
		for (device = devices; device; device = device->next)
		{
			ointerface * ifo = new ointerface (device->name);
			ifo->Description (device->description);
			this->mtable [this->mindex++] = ifo;
		}
		pcap_freealldevs (devices);
	}

#else

	struct if_nameindex * ifs = if_nameindex ();
	struct if_nameindex * ifp;
	this->mindex = 0;
	this->mcount = 0;
	for (ifp = ifs; ifp->if_index; ++ ifp)
	{
		this->mcount++;
	}
	this->mtable = new ointerface * [this->mcount];
	for (ifp = ifs; ifp->if_index; ++ ifp)
	{
		ointerface * ifo = new ointerface (ifp->if_name);
		ifo->Description (ifp->if_name);
		this->mtable [this->mindex++] = ifo;
	}
	if_freenameindex (ifs);

#endif

	if (! this->mcount)
	{
		this->mtable = new ointerface * [1];
	}
	this->mindex = 0;
	return;
}
Beispiel #22
0
int main(int argc, char *argv[])
{
	struct if_nameindex *table, *iface;

	table = if_nameindex();
	for (iface = table; iface->if_index; ++iface) {
		printf("%i: %s\n", iface->if_index, iface->if_name);
	}
	if_freenameindex(table);
	return 0;
}
static QSet<QByteArray> interfaceNames(int socket)
{
    QSet<QByteArray> result;
#ifdef QT_NO_IPV6IFNAME
    QByteArray storageBuffer;
    struct ifconf interfaceList;

    forever {
        // grow the storage buffer
        storageBuffer.resize(storageBuffer.size() + STORAGEBUFFER_GROWTH);
        interfaceList.ifc_buf = storageBuffer.data();
        interfaceList.ifc_len = storageBuffer.size();

        // get the interface list
        if (qt_safe_ioctl(socket, SIOCGIFCONF, &interfaceList) >= 0) {
            if (int(interfaceList.ifc_len + sizeof(ifreq) + 64) < storageBuffer.size()) {
                // if the buffer was big enough, break
                storageBuffer.resize(interfaceList.ifc_len);
                break;
            }
        } else {
            // internal error
            return result;
        }
        if (storageBuffer.size() > 100000) {
            // out of space
            return result;
        }
    }

    int interfaceCount = interfaceList.ifc_len / sizeof(ifreq);
    for (int i = 0; i < interfaceCount; ++i) {
        QByteArray name = QByteArray(interfaceList.ifc_req[i].ifr_name);
        if (!name.isEmpty())
            result << name;
    }

    return result;
#else
    Q_UNUSED(socket);

    // use if_nameindex
    struct if_nameindex *interfaceList = ::if_nameindex();
    for (struct if_nameindex *ptr = interfaceList; ptr && ptr->if_name; ++ptr)
        result << ptr->if_name;

    if_freenameindex(interfaceList);
    return result;
#endif
}
Beispiel #24
0
static unsigned int
if_maxindex()
{
	struct if_nameindex *p, *p0;
	unsigned int max = 0;

	p0 = if_nameindex();
	for (p = p0; p && p->if_index && p->if_name; p++) {
		if (max < p->if_index)
			max = p->if_index;
	}
	if_freenameindex(p0);
	return max;
}
Beispiel #25
0
int main(int argc, char **argv) {
	int sockfd = 0;
	int iftype = 0;
	struct if_nameindex *pInterfaces;
	struct if_nameindex *pFreeInterfacesMem;
	ur::WiredInterface *ifWiredHead = NULL;
	std::string ssidname;
	std::string wirelessaddress("notset");

	pInterfaces = pFreeInterfacesMem = if_nameindex();

	while ((pInterfaces != NULL) && (pInterfaces->if_name != NULL)) {
// (DEBUG)		std::cout << "Interface[" << pInterfaces->if_index << "]: " << pInterfaces->if_name << std::endl;
		if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
			continue;

		/* For now we only need to find wireless interfaces.  Eventually
		 * we will enumerate both wired and wireless, so I will just loop through all
		 * interfaces for now and call a 'no_op()' function for the wired interface */
		get_interfaces(sockfd, pInterfaces->if_name, &iftype, &ssidname);
		if(iftype == IFT_WIRED) {
			get_wired_interface(sockfd, pInterfaces->if_name, ifWiredHead);
		}
		if(iftype == IFT_WIRELESS) {
			get_wireless_interface(sockfd, pInterfaces->if_name, &wirelessaddress);
		}
		close(sockfd);
		++pInterfaces;
	}

	// (DEBUG) See if it worked
	std::cout << "SSID: " << ssidname << std::endl;
	std::cout <<  "ADDR: " << wirelessaddress << std::endl;


	/* Open the serial comm port for the LCD display */

	/* Print the SSID and the IPv4 Address */

	/* cleanup and go away */
		if (pFreeInterfacesMem != NULL)
		if_freenameindex(pFreeInterfacesMem);
	while (ifWiredHead != NULL) {
		ur::WiredInterface *pWiredInterface;
		pWiredInterface = ifWiredHead->GetNext();
		delete ifWiredHead;
		ifWiredHead = pWiredInterface;
	}
	return EXEC_SUCCESS;
}
Beispiel #26
0
DWORD getNumInterfaces(void)
{
  DWORD numInterfaces;
  struct if_nameindex *indexes = if_nameindex();

  if (indexes) {
    struct if_nameindex *p;

    for (p = indexes, numInterfaces = 0; p && p->if_name; p++)
      numInterfaces++;
    if_freenameindex(indexes);
  }
  else
    numInterfaces = 0;
  return numInterfaces;
}
Beispiel #27
0
static TACommandVerdict if_freenameindex_cmd(TAThread thread,TAInputStream stream)
{
    struct if_nameindex * ptr;
    
    ptr = readPointer(&stream);
    
    START_TARGET_OPERATION(thread);
    
    if_freenameindex(ptr);
    
    END_TARGET_OPERATION(thread);
    
    writeString(thread,"Ok");
    sendResponse(thread);
    
    return taDefaultVerdict;
}
Beispiel #28
0
/**
 * @brief Get a list of all the network interfaces available
 * @return A list of Eeze_Net objects
 * Use this function to get all network interfaces available to the application.
 * This list must be freed by the user.
 */
Eina_List *
eeze_net_list(void)
{
   struct if_nameindex *ifs, *i;
   Eina_List *ret = NULL;
   Eeze_Net *net;

   ifs = if_nameindex();
   for (i = ifs; i && i->if_name && i->if_name[0]; i++)
     {
        net = eeze_net_new(i->if_name);
        if (net) ret = eina_list_append(ret, net);
     }
   
   if_freenameindex(ifs);
   return ret;
}
Beispiel #29
0
int transport_probe_for_offload(void)
{
	struct if_nameindex *ifni;
	char transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
	int i, sockfd;
	struct ifreq if_hwaddr;

	ifni = if_nameindex();
	if (!ifni) {
		log_error("Could not search for transport modules: %s",
			  strerror(errno));
		return ISCSI_ERR_TRANS_NOT_FOUND;
	}

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if (sockfd < 0) {
		log_error("Could not open socket for ioctl: %s",
			  strerror(errno));
		goto free_ifni;
	}

	for (i = 0; ifni[i].if_index && ifni[i].if_name; i++) {
		struct if_nameindex *n = &ifni[i];

		log_debug(6, "kmod probe found %s\n", n->if_name);

		strlcpy(if_hwaddr.ifr_name, n->if_name, IFNAMSIZ);
		if (ioctl(sockfd, SIOCGIFHWADDR, &if_hwaddr) < 0)
			continue;

		/* check for ARPHRD_ETHER (ethernet) */
		if (if_hwaddr.ifr_hwaddr.sa_family != 1)
			continue;

		if (net_get_transport_name_from_netdev(n->if_name,
						       transport_name))
			continue;

		transport_load_kmod(transport_name);
	}
	close(sockfd);

free_ifni:
	if_freenameindex(ifni);
	return 0;
}
char * if_indextoname (unsigned int ifindex, char *ifname)
{
    struct if_nameindex *idx;
    struct if_nameindex *p;
    char *result = NULL;

    idx = if_nameindex();
    if (idx != NULL) {
	for (p = idx; p->if_index || p->if_name; ++p) {
	    if (p->if_index == ifindex) {
		result = strncpy (ifname, p->if_name, IFNAMSIZ);
		break;
	    }
	}
	if_freenameindex (idx);
    }
    return result;
}