Defining IP address to a programatically defined VLAN

Viewed 22

I am trying to create TAP's programatically, to which i am attaching a VLAN and an IPV4 address. (using C, linux 5.4.56, on an embedded device) TAP is created correctly with the regular ioctl's (TUNSETIFF, etc ...) Then, i am using another set of ioctl's to set the VLAN, IPADDR, NETMASK, FLAGS, etc ... (SIOCGIFFLAGS, SIOCSIFADDR, etc ...).

For example

init_sockaddr_in_str((struct sockaddr_in *) &ifr.ifr_addr, ipv4_addr_str);
    if (ioctl(sd, SIOCSIFADDR, &ifr) < 0) {
        LOG("ioctl(SIOCGSIFADDR) error: (%s)\n",strerror(errno));
    }

for setting the IPaddress, sd being a socket created to access this interface file descriptor.

Let supposet I created tap256 at first, the a VLAN tag 256, and an IPaddress a.b.c.d

The problem i have is that, at linux cli, i can correctly see all these interfaces with "ip -d a" but

  1. Only the TAP256 is UP with the address set to IT ... an no VLAN
  2. Another interface has been created (TAP256.256) which is DOWN with the VLAN defined

Of course, i can fix this manually (removing the IP addr from one interface, setting it to the other, etc ... but this is not the preferred option, i really liked it to be done programatically.

Is there something i am doing not right ? or a specific sequence of actions which will lead to my TAP256.256 UP and the correct IP address attached to it ?

Thanks, Jacques

0 Answers
Related