[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-API] [PATCH 3 of 8] Tunnelling: creation and destruction of tunnels


  • To: xen-api@xxxxxxxxxxxxxxxxxxx
  • From: Rob Hoes <rob.hoes@xxxxxxxxxx>
  • Date: Fri, 9 Jul 2010 15:59:49 +0100
  • Delivery-date: Fri, 09 Jul 2010 08:05:00 -0700
  • List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>

# HG changeset patch
# User Rob Hoes <rob.hoes@xxxxxxxxxx>
# Date 1278671988 -3600
# Node ID a7baa421f3d5efc6198dab2849359a4cecf7efd0
# Parent  2c476bb5574a9e4c53960dd759d03578c20a31ea
Tunnelling: creation and destruction of tunnels

Signed-off-by: Rob Hoes <rob.hoes@xxxxxxxxxx>

diff -r 2c476bb5574a -r a7baa421f3d5 ocaml/xapi/xapi_tunnel.ml
--- a/ocaml/xapi/xapi_tunnel.ml
+++ b/ocaml/xapi/xapi_tunnel.ml
@@ -14,11 +14,36 @@
 module D = Debug.Debugger(struct let name="xapi" end) 
 open D
 
+let choose_tunnel_device_name ~__context ~host = 
+       let pifs = List.filter (fun self -> Db.PIF.get_host ~__context ~self = 
host) (Db.PIF.get_all ~__context) in
+       let devices = List.map (fun self -> Db.PIF.get_device ~__context ~self) 
pifs in
+       let rec choose n = 
+               let name = Printf.sprintf "tunnel%d" n in
+               if List.mem name devices
+               then choose (n + 1)
+               else name in
+       choose 0
+
 let create ~__context ~transport_PIF ~network =
-       debug "CREATE TUNNEL";
-       Ref.make ()
+       let tunnel = Ref.make () in
+       let access_PIF = Ref.make () in
+       let host = Db.PIF.get_host ~__context ~self:transport_PIF in
+       let device = choose_tunnel_device_name ~__context ~host in
+       let device_name = device in
+       let mAC = Xapi_vif_helpers.gen_mac (0, Uuid.to_string (Uuid.make_uuid 
())) in
+       Db.PIF.create ~__context ~ref:access_PIF ~uuid:(Uuid.to_string 
(Uuid.make_uuid ()))
+               ~device ~device_name ~network ~host ~mAC ~mTU:(-1L) ~vLAN:(-1L) 
~metrics:Ref.null
+               ~physical:false ~currently_attached:false 
+               ~ip_configuration_mode:`None ~iP:"" ~netmask:"" ~gateway:"" 
~dNS:"" ~bond_slave_of:Ref.null 
+               ~vLAN_master_of:Ref.null ~management:false ~other_config:[] 
~disallow_unplug:false;
+       Db.Tunnel.create ~__context ~ref:tunnel ~uuid:(Uuid.to_string 
(Uuid.make_uuid ()))
+               ~access_PIF ~transport_PIF ~status:["active", "false"] 
~other_config:[];
+       Xapi_pif.plug ~__context ~self:access_PIF;
+       tunnel
        
 let destroy ~__context ~self =
-       debug "DESTROY TUNNEL";
-       ()
+       let pif = Db.Tunnel.get_access_PIF ~__context ~self in
+       Xapi_pif.unplug ~__context ~self:pif;
+       Db.PIF.destroy ~__context ~self:pif;
+       Db.Tunnel.destroy ~__context ~self
 
diff -r 2c476bb5574a -r a7baa421f3d5 ocaml/xapi/xapi_vif_helpers.mli
--- a/ocaml/xapi/xapi_vif_helpers.mli
+++ b/ocaml/xapi/xapi_vif_helpers.mli
@@ -64,4 +64,7 @@
   __context:Context.t ->
   vm:[ `VM ] Ref.t ->
   preserve_mac_address:bool -> [ `VIF ] Ref.t -> API.ref_VIF
-  
+
+(** Generate a MAC address *)  
+val gen_mac : int * string -> string
+
 ocaml/xapi/xapi_tunnel.ml       |  33 +++++++++++++++++++++++++++++----
 ocaml/xapi/xapi_vif_helpers.mli |   5 ++++-
 2 files changed, 33 insertions(+), 5 deletions(-)


Attachment: xen-api.hg-3.patch
Description: Text Data

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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.