Re: [libvirt] [PATCH] network utilities: Add functions for address-text and get/set port number

2009-11-03 Thread Daniel Veillard
On Mon, Nov 02, 2009 at 03:46:12PM -0500, Laine Stump wrote:
 I'm a bit behind the curve, but...

 On 11/02/2009 05:57 AM, Matthew Booth wrote:
 ---
   src/libvirt_private.syms |3 ++
   src/util/network.c   |   88 
 +-
   src/util/network.h   |6 +++
   3 files changed, 96 insertions(+), 1 deletions(-)

 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
 index 8525dbd..15d75fd 100644
 --- a/src/libvirt_private.syms
 +++ b/src/libvirt_private.syms
 @@ -289,10 +289,13 @@ virFree;
   virSocketAddrInNetwork;
   virSocketAddrIsNetmask;
   virSocketCheckNetmask;
 +virSocketFormatAddr;
 +virSocketGetPort;
   virSocketGetRange;
   virSocketParseAddr;
   virSocketParseIpv4Addr;
   virSocketParseIpv6Addr;
 +virSocketSetPort;


   # network_conf.h
 diff --git a/src/util/network.c b/src/util/network.c
 index abd866c..094130f 100644
 --- a/src/util/network.c
 +++ b/src/util/network.c
 @@ -9,6 +9,7 @@
*/

   #includeconfig.h
 +#includearpa/inet.h

   #include memory.h
   #include network.h
 @@ -64,7 +65,7 @@ static int getIPv6Addr(virSocketAddrPtr addr, 
 virIPv6AddrPtr tab) {
* Mostly a wrapper for getaddrinfo() extracting the address storage
* from the numeric string like 1.2.3.4 or 2001:db8:85a3:0:0:8a2e:370:7334
*
 - * Returns the lenght of the network address or -1 in case of error.
 + * Returns the length of the network address or -1 in case of error.
*/
   int
   virSocketParseAddr(const char *val, virSocketAddrPtr addr, int hint) {
 @@ -116,6 +117,91 @@ virSocketParseIpv6Addr(const char *val, 
 virSocketAddrPtr addr) {
   return(virSocketParseAddr(val, addr, AF_INET6));
   }

 +/*
 + * virSocketFormatAddr:
 + * @addr: an initialised virSocketAddrPtr
 + *
 + * Returns a string representation of the given address
 + * Returns NULL on any error
 + * Caller must free the returned string
 + */
 +char *
 +virSocketFormatAddr(virSocketAddrPtr addr) {
 +char   *out;
 +size_t outlen;
 +void   *inaddr;
 +
 +if (addr-stor.ss_family == AF_INET) {
 +outlen = INET_ADDRSTRLEN;
 +inaddr =addr-inet4.sin_addr;
 +}
 +
 +else if (addr-stor.ss_family == AF_INET6) {
 +outlen = INET6_ADDRSTRLEN;
 +inaddr =addr-inet6.sin6_addr;
 +}
 +
 +else {
 +return NULL;
 +}
 +
 +if (VIR_ALLOC_N(out, outlen)  0)
 +return NULL;
 +
 +if (inet_ntop(addr-stor.ss_family, inaddr, out, outlen) == NULL) {
 +VIR_FREE(out);
 +return NULL;
 +}
 +
 +return out;
 +}
 +
 +/*
 + * virSocketSetPort:
 + * @addr: an initialised virSocketAddrPtr
 + * @port: the port number to set
 + *
 + * Set the transport layer port of the given virtSocketAddr
 + *
 + * Returns 0 on success, -1 on failure
 + */
 +int
 +virSocketSetPort(virSocketAddrPtr addr, in_port_t port) {
 +if(addr-stor.ss_family == AF_INET) {
 +addr-inet4.sin_port = port;



 sin_port needs to be in network byte order. Unless you're figuring on  
 the caller always remembering to do htons(), you might want to do it 
 here.


  Sound a good point, can you provide a small patch for those issues ?

Daniel

 +}
 +
 +else if(addr-stor.ss_family == AF_INET6) {
 +addr-inet6.sin6_port = port;


 Likewise.


 +}
 +
 +else {
 +return -1;
 +}
 +
 +return 0;
 +}
 +
 +/*
 + * virSocketGetPort:
 + * @addr: an initialised virSocketAddrPtr
 + *
 + * Returns the transport layer port of the given virtSocketAddr
 + * Returns 0 if @addr is invalid
 + */
 +in_port_t
 +virSocketGetPort(virSocketAddrPtr addr) {
 +if(addr-stor.ss_family == AF_INET) {
 +return addr-inet4.sin_port;


 Again, depending on how far you want this abstraction to go, you might  
 want to do ntohs of sin_port.

 +}
 +
 +else if(addr-stor.ss_family == AF_INET6) {
 +return addr-inet6.sin6_port;


 Ditto.

 +}
 +
 +return 0;
 +}
 +
   /**
* virSocketAddrIsNetmask:
* @netmask: the netmask address
 diff --git a/src/util/network.h b/src/util/network.h
 index e590747..7618547 100644
 --- a/src/util/network.h
 +++ b/src/util/network.h
 @@ -34,6 +34,12 @@ int virSocketParseIpv4Addr(const char *val,
   int virSocketParseIpv6Addr(const char *val,
  virSocketAddrPtr addr);

 +char * virSocketFormatAddr(virSocketAddrPtr addr);
 +
 +int virSocketSetPort(virSocketAddrPtr addr, in_port_t port);
 +
 +in_port_t virSocketGetPort(virSocketAddrPtr addr);
 +
   int virSocketAddrInNetwork(virSocketAddrPtr addr1,
  virSocketAddrPtr addr2,
  virSocketAddrPtr netmask);


 --
 Libvir-list mailing list
 Libvir-list@redhat.com
 https://www.redhat.com/mailman/listinfo/libvir-list

-- 
Daniel Veillard  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
dan...@veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  

[libvirt] [PATCH] network utilities: Add functions for address-text and get/set port number

2009-11-02 Thread Matthew Booth
---
 src/libvirt_private.syms |3 ++
 src/util/network.c   |   88 +-
 src/util/network.h   |6 +++
 3 files changed, 96 insertions(+), 1 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 8525dbd..15d75fd 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -289,10 +289,13 @@ virFree;
 virSocketAddrInNetwork;
 virSocketAddrIsNetmask;
 virSocketCheckNetmask;
+virSocketFormatAddr;
+virSocketGetPort;
 virSocketGetRange;
 virSocketParseAddr;
 virSocketParseIpv4Addr;
 virSocketParseIpv6Addr;
+virSocketSetPort;
 
 
 # network_conf.h
diff --git a/src/util/network.c b/src/util/network.c
index abd866c..094130f 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -9,6 +9,7 @@
  */
 
 #include config.h
+#include arpa/inet.h
 
 #include memory.h
 #include network.h
@@ -64,7 +65,7 @@ static int getIPv6Addr(virSocketAddrPtr addr, virIPv6AddrPtr 
tab) {
  * Mostly a wrapper for getaddrinfo() extracting the address storage
  * from the numeric string like 1.2.3.4 or 2001:db8:85a3:0:0:8a2e:370:7334
  *
- * Returns the lenght of the network address or -1 in case of error.
+ * Returns the length of the network address or -1 in case of error.
  */
 int
 virSocketParseAddr(const char *val, virSocketAddrPtr addr, int hint) {
@@ -116,6 +117,91 @@ virSocketParseIpv6Addr(const char *val, virSocketAddrPtr 
addr) {
 return(virSocketParseAddr(val, addr, AF_INET6));
 }
 
+/*
+ * virSocketFormatAddr:
+ * @addr: an initialised virSocketAddrPtr
+ *
+ * Returns a string representation of the given address
+ * Returns NULL on any error
+ * Caller must free the returned string
+ */
+char *
+virSocketFormatAddr(virSocketAddrPtr addr) {
+char   *out;
+size_t outlen;
+void   *inaddr;
+
+if (addr-stor.ss_family == AF_INET) {
+outlen = INET_ADDRSTRLEN;
+inaddr = addr-inet4.sin_addr;
+}
+
+else if (addr-stor.ss_family == AF_INET6) {
+outlen = INET6_ADDRSTRLEN;
+inaddr = addr-inet6.sin6_addr;
+}
+
+else {
+return NULL;
+}
+
+if (VIR_ALLOC_N(out, outlen)  0)
+return NULL;
+
+if (inet_ntop(addr-stor.ss_family, inaddr, out, outlen) == NULL) {
+VIR_FREE(out);
+return NULL;
+}
+
+return out;
+}
+
+/*
+ * virSocketSetPort:
+ * @addr: an initialised virSocketAddrPtr
+ * @port: the port number to set
+ *
+ * Set the transport layer port of the given virtSocketAddr
+ *
+ * Returns 0 on success, -1 on failure
+ */
+int
+virSocketSetPort(virSocketAddrPtr addr, in_port_t port) {
+if(addr-stor.ss_family == AF_INET) {
+addr-inet4.sin_port = port;
+}
+
+else if(addr-stor.ss_family == AF_INET6) {
+addr-inet6.sin6_port = port;
+}
+
+else {
+return -1;
+}
+
+return 0;
+}
+
+/*
+ * virSocketGetPort:
+ * @addr: an initialised virSocketAddrPtr
+ *
+ * Returns the transport layer port of the given virtSocketAddr
+ * Returns 0 if @addr is invalid
+ */
+in_port_t
+virSocketGetPort(virSocketAddrPtr addr) {
+if(addr-stor.ss_family == AF_INET) {
+return addr-inet4.sin_port;
+}
+
+else if(addr-stor.ss_family == AF_INET6) {
+return addr-inet6.sin6_port;
+}
+
+return 0;
+}
+
 /**
  * virSocketAddrIsNetmask:
  * @netmask: the netmask address
diff --git a/src/util/network.h b/src/util/network.h
index e590747..7618547 100644
--- a/src/util/network.h
+++ b/src/util/network.h
@@ -34,6 +34,12 @@ int virSocketParseIpv4Addr(const char *val,
 int virSocketParseIpv6Addr(const char *val,
virSocketAddrPtr addr);
 
+char * virSocketFormatAddr(virSocketAddrPtr addr);
+
+int virSocketSetPort(virSocketAddrPtr addr, in_port_t port);
+
+in_port_t virSocketGetPort(virSocketAddrPtr addr);
+
 int virSocketAddrInNetwork(virSocketAddrPtr addr1,
virSocketAddrPtr addr2,
virSocketAddrPtr netmask);
-- 
1.6.2.5

--
Libvir-list mailing list
Libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] network utilities: Add functions for address-text and get/set port number

2009-11-02 Thread Daniel Veillard
On Mon, Nov 02, 2009 at 10:57:11AM +, Matthew Booth wrote:
 ---
  src/libvirt_private.syms |3 ++
  src/util/network.c   |   88 
 +-
  src/util/network.h   |6 +++
  3 files changed, 96 insertions(+), 1 deletions(-)
 
 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
 index 8525dbd..15d75fd 100644
 --- a/src/libvirt_private.syms
 +++ b/src/libvirt_private.syms
 @@ -289,10 +289,13 @@ virFree;
  virSocketAddrInNetwork;
  virSocketAddrIsNetmask;
  virSocketCheckNetmask;
 +virSocketFormatAddr;
 +virSocketGetPort;
  virSocketGetRange;
  virSocketParseAddr;
  virSocketParseIpv4Addr;
  virSocketParseIpv6Addr;
 +virSocketSetPort;
  
  
  # network_conf.h
 diff --git a/src/util/network.c b/src/util/network.c
 index abd866c..094130f 100644
 --- a/src/util/network.c
 +++ b/src/util/network.c
 @@ -9,6 +9,7 @@
   */
  
  #include config.h
 +#include arpa/inet.h
  
  #include memory.h
  #include network.h
 @@ -64,7 +65,7 @@ static int getIPv6Addr(virSocketAddrPtr addr, 
 virIPv6AddrPtr tab) {
   * Mostly a wrapper for getaddrinfo() extracting the address storage
   * from the numeric string like 1.2.3.4 or 2001:db8:85a3:0:0:8a2e:370:7334
   *
 - * Returns the lenght of the network address or -1 in case of error.
 + * Returns the length of the network address or -1 in case of error.
   */
  int
  virSocketParseAddr(const char *val, virSocketAddrPtr addr, int hint) {
 @@ -116,6 +117,91 @@ virSocketParseIpv6Addr(const char *val, virSocketAddrPtr 
 addr) {
  return(virSocketParseAddr(val, addr, AF_INET6));
  }
  
 +/*
 + * virSocketFormatAddr:
 + * @addr: an initialised virSocketAddrPtr
 + *
 + * Returns a string representation of the given address
 + * Returns NULL on any error
 + * Caller must free the returned string
 + */
 +char *
 +virSocketFormatAddr(virSocketAddrPtr addr) {
 +char   *out;
 +size_t outlen;
 +void   *inaddr;
 +
 +if (addr-stor.ss_family == AF_INET) {
 +outlen = INET_ADDRSTRLEN;
 +inaddr = addr-inet4.sin_addr;
 +}
 +
 +else if (addr-stor.ss_family == AF_INET6) {
 +outlen = INET6_ADDRSTRLEN;
 +inaddr = addr-inet6.sin6_addr;
 +}
 +
 +else {
 +return NULL;
 +}
 +
 +if (VIR_ALLOC_N(out, outlen)  0)
 +return NULL;
 +
 +if (inet_ntop(addr-stor.ss_family, inaddr, out, outlen) == NULL) {
 +VIR_FREE(out);
 +return NULL;
 +}
 +
 +return out;
 +}
 +
 +/*
 + * virSocketSetPort:
 + * @addr: an initialised virSocketAddrPtr
 + * @port: the port number to set
 + *
 + * Set the transport layer port of the given virtSocketAddr
 + *
 + * Returns 0 on success, -1 on failure
 + */
 +int
 +virSocketSetPort(virSocketAddrPtr addr, in_port_t port) {
 +if(addr-stor.ss_family == AF_INET) {
 +addr-inet4.sin_port = port;
 +}
 +
 +else if(addr-stor.ss_family == AF_INET6) {
 +addr-inet6.sin6_port = port;
 +}
 +
 +else {
 +return -1;
 +}
 +
 +return 0;
 +}
 +
 +/*
 + * virSocketGetPort:
 + * @addr: an initialised virSocketAddrPtr
 + *
 + * Returns the transport layer port of the given virtSocketAddr
 + * Returns 0 if @addr is invalid
 + */
 +in_port_t
 +virSocketGetPort(virSocketAddrPtr addr) {
 +if(addr-stor.ss_family == AF_INET) {
 +return addr-inet4.sin_port;
 +}
 +
 +else if(addr-stor.ss_family == AF_INET6) {
 +return addr-inet6.sin6_port;
 +}
 +
 +return 0;
 +}
 +
  /**
   * virSocketAddrIsNetmask:
   * @netmask: the netmask address
 diff --git a/src/util/network.h b/src/util/network.h
 index e590747..7618547 100644
 --- a/src/util/network.h
 +++ b/src/util/network.h
 @@ -34,6 +34,12 @@ int virSocketParseIpv4Addr(const char *val,
  int virSocketParseIpv6Addr(const char *val,
 virSocketAddrPtr addr);
  
 +char * virSocketFormatAddr(virSocketAddrPtr addr);
 +
 +int virSocketSetPort(virSocketAddrPtr addr, in_port_t port);
 +
 +in_port_t virSocketGetPort(virSocketAddrPtr addr);
 +
  int virSocketAddrInNetwork(virSocketAddrPtr addr1,
 virSocketAddrPtr addr2,
 virSocketAddrPtr netmask);

  Looks fine to me except for the following:
- I'm a bit concerned by in_port_t portability, I would prefer to
  just use int there
- using int would allow to keep the usual convention of -1 as
  the error return value in virSocketGetPort, allowing to
  distinguish 0 as not set and -1 as input parameter error
- even if they are internal calls I would check the passed
  pointers against NULL in all the new routines.

  but looks like a good set to me :-)

Daniel

-- 
Daniel Veillard  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
dan...@veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/

--
Libvir-list mailing list
Libvir-list@redhat.com

[libvirt] [PATCH] network utilities: Add functions for address-text and get/set port number

2009-11-02 Thread Matthew Booth
---
 src/libvirt_private.syms |3 +
 src/util/network.c   |   97 +-
 src/util/network.h   |6 +++
 3 files changed, 105 insertions(+), 1 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 8525dbd..15d75fd 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -289,10 +289,13 @@ virFree;
 virSocketAddrInNetwork;
 virSocketAddrIsNetmask;
 virSocketCheckNetmask;
+virSocketFormatAddr;
+virSocketGetPort;
 virSocketGetRange;
 virSocketParseAddr;
 virSocketParseIpv4Addr;
 virSocketParseIpv6Addr;
+virSocketSetPort;
 
 
 # network_conf.h
diff --git a/src/util/network.c b/src/util/network.c
index abd866c..674e768 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -9,6 +9,7 @@
  */
 
 #include config.h
+#include arpa/inet.h
 
 #include memory.h
 #include network.h
@@ -64,7 +65,7 @@ static int getIPv6Addr(virSocketAddrPtr addr, virIPv6AddrPtr 
tab) {
  * Mostly a wrapper for getaddrinfo() extracting the address storage
  * from the numeric string like 1.2.3.4 or 2001:db8:85a3:0:0:8a2e:370:7334
  *
- * Returns the lenght of the network address or -1 in case of error.
+ * Returns the length of the network address or -1 in case of error.
  */
 int
 virSocketParseAddr(const char *val, virSocketAddrPtr addr, int hint) {
@@ -116,6 +117,100 @@ virSocketParseIpv6Addr(const char *val, virSocketAddrPtr 
addr) {
 return(virSocketParseAddr(val, addr, AF_INET6));
 }
 
+/*
+ * virSocketFormatAddr:
+ * @addr: an initialised virSocketAddrPtr
+ *
+ * Returns a string representation of the given address
+ * Returns NULL on any error
+ * Caller must free the returned string
+ */
+char *
+virSocketFormatAddr(virSocketAddrPtr addr) {
+char   *out;
+size_t outlen;
+void   *inaddr;
+
+if (addr == NULL)
+return NULL;
+
+if (addr-stor.ss_family == AF_INET) {
+outlen = INET_ADDRSTRLEN;
+inaddr = addr-inet4.sin_addr;
+}
+
+else if (addr-stor.ss_family == AF_INET6) {
+outlen = INET6_ADDRSTRLEN;
+inaddr = addr-inet6.sin6_addr;
+}
+
+else {
+return NULL;
+}
+
+if (VIR_ALLOC_N(out, outlen)  0)
+return NULL;
+
+if (inet_ntop(addr-stor.ss_family, inaddr, out, outlen) == NULL) {
+VIR_FREE(out);
+return NULL;
+}
+
+return out;
+}
+
+/*
+ * virSocketSetPort:
+ * @addr: an initialised virSocketAddrPtr
+ * @port: the port number to set
+ *
+ * Set the transport layer port of the given virtSocketAddr
+ *
+ * Returns 0 on success, -1 on failure
+ */
+int
+virSocketSetPort(virSocketAddrPtr addr, int port) {
+if (addr == NULL)
+return -1;
+
+if(addr-stor.ss_family == AF_INET) {
+addr-inet4.sin_port = port;
+}
+
+else if(addr-stor.ss_family == AF_INET6) {
+addr-inet6.sin6_port = port;
+}
+
+else {
+return -1;
+}
+
+return 0;
+}
+
+/*
+ * virSocketGetPort:
+ * @addr: an initialised virSocketAddrPtr
+ *
+ * Returns the transport layer port of the given virtSocketAddr
+ * Returns -1 if @addr is invalid
+ */
+int
+virSocketGetPort(virSocketAddrPtr addr) {
+if (addr == NULL)
+return -1;
+
+if(addr-stor.ss_family == AF_INET) {
+return addr-inet4.sin_port;
+}
+
+else if(addr-stor.ss_family == AF_INET6) {
+return addr-inet6.sin6_port;
+}
+
+return -1;
+}
+
 /**
  * virSocketAddrIsNetmask:
  * @netmask: the netmask address
diff --git a/src/util/network.h b/src/util/network.h
index e590747..3762ef2 100644
--- a/src/util/network.h
+++ b/src/util/network.h
@@ -34,6 +34,12 @@ int virSocketParseIpv4Addr(const char *val,
 int virSocketParseIpv6Addr(const char *val,
virSocketAddrPtr addr);
 
+char * virSocketFormatAddr(virSocketAddrPtr addr);
+
+int virSocketSetPort(virSocketAddrPtr addr, int port);
+
+int virSocketGetPort(virSocketAddrPtr addr);
+
 int virSocketAddrInNetwork(virSocketAddrPtr addr1,
virSocketAddrPtr addr2,
virSocketAddrPtr netmask);
-- 
1.6.2.5

--
Libvir-list mailing list
Libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] network utilities: Add functions for address-text and get/set port number

2009-11-02 Thread Laine Stump

I'm a bit behind the curve, but...

On 11/02/2009 05:57 AM, Matthew Booth wrote:

---
  src/libvirt_private.syms |3 ++
  src/util/network.c   |   88 +-
  src/util/network.h   |6 +++
  3 files changed, 96 insertions(+), 1 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 8525dbd..15d75fd 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -289,10 +289,13 @@ virFree;
  virSocketAddrInNetwork;
  virSocketAddrIsNetmask;
  virSocketCheckNetmask;
+virSocketFormatAddr;
+virSocketGetPort;
  virSocketGetRange;
  virSocketParseAddr;
  virSocketParseIpv4Addr;
  virSocketParseIpv6Addr;
+virSocketSetPort;


  # network_conf.h
diff --git a/src/util/network.c b/src/util/network.c
index abd866c..094130f 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -9,6 +9,7 @@
   */

  #includeconfig.h
+#includearpa/inet.h

  #include memory.h
  #include network.h
@@ -64,7 +65,7 @@ static int getIPv6Addr(virSocketAddrPtr addr, virIPv6AddrPtr 
tab) {
   * Mostly a wrapper for getaddrinfo() extracting the address storage
   * from the numeric string like 1.2.3.4 or 2001:db8:85a3:0:0:8a2e:370:7334
   *
- * Returns the lenght of the network address or -1 in case of error.
+ * Returns the length of the network address or -1 in case of error.
   */
  int
  virSocketParseAddr(const char *val, virSocketAddrPtr addr, int hint) {
@@ -116,6 +117,91 @@ virSocketParseIpv6Addr(const char *val, virSocketAddrPtr 
addr) {
  return(virSocketParseAddr(val, addr, AF_INET6));
  }

+/*
+ * virSocketFormatAddr:
+ * @addr: an initialised virSocketAddrPtr
+ *
+ * Returns a string representation of the given address
+ * Returns NULL on any error
+ * Caller must free the returned string
+ */
+char *
+virSocketFormatAddr(virSocketAddrPtr addr) {
+char   *out;
+size_t outlen;
+void   *inaddr;
+
+if (addr-stor.ss_family == AF_INET) {
+outlen = INET_ADDRSTRLEN;
+inaddr =addr-inet4.sin_addr;
+}
+
+else if (addr-stor.ss_family == AF_INET6) {
+outlen = INET6_ADDRSTRLEN;
+inaddr =addr-inet6.sin6_addr;
+}
+
+else {
+return NULL;
+}
+
+if (VIR_ALLOC_N(out, outlen)  0)
+return NULL;
+
+if (inet_ntop(addr-stor.ss_family, inaddr, out, outlen) == NULL) {
+VIR_FREE(out);
+return NULL;
+}
+
+return out;
+}
+
+/*
+ * virSocketSetPort:
+ * @addr: an initialised virSocketAddrPtr
+ * @port: the port number to set
+ *
+ * Set the transport layer port of the given virtSocketAddr
+ *
+ * Returns 0 on success, -1 on failure
+ */
+int
+virSocketSetPort(virSocketAddrPtr addr, in_port_t port) {
+if(addr-stor.ss_family == AF_INET) {
+addr-inet4.sin_port = port;
   



sin_port needs to be in network byte order. Unless you're figuring on 
the caller always remembering to do htons(), you might want to do it here.




+}
+
+else if(addr-stor.ss_family == AF_INET6) {
+addr-inet6.sin6_port = port;
   


Likewise.



+}
+
+else {
+return -1;
+}
+
+return 0;
+}
+
+/*
+ * virSocketGetPort:
+ * @addr: an initialised virSocketAddrPtr
+ *
+ * Returns the transport layer port of the given virtSocketAddr
+ * Returns 0 if @addr is invalid
+ */
+in_port_t
+virSocketGetPort(virSocketAddrPtr addr) {
+if(addr-stor.ss_family == AF_INET) {
+return addr-inet4.sin_port;
   


Again, depending on how far you want this abstraction to go, you might 
want to do ntohs of sin_port.



+}
+
+else if(addr-stor.ss_family == AF_INET6) {
+return addr-inet6.sin6_port;
   


Ditto.


+}
+
+return 0;
+}
+
  /**
   * virSocketAddrIsNetmask:
   * @netmask: the netmask address
diff --git a/src/util/network.h b/src/util/network.h
index e590747..7618547 100644
--- a/src/util/network.h
+++ b/src/util/network.h
@@ -34,6 +34,12 @@ int virSocketParseIpv4Addr(const char *val,
  int virSocketParseIpv6Addr(const char *val,
 virSocketAddrPtr addr);

+char * virSocketFormatAddr(virSocketAddrPtr addr);
+
+int virSocketSetPort(virSocketAddrPtr addr, in_port_t port);
+
+in_port_t virSocketGetPort(virSocketAddrPtr addr);
+
  int virSocketAddrInNetwork(virSocketAddrPtr addr1,
 virSocketAddrPtr addr2,
 virSocketAddrPtr netmask);
   


--
Libvir-list mailing list
Libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list