{
ifr.ifr_data = (char *)dev;
}
+
+ snprintf(tt->dco.ifname, IFNAMSIZ, "%s", ifr.ifr_data);
+
ret = ioctl(tt->dco.fd, SIOCSIFNAME, &ifr);
if (ret)
{
return ret;
}
- snprintf(tt->dco.ifname, IFNAMSIZ, "%s", ifr.ifr_data);
-
- /* see "Interface Flags" in ifnet(9) */
- int i = IFF_POINTOPOINT | IFF_MULTICAST;
- if (tt->topology == TOP_SUBNET)
- {
- i = IFF_BROADCAST | IFF_MULTICAST;
- }
- dco_set_ifmode(&tt->dco, i);
-
return 0;
}
int
open_tun_dco(struct tuntap *tt, openvpn_net_ctx_t *ctx, const char *dev)
{
- return create_interface(tt, dev);
+ int ret = create_interface(tt, dev);
+
+ if (ret >= 0 || ret == -EEXIST)
+ {
+ /* see "Interface Flags" in ifnet(9) */
+ int i = IFF_POINTOPOINT | IFF_MULTICAST;
+ if (tt->topology == TOP_SUBNET)
+ {
+ i = IFF_BROADCAST | IFF_MULTICAST;
+ }
+ dco_set_ifmode(&tt->dco, i);
+ }
+
+ return ret;
}
void