WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] xl create ipv6 support

To: Carlos <cechevarne@xxxxxxxxx>
Subject: Re: [Xen-devel] xl create ipv6 support
From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
Date: Mon, 21 Feb 2011 09:44:22 +0000
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Mon, 21 Feb 2011 01:45:30 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <AANLkTi=k03gF7Z8Pn29bVeOWEeUC+mwH+K+QW7HhgiZG@xxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <AANLkTi=k03gF7Z8Pn29bVeOWEeUC+mwH+K+QW7HhgiZG@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Fri, 2011-02-18 at 17:19 +0000, Carlos wrote:
> I
> am changing the vif-common file to automatically configure anti-spoofing 
> rules for ipv6. With xm commands work well everything.
> 
> The ipv6 is recorded correctly in "xen-store" when the domain starts
> with "xm create"  but with "xl create" doesn't.

I prototyped adding parsing and formatting for IPv6 addresses but then I
looked at what xend does and it simply passes the ip= string through
without any introspection, so lets do that in xl too.

Does the following fix the issue?

If preference is for libxl/xl to actually understand the IPv6 addresses
I still have the prototype code which I could resurrect.

Ian.

8<---------------------

# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1298281384 0
# Node ID 44ba31b97a1f0f2628298e285d9eb64ab39eeeac
# Parent  c529d4d7d79ba3fe69ffb6cbacac5c9e3e5cf246
xl/libxl: treat vif "ip" fields as a simple string

Currently we parse the string as an IPv4 address but this does not
handle IPv6. We then format the IP address as a string into xenstore.
Rather than add further parsing and formatting to support IPv6 simply
treat the field as a string, which it turns out is all xend does.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r c529d4d7d79b -r 44ba31b97a1f tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Thu Feb 17 10:02:52 2011 +0000
+++ b/tools/libxl/libxl.c       Mon Feb 21 09:43:04 2011 +0000
@@ -30,8 +30,6 @@
 #include <stdint.h>
 #include <inttypes.h>
 #include <assert.h>
-
-#include <arpa/inet.h>
 
 #include "libxl.h"
 #include "libxl_utils.h"
@@ -1125,7 +1123,7 @@ int libxl_device_nic_init(libxl_device_n
     nic_info->mac[5] = r[2];
     nic_info->ifname = NULL;
     nic_info->bridge = strdup("xenbr0");
-    nic_info->ip.s_addr = 0UL;
+    nic_info->ip = NULL;
     if ( asprintf(&nic_info->script, "%s/vif-bridge",
                libxl_xen_script_dir_path()) < 0 )
         return ERROR_FAIL;
@@ -1185,16 +1183,11 @@ int libxl_device_nic_add(libxl_ctx *ctx,
     flexarray_append(back, libxl__sprintf(&gc, "%02x:%02x:%02x:%02x:%02x:%02x",
                                                  nic->mac[0], nic->mac[1], 
nic->mac[2],
                                                  nic->mac[3], nic->mac[4], 
nic->mac[5]));
-    if (nic->ip.s_addr != 0UL) {
-        char dst[INET_ADDRSTRLEN];
-        const char *addr = inet_ntop(AF_INET, &nic->ip.s_addr, &dst[0], 
INET_ADDRSTRLEN);
-        if (addr) {
-            flexarray_append(back, "ip");
-            flexarray_append(back, libxl__strdup(&gc, addr));
-        } else {
-            LIBXL__LOG(ctx, LIBXL__LOG_WARNING, "Unable to format IP address");
-        }
+    if (nic->ip) {
+        flexarray_append(back, "ip");
+        flexarray_append(back, libxl__strdup(&gc, nic->ip));
     }
+
     flexarray_append(back, "bridge");
     flexarray_append(back, libxl__strdup(&gc, nic->bridge));
     flexarray_append(back, "handle");
diff -r c529d4d7d79b -r 44ba31b97a1f tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl     Thu Feb 17 10:02:52 2011 +0000
+++ b/tools/libxl/libxl.idl     Mon Feb 21 09:43:04 2011 +0000
@@ -218,7 +218,7 @@ libxl_device_nic = Struct("device_nic", 
     ("mtu", integer),
     ("model", string),
     ("mac", libxl_mac),
-    ("ip", inaddr_ip),
+    ("ip", string),
     ("bridge", string),
     ("ifname", string),
     ("script", string),
diff -r c529d4d7d79b -r 44ba31b97a1f tools/libxl/libxltypes.py
--- a/tools/libxl/libxltypes.py Thu Feb 17 10:02:52 2011 +0000
+++ b/tools/libxl/libxltypes.py Mon Feb 21 09:43:04 2011 +0000
@@ -159,8 +159,6 @@ domid = UInt(32)
 
 string = Builtin("char *", namespace = None, destructor_fn = "free")
 
-inaddr_ip = Builtin("struct in_addr", namespace = None)
-
 class OrderedDict(dict):
     """A dictionary which remembers insertion order.
 
diff -r c529d4d7d79b -r 44ba31b97a1f tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Thu Feb 17 10:02:52 2011 +0000
+++ b/tools/libxl/xl_cmdimpl.c  Mon Feb 21 09:43:04 2011 +0000
@@ -30,7 +30,6 @@
 #include <signal.h>
 #include <sys/socket.h>
 #include <sys/select.h>
-#include <arpa/inet.h>
 #include <sys/utsname.h> /* for utsname in xl info */
 #include <xenctrl.h>
 #include <ctype.h>
@@ -828,7 +827,8 @@ static void parse_config_data(const char
                     else
                         nic->nictype = NICTYPE_VIF;
                 } else if (!strcmp(p, "ip")) {
-                    inet_pton(AF_INET, p2 + 1, &nic->ip);
+                    free(nic->ip);
+                    nic->ip = strdup(p2 + 1);
                 } else if (!strcmp(p, "script")) {
                     free(nic->script);
                     nic->script = strdup(p2 + 1);
@@ -4247,10 +4247,8 @@ int main_networkattach(int argc, char **
         } else if (!strncmp("bridge=", *argv, 7)) {
             nic.bridge = (*argv) + 7;
         } else if (!strncmp("ip=", *argv, 3)) {
-            if (!inet_aton((*argv) + 3, &(nic.ip))) {
-                fprintf(stderr, "Invalid parameter `ip'.\n");
-                return 1;
-            }
+            free(nic.ip);
+            nic.ip = strdup((*argv) + 3);
         } else if (!strncmp("script=", *argv, 6)) {
             nic.script = (*argv) + 6;
         } else if (!strncmp("backend=", *argv, 8)) {



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>