From ead1ba3513b258880e14307150ba9c012d95b428 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 15 Feb 2016 13:28:52 +0000 Subject: [PATCH] Initial commit FossilOrigin-Name: 0a55db6c3b5c061507e8a6e89ebfd0efc7fd2fdce4ee43db9e2aea9ed5e6b081 --- src/capwap/sock_getifinfo.c | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/capwap/sock_getifinfo.c diff --git a/src/capwap/sock_getifinfo.c b/src/capwap/sock_getifinfo.c new file mode 100644 index 00000000..96f3843a --- /dev/null +++ b/src/capwap/sock_getifinfo.c @@ -0,0 +1,66 @@ +/* + This file is part of libcapwap. + + libcapwap is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + libcapwap is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with libcapwap. If not, see . +*/ + +/** + *@file + *@brief Implementation of sock_getbroadcastaddr + */ + + +#include +#include + +#include "sock.h" + +/** + * Get the broadcast adddress + * @param addr address to search + * @param broadcastaddr receives the resulting broadcast address + * @return 1 if successful, 0 if no braodcast address was determined + */ +int sock_getifinfo(const struct sockaddr *addr, char *ifname, struct sockaddr *broadcast, + struct sockaddr *netmask) +{ + struct ifaddrs *ifap, *ifa; + + if (getifaddrs(&ifap) == -1) + return 0; + + int rc = 0; + for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { + + if (sock_cmpaddr(addr, ifa->ifa_addr, 0)) + continue; + + if (addr->sa_family == AF_INET ) { + + if (broadcast) + memcpy(broadcast, ifa->ifa_broadaddr, + sock_addrlen(ifa->ifa_broadaddr)); + if (netmask) + memcpy(netmask, ifa->ifa_netmask, + sock_addrlen(ifa->ifa_netmask)); + } + if (ifname) + strcpy(ifname, ifa->ifa_name); //, strlen(ifa->ifa_name)); + + rc = 1; + break; + } + freeifaddrs(ifap); + return rc; +}