diff options
| author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2020-12-09 20:13:12 +0000 |
|---|---|---|
| committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2020-12-09 20:13:12 +0000 |
| commit | 21f5dc86d356acdf4ce173f19f46edc5dbb00f01 (patch) | |
| tree | 67b34c36cd8269fc26e6125252e36797ff3844f7 | |
| parent | ee47a12a490f89226ae736f92d8578ec1ca3b157 (diff) | |
Notes
| -rw-r--r-- | sbin/ifconfig/ifclone.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/sbin/ifconfig/ifclone.c b/sbin/ifconfig/ifclone.c index 268cc0a28180..ad39bd43757a 100644 --- a/sbin/ifconfig/ifclone.c +++ b/sbin/ifconfig/ifclone.c @@ -128,32 +128,32 @@ ifclonecreate(int s, void *arg) { struct ifreq ifr; struct clone_defcb *dcp; - clone_callback_func *clone_cb = NULL; memset(&ifr, 0, sizeof(ifr)); (void) strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); - if (clone_cb == NULL) { - /* Try to find a default callback */ + /* Try to find a default callback by filter */ + SLIST_FOREACH(dcp, &clone_defcbh, next) { + if (dcp->clone_mt == MT_FILTER && + dcp->ifmatch(ifr.ifr_name) != 0) + break; + } + + if (dcp == NULL) { + /* Try to find a default callback by prefix */ SLIST_FOREACH(dcp, &clone_defcbh, next) { - if ((dcp->clone_mt == MT_PREFIX) && - (strncmp(dcp->ifprefix, ifr.ifr_name, - strlen(dcp->ifprefix)) == 0)) { - clone_cb = dcp->clone_cb; + if (dcp->clone_mt == MT_PREFIX && + strncmp(dcp->ifprefix, ifr.ifr_name, + strlen(dcp->ifprefix)) == 0) break; - } - if ((dcp->clone_mt == MT_FILTER) && - dcp->ifmatch(ifr.ifr_name)) { - clone_cb = dcp->clone_cb; - break; - } } } - if (clone_cb == NULL) { + + if (dcp == NULL || dcp->clone_cb == NULL) { /* NB: no parameters */ ioctl_ifcreate(s, &ifr); } else { - clone_cb(s, &ifr); + dcp->clone_cb(s, &ifr); } /* |
