For some specific networking tests, I've created a VLAN device, eth1.900, and a couple of aliases, eth1.900:1 and eth1.900.2.
eth1.900 Link encap:Ethernet HWaddr 00:18:E7:17:2F:13 inet addr:1.0.1.120 Bcast:1.0.1.255 Mask:255.255.255.0 eth1.900:1 Link encap:Ethernet HWaddr 00:18:E7:17:2F:13 inet addr:1.0.1.200 Bcast:1.0.1.255 Mask:255.255.255.0 eth1.900:2 Link encap:Ethernet HWaddr 00:18:E7:17:2F:13 inet addr:1.0.1.201 Bcast:1.0.1.255 Mask:255.255.255.0
When connecting to a server, is there a way to specify which of these aliases will be used? I can ping using the -I <ip> address option to select which alias to use, but I can't see how to do it with a TCP socket in code without using raw sockets, since I would also like to run without extra socket privileges, i.e. not running as root, if possible.
Unfortunately, even with root, SO_BINDTODEVICE doesn't work because the alias device name is not recognized:
printf("Bind to %s\n", devname);
if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, (char*)devname, sizeof(devname)) != 0)
{
perror("SO_BINDTODEVICE");
return 1;
}
Output:
Bind to eth1.900:1 SO_BINDTODEVICE: No such device