mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-31 14:07:16 +00:00
Remove all use of inet_pton and inet_ntop
The inet_pton and inet_ntop functions are obsolete, replaced by getaddrinfo+getnameinfo with the AI_NUMERICHOST flag set. These can be accessed via the virSocket APIs. The bridge.c code had methods for fetching the IP address of a bridge which used inet_ntop. Aside from the use of inet_ntop these methods are broken, because a NIC can have multiple addresses and this only returns one address. Since the methods are never used, just remove them. * src/conf/network_conf.c, src/nwfilter/nwfilter_learnipaddr.c: Replace inet_pton and inet_ntop with virSocket APIs * src/util/bridge.c, src/util/bridge.h: Remove unused methods which called inet_ntop.
This commit is contained in:
parent
640c5f1984
commit
a8ae7d19f4
@ -278,7 +278,7 @@ virNetworkDHCPRangeDefParseXML(virNetworkDefPtr def,
|
|||||||
xmlStrEqual(cur->name, BAD_CAST "host")) {
|
xmlStrEqual(cur->name, BAD_CAST "host")) {
|
||||||
xmlChar *mac, *name, *ip;
|
xmlChar *mac, *name, *ip;
|
||||||
unsigned char addr[6];
|
unsigned char addr[6];
|
||||||
struct in_addr inaddress;
|
virSocketAddr inaddr;
|
||||||
|
|
||||||
mac = xmlGetProp(cur, BAD_CAST "mac");
|
mac = xmlGetProp(cur, BAD_CAST "mac");
|
||||||
if ((mac != NULL) &&
|
if ((mac != NULL) &&
|
||||||
@ -305,10 +305,7 @@ virNetworkDHCPRangeDefParseXML(virNetworkDefPtr def,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ip = xmlGetProp(cur, BAD_CAST "ip");
|
ip = xmlGetProp(cur, BAD_CAST "ip");
|
||||||
if (inet_pton(AF_INET, (const char *) ip, &inaddress) <= 0) {
|
if (virSocketParseAddr((const char *)ip, &inaddr, AF_UNSPEC) < 0) {
|
||||||
virNetworkReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("cannot parse IP address '%s'"),
|
|
||||||
ip);
|
|
||||||
VIR_FREE(ip);
|
VIR_FREE(ip);
|
||||||
VIR_FREE(mac);
|
VIR_FREE(mac);
|
||||||
VIR_FREE(name);
|
VIR_FREE(name);
|
||||||
@ -428,31 +425,34 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
|
|||||||
def->netmask = virXPathString("string(./ip[1]/@netmask)", ctxt);
|
def->netmask = virXPathString("string(./ip[1]/@netmask)", ctxt);
|
||||||
if (def->ipAddress &&
|
if (def->ipAddress &&
|
||||||
def->netmask) {
|
def->netmask) {
|
||||||
/* XXX someday we want IPv6 too, so inet_aton won't work there */
|
virSocketAddr inaddress, innetmask;
|
||||||
struct in_addr inaddress, innetmask;
|
|
||||||
char *netaddr;
|
char *netaddr;
|
||||||
xmlNodePtr ip;
|
xmlNodePtr ip;
|
||||||
|
|
||||||
if (inet_pton(AF_INET, def->ipAddress, &inaddress) <= 0) {
|
if (virSocketParseAddr(def->ipAddress, &inaddress, AF_UNSPEC) < 0)
|
||||||
virNetworkReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("cannot parse IP address '%s'"),
|
|
||||||
def->ipAddress);
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
if (virSocketParseAddr(def->netmask, &innetmask, AF_UNSPEC) < 0)
|
||||||
if (inet_pton(AF_INET, def->netmask, &innetmask) <= 0) {
|
goto error;
|
||||||
virNetworkReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("cannot parse netmask '%s'"),
|
/* XXX someday we want IPv6, so will need to relax this */
|
||||||
def->netmask);
|
if (inaddress.data.sa.sa_family != AF_INET ||
|
||||||
|
innetmask.data.sa.sa_family != AF_INET) {
|
||||||
|
virNetworkReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
"%s", _("Only IPv4 addresses are supported"));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
inaddress.s_addr &= innetmask.s_addr;
|
inaddress.data.inet4.sin_addr.s_addr &=
|
||||||
netaddr = inet_ntoa(inaddress);
|
innetmask.data.inet4.sin_addr.s_addr;
|
||||||
|
if (!(netaddr = virSocketFormatAddr(&inaddress)))
|
||||||
|
goto error;
|
||||||
|
|
||||||
if (virAsprintf(&def->network, "%s/%s", netaddr, def->netmask) < 0) {
|
if (virAsprintf(&def->network, "%s/%s", netaddr, def->netmask) < 0) {
|
||||||
|
VIR_FREE(netaddr);
|
||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
VIR_FREE(netaddr);
|
||||||
|
|
||||||
if ((ip = virXPathNode("./ip[1]", ctxt)) &&
|
if ((ip = virXPathNode("./ip[1]", ctxt)) &&
|
||||||
virNetworkIPParseXML(def, ip) < 0)
|
virNetworkIPParseXML(def, ip) < 0)
|
||||||
|
@ -627,10 +627,14 @@ learnIPAddressThread(void *arg)
|
|||||||
|
|
||||||
if (req->status == 0) {
|
if (req->status == 0) {
|
||||||
int ret;
|
int ret;
|
||||||
char inetaddr[INET_ADDRSTRLEN];
|
virSocketAddr sa;
|
||||||
inet_ntop(AF_INET, &vmaddr, inetaddr, sizeof(inetaddr));
|
sa.len = sizeof(sa.data.inet4);
|
||||||
|
sa.data.inet4.sin_family = AF_INET;
|
||||||
|
sa.data.inet4.sin_addr.s_addr = vmaddr;
|
||||||
|
char *inetaddr;
|
||||||
|
|
||||||
virNWFilterAddIpAddrForIfname(req->ifname, strdup(inetaddr));
|
if ((inetaddr = virSocketFormatAddr(&sa))!= NULL) {
|
||||||
|
virNWFilterAddIpAddrForIfname(req->ifname, inetaddr);
|
||||||
|
|
||||||
ret = virNWFilterInstantiateFilterLate(NULL,
|
ret = virNWFilterInstantiateFilterLate(NULL,
|
||||||
req->ifname,
|
req->ifname,
|
||||||
@ -643,6 +647,7 @@ learnIPAddressThread(void *arg)
|
|||||||
req->driver);
|
req->driver);
|
||||||
VIR_DEBUG("Result from applying firewall rules on "
|
VIR_DEBUG("Result from applying firewall rules on "
|
||||||
"%s with IP addr %s : %d\n", req->ifname, inetaddr, ret);
|
"%s with IP addr %s : %d\n", req->ifname, inetaddr, ret);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (showError)
|
if (showError)
|
||||||
virReportSystemError(req->status,
|
virReportSystemError(req->status,
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
# include "memory.h"
|
# include "memory.h"
|
||||||
# include "util.h"
|
# include "util.h"
|
||||||
# include "logging.h"
|
# include "logging.h"
|
||||||
|
# include "network.h"
|
||||||
|
|
||||||
# define JIFFIES_TO_MS(j) (((j)*1000)/HZ)
|
# define JIFFIES_TO_MS(j) (((j)*1000)/HZ)
|
||||||
# define MS_TO_JIFFIES(ms) (((ms)*HZ)/1000)
|
# define MS_TO_JIFFIES(ms) (((ms)*HZ)/1000)
|
||||||
@ -660,13 +661,8 @@ brSetInetAddr(brControl *ctl,
|
|||||||
int cmd,
|
int cmd,
|
||||||
const char *addr)
|
const char *addr)
|
||||||
{
|
{
|
||||||
union {
|
virSocketAddr sa;
|
||||||
struct sockaddr sa;
|
|
||||||
struct sockaddr_in sa_in;
|
|
||||||
} s;
|
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
struct in_addr inaddr;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!ctl || !ctl->fd || !ifname || !addr)
|
if (!ctl || !ctl->fd || !ifname || !addr)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
@ -676,15 +672,13 @@ brSetInetAddr(brControl *ctl,
|
|||||||
if (virStrcpyStatic(ifr.ifr_name, ifname) == NULL)
|
if (virStrcpyStatic(ifr.ifr_name, ifname) == NULL)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
if ((ret = inet_pton(AF_INET, addr, &inaddr)) < 0)
|
if (virSocketParseAddr(addr, &sa, AF_UNSPEC) < 0)
|
||||||
return errno;
|
|
||||||
else if (ret == 0)
|
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
s.sa_in.sin_family = AF_INET;
|
if (sa.data.sa.sa_family != AF_INET)
|
||||||
s.sa_in.sin_addr = inaddr;
|
return EINVAL;
|
||||||
|
|
||||||
ifr.ifr_addr = s.sa;
|
ifr.ifr_addr = sa.data.sa;
|
||||||
|
|
||||||
if (ioctl(ctl->fd, cmd, &ifr) < 0)
|
if (ioctl(ctl->fd, cmd, &ifr) < 0)
|
||||||
return errno;
|
return errno;
|
||||||
@ -692,38 +686,6 @@ brSetInetAddr(brControl *ctl,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
brGetInetAddr(brControl *ctl,
|
|
||||||
const char *ifname,
|
|
||||||
int cmd,
|
|
||||||
char *addr,
|
|
||||||
int maxlen)
|
|
||||||
{
|
|
||||||
struct ifreq ifr;
|
|
||||||
struct in_addr *inaddr;
|
|
||||||
|
|
||||||
if (!ctl || !ctl->fd || !ifname || !addr)
|
|
||||||
return EINVAL;
|
|
||||||
|
|
||||||
memset(&ifr, 0, sizeof(struct ifreq));
|
|
||||||
|
|
||||||
if (virStrcpyStatic(ifr.ifr_name, ifname) == NULL)
|
|
||||||
return EINVAL;
|
|
||||||
|
|
||||||
if (ioctl(ctl->fd, cmd, &ifr) < 0)
|
|
||||||
return errno;
|
|
||||||
|
|
||||||
if (maxlen < BR_INET_ADDR_MAXLEN || ifr.ifr_addr.sa_family != AF_INET)
|
|
||||||
return EFAULT;
|
|
||||||
|
|
||||||
inaddr = &((struct sockaddr_in *)&ifr.ifr_data)->sin_addr;
|
|
||||||
|
|
||||||
if (!inet_ntop(AF_INET, inaddr, addr, maxlen))
|
|
||||||
return errno;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* brSetInetAddress:
|
* brSetInetAddress:
|
||||||
* @ctl: bridge control pointer
|
* @ctl: bridge control pointer
|
||||||
@ -745,29 +707,6 @@ brSetInetAddress(brControl *ctl,
|
|||||||
return brSetInetAddr(ctl, ifname, SIOCSIFADDR, addr);
|
return brSetInetAddr(ctl, ifname, SIOCSIFADDR, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* brGetInetAddress:
|
|
||||||
* @ctl: bridge control pointer
|
|
||||||
* @ifname: the interface name
|
|
||||||
* @addr: the array for the string representation of the IP address
|
|
||||||
* @maxlen: size of @addr in bytes
|
|
||||||
*
|
|
||||||
* Function to get the IP address of an interface, it should handle
|
|
||||||
* IPV4 and IPv6. The returned string for addr would be of the form
|
|
||||||
* "ddd.ddd.ddd.ddd" assuming the common IPv4 format.
|
|
||||||
*
|
|
||||||
* Returns 0 in case of success or an errno code in case of failure.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
brGetInetAddress(brControl *ctl,
|
|
||||||
const char *ifname,
|
|
||||||
char *addr,
|
|
||||||
int maxlen)
|
|
||||||
{
|
|
||||||
return brGetInetAddr(ctl, ifname, SIOCGIFADDR, addr, maxlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* brSetInetNetmask:
|
* brSetInetNetmask:
|
||||||
* @ctl: bridge control pointer
|
* @ctl: bridge control pointer
|
||||||
@ -789,30 +728,6 @@ brSetInetNetmask(brControl *ctl,
|
|||||||
return brSetInetAddr(ctl, ifname, SIOCSIFNETMASK, addr);
|
return brSetInetAddr(ctl, ifname, SIOCSIFNETMASK, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* brGetInetNetmask:
|
|
||||||
* @ctl: bridge control pointer
|
|
||||||
* @ifname: the interface name
|
|
||||||
* @addr: the array for the string representation of the netmask
|
|
||||||
* @maxlen: size of @addr in bytes
|
|
||||||
*
|
|
||||||
* Function to get the netmask of an interface, it should handle
|
|
||||||
* IPV4 and IPv6. The returned string for addr would be of the form
|
|
||||||
* "ddd.ddd.ddd.ddd" assuming the common IPv4 format.
|
|
||||||
*
|
|
||||||
* Returns 0 in case of success or an errno code in case of failure.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
brGetInetNetmask(brControl *ctl,
|
|
||||||
const char *ifname,
|
|
||||||
char *addr,
|
|
||||||
int maxlen)
|
|
||||||
{
|
|
||||||
return brGetInetAddr(ctl, ifname, SIOCGIFNETMASK, addr, maxlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* brSetForwardDelay:
|
* brSetForwardDelay:
|
||||||
* @ctl: bridge control pointer
|
* @ctl: bridge control pointer
|
||||||
|
@ -85,17 +85,9 @@ int brGetInterfaceUp (brControl *ctl,
|
|||||||
int brSetInetAddress (brControl *ctl,
|
int brSetInetAddress (brControl *ctl,
|
||||||
const char *ifname,
|
const char *ifname,
|
||||||
const char *addr);
|
const char *addr);
|
||||||
int brGetInetAddress (brControl *ctl,
|
|
||||||
const char *ifname,
|
|
||||||
char *addr,
|
|
||||||
int maxlen);
|
|
||||||
int brSetInetNetmask (brControl *ctl,
|
int brSetInetNetmask (brControl *ctl,
|
||||||
const char *ifname,
|
const char *ifname,
|
||||||
const char *netmask);
|
const char *netmask);
|
||||||
int brGetInetNetmask (brControl *ctl,
|
|
||||||
const char *ifname,
|
|
||||||
char *netmask,
|
|
||||||
int maxlen);
|
|
||||||
|
|
||||||
int brSetForwardDelay (brControl *ctl,
|
int brSetForwardDelay (brControl *ctl,
|
||||||
const char *bridge,
|
const char *bridge,
|
||||||
|
Loading…
Reference in New Issue
Block a user