Index: head/lib/libifconfig/libifconfig.h =================================================================== --- head/lib/libifconfig/libifconfig.h +++ head/lib/libifconfig/libifconfig.h @@ -12,10 +12,6 @@ * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +46,6 @@ int reqcap; }; - /** Retrieves a new state object for use in other API calls. * Example usage: *{@code @@ -80,19 +75,18 @@ /** If error type was IOCTL, this identifies which request failed. */ unsigned long ifconfig_err_ioctlreq(ifconfig_handle_t *h); - int ifconfig_get_description(ifconfig_handle_t *h, const char *name, char **description); int ifconfig_set_description(ifconfig_handle_t *h, const char *name, const char *newdescription); int ifconfig_unset_description(ifconfig_handle_t *h, const char *name); -int ifconfig_set_name(ifconfig_handle_t *h, const char *name, const char *newname); +int ifconfig_set_name(ifconfig_handle_t *h, const char *name, + const char *newname); int ifconfig_set_mtu(ifconfig_handle_t *h, const char *name, const int mtu); int ifconfig_get_mtu(ifconfig_handle_t *h, const char *name, int *mtu); - -int ifconfig_set_metric(ifconfig_handle_t *h, const char *name, const int metric); +int ifconfig_set_metric(ifconfig_handle_t *h, const char *name, + const int metric); int ifconfig_get_metric(ifconfig_handle_t *h, const char *name, int *metric); - int ifconfig_set_capability(ifconfig_handle_t *h, const char *name, const int capability); int ifconfig_get_capability(ifconfig_handle_t *h, const char *name, Index: head/lib/libifconfig/libifconfig.c =================================================================== --- head/lib/libifconfig/libifconfig.c +++ head/lib/libifconfig/libifconfig.c @@ -57,6 +57,8 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * $FreeBSD$ */ #include @@ -80,19 +82,17 @@ { struct ifconfig_handle *h; - h = calloc(1, sizeof(struct ifconfig_handle)); - + h = calloc(1, sizeof(*h)); for (int i = 0; i <= AF_MAX; i++) { h->sockets[i] = -1; } - return (h); } - void ifconfig_close(ifconfig_handle_t *h) { + for (int i = 0; i <= AF_MAX; i++) { if (h->sockets[i] != -1) { (void)close(h->sockets[i]); @@ -101,37 +101,40 @@ free(h); } - ifconfig_errtype ifconfig_err_errtype(ifconfig_handle_t *h) { + return (h->error.errtype); } - int ifconfig_err_errno(ifconfig_handle_t *h) { + return (h->error.errcode); } - unsigned long ifconfig_err_ioctlreq(ifconfig_handle_t *h) { + return (h->error.ioctl_request); } - int -ifconfig_get_description(ifconfig_handle_t *h, const char *name, char **description) +ifconfig_get_description(ifconfig_handle_t *h, const char *name, + char **description) { struct ifreq ifr; - char *descr = NULL; - size_t descrlen = 64; + char *descr; + size_t descrlen; - memset(&ifr, 0, sizeof(struct ifreq)); + descr = NULL; + descrlen = 64; + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + for (;;) { if ((descr = reallocf(descr, descrlen)) == NULL) { h->error.errtype = OTHER; @@ -141,8 +144,7 @@ ifr.ifr_buffer.buffer = descr; ifr.ifr_buffer.length = descrlen; - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFDESCR, - &ifr) != 0) { + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFDESCR, &ifr) != 0) { return (-1); } @@ -164,7 +166,6 @@ return (-1); } - int ifconfig_set_description(ifconfig_handle_t *h, const char *name, const char *newdescription) @@ -172,7 +173,7 @@ struct ifreq ifr; int desclen; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); desclen = strlen(newdescription); /* @@ -184,46 +185,49 @@ } (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); - ifr.ifr_buffer.length = desclen + 1; ifr.ifr_buffer.buffer = strdup(newdescription); + if (ifr.ifr_buffer.buffer == NULL) { h->error.errtype = OTHER; h->error.errcode = ENOMEM; return (-1); } - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFDESCR, &ifr) != 0) { + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFDESCR, + &ifr) != 0) { free(ifr.ifr_buffer.buffer); return (-1); } + free(ifr.ifr_buffer.buffer); return (0); } - -int ifconfig_unset_description(ifconfig_handle_t *h, const char *name) +int +ifconfig_unset_description(ifconfig_handle_t *h, const char *name) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); ifr.ifr_buffer.length = 0; ifr.ifr_buffer.buffer = NULL; - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFDESCR, &ifr) < 0) { + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFDESCR, + &ifr) < 0) { return (-1); } return (0); } - -int ifconfig_set_name(ifconfig_handle_t *h, const char *name, const char *newname) +int +ifconfig_set_name(ifconfig_handle_t *h, const char *name, const char *newname) { struct ifreq ifr; char *tmpname; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); tmpname = strdup(newname); if (tmpname == NULL) { h->error.errtype = OTHER; @@ -233,82 +237,96 @@ (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); ifr.ifr_data = tmpname; - - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFNAME, &ifr) != 0) { + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFNAME, + &ifr) != 0) { free(tmpname); return (-1); } + free(tmpname); return (0); } - -int ifconfig_set_mtu(ifconfig_handle_t *h, const char *name, const int mtu) +int +ifconfig_set_mtu(ifconfig_handle_t *h, const char *name, const int mtu) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); ifr.ifr_mtu = mtu; - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFMTU, &ifr) < 0) { + + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFMTU, + &ifr) < 0) { return (-1); } + return (0); } - -int ifconfig_get_mtu(ifconfig_handle_t *h, const char *name, int *mtu) +int +ifconfig_get_mtu(ifconfig_handle_t *h, const char *name, int *mtu) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFMTU, &ifr) == -1) { + + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFMTU, + &ifr) == -1) { return (-1); } + *mtu = ifr.ifr_mtu; return (0); } - -int ifconfig_set_metric(ifconfig_handle_t *h, const char *name, const int mtu) +int +ifconfig_set_metric(ifconfig_handle_t *h, const char *name, const int mtu) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); ifr.ifr_mtu = mtu; - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFMETRIC, &ifr) < 0) { + + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFMETRIC, + &ifr) < 0) { return (-1); } + return (0); } - -int ifconfig_get_metric(ifconfig_handle_t *h, const char *name, int *metric) +int +ifconfig_get_metric(ifconfig_handle_t *h, const char *name, int *metric) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFMETRIC, &ifr) == -1) { + + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFMETRIC, + &ifr) == -1) { return (-1); } + *metric = ifr.ifr_metric; return (0); } - -int ifconfig_set_capability(ifconfig_handle_t *h, const char *name, +int +ifconfig_set_capability(ifconfig_handle_t *h, const char *name, const int capability) { struct ifreq ifr; struct ifconfig_capabilities ifcap; - int flags; - int value; + int flags, value; - memset(&ifr, 0, sizeof(struct ifreq)); - if (ifconfig_get_capability(h, name, &ifcap) != 0) { + memset(&ifr, 0, sizeof(ifr)); + + if (ifconfig_get_capability(h, name, + &ifcap) != 0) { return (-1); } @@ -329,22 +347,24 @@ * set for this request. */ ifr.ifr_reqcap = flags; - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFCAP, &ifr) < 0) { + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCSIFCAP, + &ifr) < 0) { return (-1); } return (0); } - -int ifconfig_get_capability(ifconfig_handle_t *h, const char *name, +int +ifconfig_get_capability(ifconfig_handle_t *h, const char *name, struct ifconfig_capabilities *capability) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFCAP, &ifr) < 0) { + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCGIFCAP, + &ifr) < 0) { return (-1); } capability->curcap = ifr.ifr_curcap; @@ -352,26 +372,27 @@ return (0); } - -int ifconfig_destroy_interface(ifconfig_handle_t *h, const char *name) +int +ifconfig_destroy_interface(ifconfig_handle_t *h, const char *name) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCIFDESTROY, &ifr) < 0) { + if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCIFDESTROY, + &ifr) < 0) { return (-1); } return (0); } - -int ifconfig_create_interface(ifconfig_handle_t *h, const char *name, char **ifname) +int +ifconfig_create_interface(ifconfig_handle_t *h, const char *name, char **ifname) { struct ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); (void)strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); /* @@ -379,19 +400,22 @@ * Insert special snowflake handling here. See GitHub issue #12 for details. * In the meantime, hard-nosupport interfaces that need special handling. */ - if ((strncmp(name, "wlan", strlen("wlan")) == 0) || - (strncmp(name, "vlan", strlen("vlan")) == 0) || - (strncmp(name, "vxlan", strlen("vxlan")) == 0)) { + if ((strncmp(name, "wlan", + strlen("wlan")) == 0) || + (strncmp(name, "vlan", + strlen("vlan")) == 0) || + (strncmp(name, "vxlan", + strlen("vxlan")) == 0)) { h->error.errtype = OTHER; h->error.errcode = ENOSYS; return (-1); } /* No special handling for this interface type. */ - if (ifconfig_ioctlwrap(h, AF_LOCAL, SIOCIFCREATE2, &ifr) < 0) { return (-1); } + *ifname = strdup(ifr.ifr_name); return (0); } Index: head/lib/libifconfig/libifconfig_internal.h =================================================================== --- head/lib/libifconfig/libifconfig_internal.h +++ head/lib/libifconfig/libifconfig_internal.h @@ -12,10 +12,6 @@ * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -80,7 +76,8 @@ int ifconfig_socket(ifconfig_handle_t *h, const int addressfamily, int *s); /** Function used by other wrapper functions to populate _errstate when appropriate.*/ -int ifconfig_ioctlwrap_ret(ifconfig_handle_t *h, unsigned long request, int rcode); +int ifconfig_ioctlwrap_ret(ifconfig_handle_t *h, unsigned long request, + int rcode); /** Function to wrap ioctl() and automatically populate ifconfig_errstate when appropriate.*/ int ifconfig_ioctlwrap(ifconfig_handle_t *h, const int addressfamily, Index: head/lib/libifconfig/libifconfig_internal.c =================================================================== --- head/lib/libifconfig/libifconfig_internal.c +++ head/lib/libifconfig/libifconfig_internal.c @@ -12,10 +12,6 @@ * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,31 +26,32 @@ * $FreeBSD$ */ +#include #include #include #include #include -#include #include - #include "libifconfig.h" // Needed for ifconfig_errstate #include "libifconfig_internal.h" + int ifconfig_ioctlwrap_ret(ifconfig_handle_t *h, unsigned long request, int rcode) { + if (rcode != 0) { h->error.errtype = IOCTL; h->error.ioctl_request = request; h->error.errcode = errno; } + return (rcode); } - int ifconfig_ioctlwrap(ifconfig_handle_t *h, const int addressfamily, unsigned long request, struct ifreq *ifr) @@ -69,13 +66,14 @@ return (ifconfig_ioctlwrap_ret(h, request, rcode)); } - /* * Function to get socket for the specified address family. * If the socket doesn't already exist, attempt to create it. */ -int ifconfig_socket(ifconfig_handle_t *h, const int addressfamily, int *s) +int +ifconfig_socket(ifconfig_handle_t *h, const int addressfamily, int *s) { + if (addressfamily > AF_MAX) { h->error.errtype = SOCKET; h->error.errcode = EINVAL; Index: head/share/examples/libifconfig/ifcreate.c =================================================================== --- head/share/examples/libifconfig/ifcreate.c +++ head/share/examples/libifconfig/ifcreate.c @@ -12,10 +12,6 @@ * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,16 +36,17 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { + char *ifname, *ifactualname; + if (argc != 2) { errx(EINVAL, "Invalid number of arguments." " Only one argument is accepted, and it should be the name" " of the interface to be created."); } - char *ifname, *ifactualname; - /* We have a static number of arguments. Therefore we can do it simple. */ ifname = strdup(argv[1]); @@ -63,31 +60,31 @@ free(ifname); free(ifactualname); return (0); - } else { - switch (ifconfig_err_errtype(lifh)) { - case SOCKET: - warnx("couldn't create socket. This shouldn't happen.\n"); - break; - case IOCTL: - if (ifconfig_err_ioctlreq(lifh) == SIOCIFCREATE2) { - warnx( - "Failed to create interface (SIOCIFCREATE2)\n"); - } - break; - default: + } + + switch (ifconfig_err_errtype(lifh)) { + case SOCKET: + warnx("couldn't create socket. This shouldn't happen.\n"); + break; + case IOCTL: + if (ifconfig_err_ioctlreq(lifh) == SIOCIFCREATE2) { warnx( - "This is a thorough example accommodating for temporary" - " 'not implemented yet' errors. That's likely what happened" - " now. If not, your guess is as good as mine. ;)" - " Error code: %d\n", ifconfig_err_errno( - lifh)); - break; + "Failed to create interface (SIOCIFCREATE2)\n"); } - - ifconfig_close(lifh); - lifh = NULL; - free(ifname); - free(ifactualname); - return (-1); + break; + default: + warnx( + "This is a thorough example accommodating for temporary" + " 'not implemented yet' errors. That's likely what happened" + " now. If not, your guess is as good as mine. ;)" + " Error code: %d\n", ifconfig_err_errno( + lifh)); + break; } + + ifconfig_close(lifh); + lifh = NULL; + free(ifname); + free(ifactualname); + return (-1); } Index: head/share/examples/libifconfig/ifdestroy.c =================================================================== --- head/share/examples/libifconfig/ifdestroy.c +++ head/share/examples/libifconfig/ifdestroy.c @@ -12,10 +12,6 @@ * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,16 +36,17 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { + char *ifname; + if (argc != 2) { errx(EINVAL, "Invalid number of arguments." " Only one argument is accepted, and it should be the name" " of the interface to be destroyed."); } - char *ifname; - /* We have a static number of arguments. Therefore we can do it simple. */ ifname = strdup(argv[1]); @@ -62,26 +59,26 @@ lifh = NULL; free(ifname); return (0); - } else { - switch (ifconfig_err_errtype(lifh)) { - case SOCKET: - warnx("couldn't create socket. This shouldn't happen.\n"); - break; - case IOCTL: - if (ifconfig_err_ioctlreq(lifh) == SIOCIFDESTROY) { - warnx( - "Failed to destroy interface (SIOCIFDESTROY)\n"); - } - break; - default: + } + + switch (ifconfig_err_errtype(lifh)) { + case SOCKET: + warnx("couldn't create socket. This shouldn't happen.\n"); + break; + case IOCTL: + if (ifconfig_err_ioctlreq(lifh) == SIOCIFDESTROY) { warnx( - "Should basically never end up here in this example.\n"); - break; + "Failed to destroy interface (SIOCIFDESTROY)\n"); } - - ifconfig_close(lifh); - lifh = NULL; - free(ifname); - return (-1); + break; + default: + warnx( + "Should basically never end up here in this example.\n"); + break; } + + ifconfig_close(lifh); + lifh = NULL; + free(ifname); + return (-1); } Index: head/share/examples/libifconfig/setdescription.c =================================================================== --- head/share/examples/libifconfig/setdescription.c +++ head/share/examples/libifconfig/setdescription.c @@ -12,10 +12,6 @@ * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,15 +34,17 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { + char *ifname, *ifdescr, *curdescr; + if (argc != 3) { errx(EINVAL, "Invalid number of arguments." " First argument should be interface name, second argument" " should be the description to set."); } - char *ifname, *ifdescr, *curdescr; /* We have a static number of arguments. Therefore we can do it simple. */ ifname = strdup(argv[1]); ifdescr = strdup(argv[2]); Index: head/share/examples/libifconfig/setmtu.c =================================================================== --- head/share/examples/libifconfig/setmtu.c +++ head/share/examples/libifconfig/setmtu.c @@ -12,9 +12,6 @@ * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, @@ -40,17 +37,18 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { + char *ifname, *ptr; + int mtu; + if (argc != 3) { errx(EINVAL, "Invalid number of arguments." " First argument should be interface name, second argument" " should be the MTU to set."); } - char *ifname, *ptr; - int mtu; - /* We have a static number of arguments. Therefore we can do it simple. */ ifname = strdup(argv[1]); mtu = (int)strtol(argv[2], &ptr, 10); @@ -65,30 +63,30 @@ lifh = NULL; free(ifname); return (0); - } else { - switch (ifconfig_err_errtype(lifh)) { - case SOCKET: - warnx("couldn't create socket. This shouldn't happen.\n"); - break; - case IOCTL: - if (ifconfig_err_ioctlreq(lifh) == SIOCSIFMTU) { - warnx("Failed to set MTU (SIOCSIFMTU)\n"); - } else { - warnx( - "Failed to set MTU due to error in unexpected ioctl() call %lu. Error code: %i.\n", - ifconfig_err_ioctlreq(lifh), - ifconfig_err_errno(lifh)); - } - break; - default: + } + + switch (ifconfig_err_errtype(lifh)) { + case SOCKET: + warnx("couldn't create socket. This shouldn't happen.\n"); + break; + case IOCTL: + if (ifconfig_err_ioctlreq(lifh) == SIOCSIFMTU) { + warnx("Failed to set MTU (SIOCSIFMTU)\n"); + } else { warnx( - "Should basically never end up here in this example.\n"); - break; + "Failed to set MTU due to error in unexpected ioctl() call %lu. Error code: %i.\n", + ifconfig_err_ioctlreq(lifh), + ifconfig_err_errno(lifh)); } - - ifconfig_close(lifh); - lifh = NULL; - free(ifname); - return (-1); + break; + default: + warnx( + "Should basically never end up here in this example.\n"); + break; } + + ifconfig_close(lifh); + lifh = NULL; + free(ifname); + return (-1); }