mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
Move virNetDevGetIPv4Address to virnetdev.c
Move the virNetDevGetIPv4Address function to virnetdev.c * util/interface.c, util/interface.h: Remove virNetDevGetIPv4Address * util/virnetdev.c, util/virnetdev.h: Add virNetDevGetIPv4Address
This commit is contained in:
parent
50f190856d
commit
8e6cd41418
@ -141,69 +141,6 @@ ifaceCheck(bool reportError ATTRIBUTE_UNUSED,
|
|||||||
#endif /* __linux__ */
|
#endif /* __linux__ */
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* virNetDevGetIPv4Address:
|
|
||||||
* @ifname: name of the interface whose IP address we want
|
|
||||||
* @addr: filled with the IPv4 address
|
|
||||||
*
|
|
||||||
* This function gets the IPv4 address for the interface @ifname
|
|
||||||
* and stores it in @addr
|
|
||||||
*
|
|
||||||
* Returns 0 on success, -errno on failure.
|
|
||||||
*/
|
|
||||||
#ifdef __linux__
|
|
||||||
int virNetDevGetIPv4Address(const char *ifname,
|
|
||||||
virSocketAddrPtr addr)
|
|
||||||
{
|
|
||||||
struct ifreq ifr;
|
|
||||||
int fd;
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
memset (addr, 0, sizeof(*addr));
|
|
||||||
addr->data.stor.ss_family = AF_UNSPEC;
|
|
||||||
|
|
||||||
fd = socket(AF_INET, SOCK_STREAM, 0);
|
|
||||||
if (fd < 0) {
|
|
||||||
virReportSystemError(errno, "%s",
|
|
||||||
_("Unable to open control socket"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&ifr, 0, sizeof(struct ifreq));
|
|
||||||
if (virStrcpyStatic(ifr.ifr_name, ifname) == NULL) {
|
|
||||||
virReportSystemError(ERANGE,
|
|
||||||
_("invalid interface name %s"),
|
|
||||||
ifname);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(fd, SIOCGIFADDR, (char *)&ifr) < 0) {
|
|
||||||
virReportSystemError(errno,
|
|
||||||
_("Unable to get IPv4 address for interface %s"), ifname);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
addr->data.stor.ss_family = AF_INET;
|
|
||||||
addr->len = sizeof(addr->data.inet4);
|
|
||||||
memcpy(&addr->data.inet4, &ifr.ifr_addr, addr->len);
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
VIR_FORCE_CLOSE(fd);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
|
|
||||||
virSocketAddrPtr addr ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
virReportSystemError(ENOSYS, "%s",
|
|
||||||
_("Unable to get IPv4 address on this platform"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __linux__ */
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(__linux__) && defined(IFLA_PORT_MAX)
|
#if defined(__linux__) && defined(IFLA_PORT_MAX)
|
||||||
|
|
||||||
|
@ -33,9 +33,6 @@ struct nlattr;
|
|||||||
int ifaceCheck(bool reportError, const char *ifname,
|
int ifaceCheck(bool reportError, const char *ifname,
|
||||||
const unsigned char *macaddr, int ifindex);
|
const unsigned char *macaddr, int ifindex);
|
||||||
|
|
||||||
int virNetDevGetIPv4Address(const char *ifname, virSocketAddrPtr addr)
|
|
||||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
|
|
||||||
|
|
||||||
int ifaceMacvtapLinkDump(bool nltarget_kernel, const char *ifname, int ifindex,
|
int ifaceMacvtapLinkDump(bool nltarget_kernel, const char *ifname, int ifindex,
|
||||||
struct nlattr **tb, unsigned char **recvbuf,
|
struct nlattr **tb, unsigned char **recvbuf,
|
||||||
uint32_t (*getPidFunc)(void));
|
uint32_t (*getPidFunc)(void));
|
||||||
|
@ -803,3 +803,56 @@ cleanup:
|
|||||||
virCommandFree(cmd);
|
virCommandFree(cmd);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virNetDevGetIPv4Address:
|
||||||
|
* @ifname: name of the interface whose IP address we want
|
||||||
|
* @addr: filled with the IPv4 address
|
||||||
|
*
|
||||||
|
* This function gets the IPv4 address for the interface @ifname
|
||||||
|
* and stores it in @addr
|
||||||
|
*
|
||||||
|
* Returns 0 on success, -errno on failure.
|
||||||
|
*/
|
||||||
|
#ifdef __linux__
|
||||||
|
int virNetDevGetIPv4Address(const char *ifname,
|
||||||
|
virSocketAddrPtr addr)
|
||||||
|
{
|
||||||
|
int fd = -1;
|
||||||
|
int ret = -1;
|
||||||
|
struct ifreq ifr;
|
||||||
|
|
||||||
|
memset(addr, 0, sizeof(*addr));
|
||||||
|
addr->data.stor.ss_family = AF_UNSPEC;
|
||||||
|
|
||||||
|
if ((fd = virNetDevSetupControl(ifname, &ifr)) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (ioctl(fd, SIOCGIFADDR, (char *)&ifr) < 0) {
|
||||||
|
virReportSystemError(errno,
|
||||||
|
_("Unable to get IPv4 address for interface %s"), ifname);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
addr->data.stor.ss_family = AF_INET;
|
||||||
|
addr->len = sizeof(addr->data.inet4);
|
||||||
|
memcpy(&addr->data.inet4, &ifr.ifr_addr, addr->len);
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
VIR_FORCE_CLOSE(fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
|
||||||
|
virSocketAddrPtr addr ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
virReportSystemError(ENOSYS, "%s",
|
||||||
|
_("Unable to get IPv4 address on this platform"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __linux__ */
|
||||||
|
@ -43,6 +43,8 @@ int virNetDevClearIPv4Address(const char *ifname,
|
|||||||
virSocketAddr *addr,
|
virSocketAddr *addr,
|
||||||
unsigned int prefix)
|
unsigned int prefix)
|
||||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
int virNetDevGetIPv4Address(const char *ifname, virSocketAddrPtr addr)
|
||||||
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
|
||||||
|
|
||||||
int virNetDevSetMAC(const char *ifname,
|
int virNetDevSetMAC(const char *ifname,
|
||||||
|
Loading…
Reference in New Issue
Block a user