Index: lib/libifconfig/libifconfig.h =================================================================== --- lib/libifconfig/libifconfig.h +++ 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: lib/libifconfig/libifconfig.c =================================================================== --- lib/libifconfig/libifconfig.c +++ lib/libifconfig/libifconfig.c @@ -1,38 +1,7 @@ /* - * Copyright (c) 2016, Marie Helene Kvello-Aune - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * thislist of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * 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 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 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$ - */ - -/* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. + * Copyright (c) 2016, Marie Helene Kvello-Aune. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,6 +26,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 +51,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 +70,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 +113,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 +135,6 @@ return (-1); } - int ifconfig_set_description(ifconfig_handle_t *h, const char *name, const char *newdescription) @@ -172,7 +142,7 @@ struct ifreq ifr; int desclen; - memset(&ifr, 0, sizeof(struct ifreq)); + memset(&ifr, 0, sizeof(ifr)); desclen = strlen(newdescription); /* @@ -184,46 +154,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 +206,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 +316,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 +341,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 +369,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: lib/libifconfig/libifconfig_internal.h =================================================================== --- lib/libifconfig/libifconfig_internal.h +++ 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: lib/libifconfig/libifconfig_internal.c =================================================================== --- lib/libifconfig/libifconfig_internal.c +++ 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 @@ -43,21 +39,25 @@ #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) +ifconfig_ioctlwrap(ifconfig_handle_t *h, + const int addressfamily, + unsigned long request, + struct ifreq *ifr) { int s; @@ -69,13 +69,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: share/examples/libifconfig/ifcreate.c =================================================================== --- share/examples/libifconfig/ifcreate.c +++ 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,7 +36,8 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { if (argc != 2) { errx(EINVAL, "Invalid number of arguments." Index: share/examples/libifconfig/ifdestroy.c =================================================================== --- share/examples/libifconfig/ifdestroy.c +++ 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,7 +36,8 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { if (argc != 2) { errx(EINVAL, "Invalid number of arguments." Index: share/examples/libifconfig/setdescription.c =================================================================== --- share/examples/libifconfig/setdescription.c +++ 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,7 +34,8 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { if (argc != 3) { errx(EINVAL, "Invalid number of arguments." Index: share/examples/libifconfig/setmtu.c =================================================================== --- share/examples/libifconfig/setmtu.c +++ 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,7 +37,8 @@ #include -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { if (argc != 3) { errx(EINVAL, "Invalid number of arguments."