For lack of a better API (or knowledge about a better API) we try to
open utun devices on macOS by trying utun0 to utun255 and use the
first one that works. On my Mac I have already 4 devices that
do nothing but are just there and another VPN connection resulting in a
number of error messages. This explicitly shows in the log that we
tried the devices instead of some unspecific error.
This changes the log from:
Opening utun (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opened utun device utun5
to
Opening utun0 failed (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun1 failed (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun2 failed (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun3 failed (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opening utun4 failed (connect(AF_SYS_CONTROL)): Resource busy (errno=16)
Opened utun device utun5
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Feature-ACK-by: "Jonathan K. Bullard" <jkbullard@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20200725235023.22441-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg20590.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
| ... | ... |
@@ -2950,14 +2950,16 @@ utun_open_helper(struct ctl_info ctlInfo, int utunnum) |
| 2950 | 2950 |
|
| 2951 | 2951 |
if (fd < 0) |
| 2952 | 2952 |
{
|
| 2953 |
- msg(M_INFO | M_ERRNO, "Opening utun (socket(SYSPROTO_CONTROL))"); |
|
| 2953 |
+ msg(M_INFO | M_ERRNO, "Opening utun%d failed (socket(SYSPROTO_CONTROL))", |
|
| 2954 |
+ utunnum); |
|
| 2954 | 2955 |
return -2; |
| 2955 | 2956 |
} |
| 2956 | 2957 |
|
| 2957 | 2958 |
if (ioctl(fd, CTLIOCGINFO, &ctlInfo) == -1) |
| 2958 | 2959 |
{
|
| 2959 | 2960 |
close(fd); |
| 2960 |
- msg(M_INFO | M_ERRNO, "Opening utun (ioctl(CTLIOCGINFO))"); |
|
| 2961 |
+ msg(M_INFO | M_ERRNO, "Opening utun%d failed (ioctl(CTLIOCGINFO))", |
|
| 2962 |
+ utunnum); |
|
| 2961 | 2963 |
return -2; |
| 2962 | 2964 |
} |
| 2963 | 2965 |
|
| ... | ... |
@@ -2975,7 +2977,8 @@ utun_open_helper(struct ctl_info ctlInfo, int utunnum) |
| 2975 | 2975 |
|
| 2976 | 2976 |
if (connect(fd, (struct sockaddr *)&sc, sizeof(sc)) < 0) |
| 2977 | 2977 |
{
|
| 2978 |
- msg(M_INFO | M_ERRNO, "Opening utun (connect(AF_SYS_CONTROL))"); |
|
| 2978 |
+ msg(M_INFO | M_ERRNO, "Opening utun%d failed (connect(AF_SYS_CONTROL))", |
|
| 2979 |
+ utunnum); |
|
| 2979 | 2980 |
close(fd); |
| 2980 | 2981 |
return -1; |
| 2981 | 2982 |
} |