From: Vince Busam <vbusam@xxxxxxxxxx>
Introduce new 'af' fields into IPVS structures for specifying an entry's
address family. Make IP addresses a union holding both an IPv4 and an IPv6
address. In kernel-internal structs, have the union only hold IPv4
addresses if no IPv6 support is enabled to save some space.
Bump IPVS version to 0x020000 because of this change.
Signed-off-by: Vince Busam <vbusam@xxxxxxxxxx>
1 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index 9a51eba..b7b181e 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -11,7 +11,12 @@
#include <linux/sysctl.h> /* For ctl_path */
-#define IP_VS_VERSION_CODE 0x010201
+#ifdef __KERNEL__
+#include <linux/in6.h> /* For struct in6_addr */
+#include <linux/ipv6.h> /* For struct ipv6hdr */
+#endif /* __KERNEL */
+
+#define IP_VS_VERSION_CODE 0x020000
#define NVERSION(version) \
(version >> 16) & 0xFF, \
(version >> 8) & 0xFF, \
@@ -95,6 +100,20 @@
#define IP_VS_SCHEDNAME_MAXLEN 16
#define IP_VS_IFNAME_MAXLEN 16
+union ip_vs_addr_user {
+ __be32 v4;
+ struct in6_addr v6;
+};
+
+#ifdef CONFIG_IP_VS_IPV6
+#define ip_vs_addr ip_vs_addr_user
+#define ip_vs_copy_addr(a, b) do { (a) = (b); } while (0)
+#else
+union ip_vs_addr {
+ __be32 v4;
+};
+#define ip_vs_copy_addr(a, b) do { (a).v4 = (b).v4; } while (0)
+#endif
/*
* The struct ip_vs_service_user and struct ip_vs_dest_user are
@@ -102,8 +121,9 @@
*/
struct ip_vs_service_user {
/* virtual service addresses */
+ u_int16_t af;
u_int16_t protocol;
- __be32 addr; /* virtual ip address */
+ union ip_vs_addr_user addr; /* virtual ip address */
__be16 port;
u_int32_t fwmark; /* firwall mark of service */
@@ -117,7 +137,8 @@ struct ip_vs_service_user {
struct ip_vs_dest_user {
/* destination server address */
- __be32 addr;
+ u_int16_t af;
+ union ip_vs_addr_user addr;
__be16 port;
/* real server options */
@@ -165,8 +186,9 @@ struct ip_vs_getinfo {
/* The argument to IP_VS_SO_GET_SERVICE */
struct ip_vs_service_entry {
/* which service: user fills in these */
+ u_int16_t af;
u_int16_t protocol;
- __be32 addr; /* virtual address */
+ union ip_vs_addr_user addr; /* virtual address */
__be16 port;
u_int32_t fwmark; /* firwall mark of service */
@@ -185,7 +207,8 @@ struct ip_vs_service_entry {
struct ip_vs_dest_entry {
- __be32 addr; /* destination address */
+ u_int16_t af;
+ union ip_vs_addr_user addr; /* destination address */
__be16 port;
unsigned conn_flags; /* connection flags */
int weight; /* destination weight */
@@ -205,8 +228,9 @@ struct ip_vs_dest_entry {
/* The argument to IP_VS_SO_GET_DESTS */
struct ip_vs_get_dests {
/* which service: user fills in these */
+ u_int16_t af;
u_int16_t protocol;
- __be32 addr; /* virtual address */
+ union ip_vs_addr_user addr; /* virtual address */
__be16 port;
u_int32_t fwmark; /* firwall mark of service */
@@ -472,9 +496,10 @@ struct ip_vs_conn {
struct list_head c_list; /* hashed list heads */
/* Protocol, addresses and port numbers */
- __be32 caddr; /* client address */
- __be32 vaddr; /* virtual address */
- __be32 daddr; /* destination address */
+ u_int16_t af; /* address family */
+ union ip_vs_addr caddr; /* client address */
+ union ip_vs_addr vaddr; /* virtual address */
+ union ip_vs_addr daddr; /* destination address */
__be16 cport;
__be16 vport;
__be16 dport;
@@ -527,8 +552,9 @@ struct ip_vs_service {
atomic_t refcnt; /* reference counter */
atomic_t usecnt; /* use counter */
+ u_int16_t af; /* address family */
__u16 protocol; /* which protocol (TCP/UDP) */
- __be32 addr; /* IP address for virtual service */
+ union ip_vs_addr addr; /* IP address for virtual service */
__be16 port; /* port number for the service */
__u32 fwmark; /* firewall mark of the service */
unsigned flags; /* service status flags */
@@ -555,7 +581,8 @@ struct ip_vs_dest {
struct list_head n_list; /* for the dests in the service */
struct list_head d_list; /* for table with all the dests */
- __be32 addr; /* IP address of the server */
+ u_int16_t af; /* address family */
+ union ip_vs_addr addr; /* IP address of the server */
__be16 port; /* port number of the server */
volatile unsigned flags; /* dest status flags */
atomic_t conn_flags; /* flags to copy to conn */
@@ -579,7 +606,7 @@ struct ip_vs_dest {
/* for virtual service */
struct ip_vs_service *svc; /* service it belongs to */
__u16 protocol; /* which protocol (TCP/UDP) */
- __be32 vaddr; /* virtual IP address */
+ union ip_vs_addr vaddr; /* virtual IP address */
__be16 vport; /* virtual port number */
__u32 vfwmark; /* firewall mark of service */
};
--
1.5.3.6
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
|