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-api

[Xen-API] [PATCH 1 of 2] CP-1591: Propagate Network.MTU field to xenstor

To: xen-api@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-API] [PATCH 1 of 2] CP-1591: Propagate Network.MTU field to xenstore for use in VIF hotplug script
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Wed, 24 Feb 2010 10:50:48 +0000
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Delivery-date: Wed, 24 Feb 2010 02:50:54 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1267008647@xxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1267008538 0
# Node ID 219104a041786d7274b15800de5c3efccf0c4f42
# Parent  005747c941859b3a18bf085b5674b40ecf5cbbc6
CP-1591: Propagate Network.MTU field to xenstore for use in VIF hotplug script.

Allow VIF.other-config:mtu to override the network-wide setting.

Update quicktest to understand that Network.MTU is the default MTU for
a VIF with VIF.other-config:mtu as an override.

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

diff -r 005747c94185 -r 219104a04178 ocaml/xapi/quicktest.ml
--- a/ocaml/xapi/quicktest.ml   Wed Feb 24 10:48:58 2010 +0000
+++ b/ocaml/xapi/quicktest.ml   Wed Feb 24 10:48:58 2010 +0000
@@ -339,6 +339,7 @@
        let bridge = Client.Network.get_bridge !rpc session_id network in
        let device = Printf.sprintf "vif%Ld.%s" (Client.VM.get_domid !rpc 
session_id vm) (Client.VIF.get_device !rpc session_id vif) in
        let devices = Netdev.network.Netdev.intf_list bridge in
+       let other_config = Client.VIF.get_other_config !rpc session_id vif in
        if not(List.mem device devices) 
        then failed test (Printf.sprintf "Failed to find device %s on bridge %s 
(found [ %s ])" device bridge (String.concat ", " devices))
        else debug test (Printf.sprintf "Device %s is on bridge %s" device 
bridge);
@@ -347,7 +348,6 @@
        let sysfs_promisc = Printf.sprintf "/sys/class/net/%s/brport/promisc" 
device in
        if Sys.file_exists sysfs_promisc
        then begin
-         let other_config = Client.VIF.get_other_config !rpc session_id vif in
          let promisc = List.mem_assoc "promiscuous" other_config && (let x = 
List.assoc "promiscuous" other_config in x = "true" || x = "on") in
          let promisc' = read_sys sysfs_promisc = "1" in
          if promisc <> promisc' 
@@ -357,12 +357,13 @@
          debug test (Printf.sprintf "%s not found. assuming unsupported" 
sysfs_promisc);
 
        (* Check the MTU *)
-       let mtu = Client.VIF.get_MTU !rpc session_id vif in
-       let mtu' = if mtu = 0L then 1500L else mtu in
+       let mtu = Client.Network.get_MTU !rpc session_id network in
+       let mtu' = if List.mem_assoc "mtu" other_config
+         then Int64.of_string(List.assoc "mtu" other_config) else mtu in
        let mtu'' = Int64.of_string (read_sys (Printf.sprintf 
"/sys/class/net/%s/mtu" device)) in
        if mtu' <> mtu'' 
-       then failed test (Printf.sprintf "VIF.MTU is %Ld but /sys says %Ld" mtu 
mtu'')
-       else debug test (Printf.sprintf "VIF.MTU is %Ld and /sys says %Ld" mtu 
mtu'');
+       then failed test (Printf.sprintf "VIF.MTU is %Ld but /sys says %Ld" 
mtu' mtu'')
+       else debug test (Printf.sprintf "VIF.MTU is %Ld and /sys says %Ld" mtu' 
mtu'');
     ) vifs
 
 let rec wait_for_task_complete session_id task = 
@@ -600,7 +601,7 @@
     | _ -> failwith "Expecting 1 new disk!"
 
 let make_vif ~session_id ~vM ~network ~device = 
-  Client.VIF.create ~rpc:!rpc ~session_id ~vM ~network ~mTU:1400L ~mAC:"" 
~device ~other_config:["promiscuous", "on"] ~qos_algorithm_type:"" 
~qos_algorithm_params:[] 
+  Client.VIF.create ~rpc:!rpc ~session_id ~vM ~network ~mTU:0L ~mAC:"" ~device 
~other_config:["promiscuous", "on"; "mtu", "1400"] ~qos_algorithm_type:"" 
~qos_algorithm_params:[] 
 
 let with_debian s f = 
   try
diff -r 005747c94185 -r 219104a04178 ocaml/xapi/vm_config.ml
--- a/ocaml/xapi/vm_config.ml   Wed Feb 24 10:48:58 2010 +0000
+++ b/ocaml/xapi/vm_config.ml   Wed Feb 24 10:48:58 2010 +0000
@@ -43,8 +43,9 @@
     warn "vif QoS failed: %s (vm=%s,vif=%s)" reason vm_r.API.vM_uuid 
vif_r.API.vIF_uuid in
   
   let mac = vif_r.API.vIF_MAC in
-  let mtu = Int64.to_int vif_r.API.vIF_MTU in
-  
+  let vif_mtu = if (List.mem_assoc "mtu" vif_r.API.vIF_other_config) then
+    Some (int_of_string (List.assoc "mtu" vif_r.API.vIF_other_config)) else 
None in
+
   let qos_type = vif_r.API.vIF_qos_algorithm_type in
   let qos_params = vif_r.API.vIF_qos_algorithm_params in
   let rate = match qos_type with
@@ -71,6 +72,9 @@
   try
     let network_ref = vif_r.API.vIF_network in
     let bridge = Db.Network.get_bridge ~__context ~self:network_ref in
+    let mtu = match vif_mtu with
+      | Some mtu -> mtu
+      | None -> Int64.to_int (Db.Network.get_MTU ~__context ~self:network_ref) 
in
     Some {
       domid = domid;
       vif_ref = vif;
diff -r 005747c94185 -r 219104a04178 ocaml/xapi/xapi_network.ml
--- a/ocaml/xapi/xapi_network.ml        Wed Feb 24 10:48:58 2010 +0000
+++ b/ocaml/xapi/xapi_network.ml        Wed Feb 24 10:48:58 2010 +0000
@@ -25,6 +25,7 @@
 *)
 
 let create_internal_bridge ~bridge =
+  debug "Creating internal bridge %s" bridge;
   let current = Netdev.network.Netdev.list () in
   if not(List.mem bridge current) then Netdev.network.Netdev.add bridge;
   if not(Netdev.Link.is_up bridge) then Netdev.Link.up bridge

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

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