Background
I had bought a GL-iNet mini router, GL-AR150-Ext-2, and would like to deploy my own service program (in Linux C) in this router. I need to get the IP address (IPv4) of the wireless network interface, i.e., named wlan0, in my Linux C program. In general, this can be done by using the ioctl () function provided by Linux. My function to get IP address of a given network interface can be
/*
* Returns information on a network interface given its name...
*/
struct sockaddr_in *get_if_info(char *ifname, int type)
{
int skfd;
struct sockaddr_in *ina;
static struct ifreq ifr;
/* Get address of interface... */
skfd = socket(AF_INET, SOCK_DGRAM, 0);
strcpy(ifr.ifr_name, ifname);
if (ioctl(skfd, type, &ifr) < 0) {
printf("Could not get address of %s \n", ifname);
close(skfd);
return NULL;
} else {
ina = (struct sockaddr_in *) &ifr.ifr_addr;
close(skfd);
return ina;
}
}
Problem
However, when I called the C function above with the given network interface name wlan0, I got an error “Could not get address of wlan0”.
When I used SSH to log in the router and checked the configuration of the network interfaces provided by the router by using the Linux ifconfig command, I found that the configuration of the network interface, wlan0, only contains the IPv6 address information, i.e., inet6 addr (See the following text), while I could not find the IPv4 address information i.e., inet addr. (The device was running in the Router mode)
wlan0 Link encap:Ethernet HWaddr E4:95:6E:44:EE:8F
inet6 addr: fe80::e695:6eff:fe44:ee8f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14188 errors:0 dropped:0 overruns:0 frame:0
TX packets:9682 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2639309 (2.5 MiB) TX bytes:5417952 (5.1 MiB)
Therefore, my problem is:
- Why does the configuration of the wireless network interface wlan0 not give an IPv4 address (i.e., inet addr)? Commonly, when we use ifconfig command, we can see the inet addr of network interfaces of a device running Linux OS, such as :
eth0 Link encap:Ethernet HWaddr E4:95:6E:44:EE:8F
inet addr:172.17.13.165 Bcast:172.17.13.255 Mask:255.255.255.0
inet6 addr: 2001:da8:203:d508:e695:6eff:fe44:ee8f/64 Scope:Global
inet6 addr: fe80::e695:6eff:fe44:ee8f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37658 errors:0 dropped:33 overruns:0 frame:0
TX packets:11244 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:37222188 (35.4 MiB) TX bytes:2244877 (2.1 MiB)
Interrupt:4
- Could I associate a specified IP address with wlan0? and How to do this? (Indeed, I know that we can use the command ifconfig to configure the IP address of the wireless network interface like this: ifconfig wlan0 192.168.10.1. But when I restart the network by service network restart, the given IP address configuration of wlan0 is removed.)
My another question is that
- Could I use the router as a Client that is expected to be running in the Ad Hoc mode since I would like to establish an Wireless Ad Hoc Network? And how to do this? Or How can I configure the router to a Ad Hoc mode?
I am looking forward to hearing from someone with expertise.
Many thanks!
Jianshan